MySQL数据库主从搭建(详细图文)

coding部落 2024-10-05 12:07:02 阅读 78

MySQL数据库主从搭建(详细图文)

前言

主从原理:

在这里插入图片描述

MySQL之间数据复制的基础是二进制日志文件(binary log file)。一台MySQL数据库一旦启用二进制日志后,其作为master,它的数据库中所有操作都会以“事件”的方式记录在二进制日志中,其他数据库作为slave通过一个I/O线程与主服务器保持通信,并监控master的二进制日志文件的变化,如果发现master二进制日志文件发生变化,则会把变化复制到自己的中继日志中,然后slave的一个SQL线程会把相关的“事件”执行到自己的数据库中,以此实现从数据库和主数据库的一致性,也就实现了主从复制。

一、主从搭建准备

1.主从数据库版本一致

2.主从数据库内数据保持一致

3.克隆虚拟机,只需在一个虚拟机搭建环境,然后克隆两台虚拟机当做从机(我搭建的是一主两从)

二、Master

1.修改mysql配置文件

<code>cd /etc

vim my.cnf

或者 vim /etc/my.cnf

./etc/my.cnf

##master 中my.cnf需要添加的内容

server-id=188 //master 192.168.88.188 去最后的188作为id

log-bin=mysql-bin

binlog_format=MIXED

sync_binlog=1

expire_logs_days=0

binlog-do-db=news //news 为数据库的名称

在这里插入图片描述

2.创建授权用户

//开启mysql服务

<code>service mysqld start

//查看mysql运行状态

service mysqld status

//进入mysql

mysql -u root -p

注意复制粘贴后将标点符号更改为西文符号!!

//创建一个从机用户 并指定可以从本机外部进行访问

//MySQL5.7clone为密码,设置一个自己能记住的密码

create user 'slave'@'%' identified by ‘MySQL5.7clone’

//设置slave远程从机账户拥有一个可以复制的权限

grant replication slave,replication client on *.* to ‘slave’@’%’

在这里插入图片描述

3.查看日志和宿主机master的状态

代码如下(示例):

查看log_bin日志是否属于开启状态

<code>show variables like ‘log_bin’;

查看当前操作的宿主机是否为master状态

show master status;

在这里插入图片描述

在这里插入图片描述

这里要记住 file和position,后面配置slave会用到

该处使用的url网络请求的数据

三、slave操作

1.修改宿主机的server-id

进入从库宿主机后修改my.cnf配置文件加入server-id即可

同master操作

但是只需要 添加server-id即可

2.进入mysql执行相关命令

//首先要关掉slave

<code>stop slave

//重点

//执行下面的语句 将下面的语句复制到记事本上,保证是一行数据,然后复制到mysql中

//master_host为master的ip

//master_password 为授权时设置的密码

//master_log_file 分别为上文中需要你记住的file和position

change master to master_host='192.168.88.188', master_port=3306,master_user='slave',master_password='MySQL5.7clone',master_log_file='mysql-bin.000001',master_log_file=617code>

在这里插入图片描述

在这里插入图片描述

//执行完后开启slave

start slave;

在这里插入图片描述

查看同步状态

<code>show slave status \G

若下面两个状态都是yes,则搭建成功,若是Slave_IO_Running为NO,则去查看master和slave的uuid是否一致

Slave_IO_Running: No

Slave_SQL_Running: Yes

*************************** 1. row ***************************

Slave_IO_State:

Master_Host: 192.168.25.136

Master_User: slave

Master_Port: 3306

Connect_Retry: 60

Master_Log_File: mysql-bin.000001

Read_Master_Log_Pos: 617

Relay_Log_File: localhost-relay-bin.000001

Relay_Log_Pos: 4

Relay_Master_Log_File: mysql-bin.000001

Slave_IO_Running: No

Slave_SQL_Running: Yes

Replicate_Do_DB:

Replicate_Ignore_DB:

Replicate_Do_Table:

Replicate_Ignore_Table:

Replicate_Wild_Do_Table:

Replicate_Wild_Ignore_Table:

Last_Errno: 0

Last_Error:

Skip_Counter: 0

Exec_Master_Log_Pos: 617

Relay_Log_Space: 154

Until_Condition: None

Until_Log_File:

Until_Log_Pos: 0

Master_SSL_Allowed: No

Master_SSL_CA_File:

Master_SSL_CA_Path:

Master_SSL_Cert:

Master_SSL_Cipher:

Master_SSL_Key:

Seconds_Behind_Master: NULL

Master_SSL_Verify_Server_Cert: No

Last_IO_Errno: 1593

Last_IO_Error: Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work.

Last_SQL_Errno: 0

Last_SQL_Error:

Replicate_Ignore_Server_Ids:

Master_Server_Id: 136

Master_UUID:

Master_Info_File: /var/lib/mysql/master.info

SQL_Delay: 0

SQL_Remaining_Delay: NULL

Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates

Master_Retry_Count: 86400

Master_Bind:

Last_IO_Error_Timestamp: 201114 11:40:14

Last_SQL_Error_Timestamp:

Master_SSL_Crl:

Master_SSL_Crlpath:

Retrieved_Gtid_Set:

Executed_Gtid_Set:

Auto_Position: 0

Replicate_Rewrite_DB:

Channel_Name:

Master_TLS_Version:

1 row in set (0.00 sec)

3.UUID的相关配置

//查看主机与从机的uuid

Show variables like ‘%uuid%’

//如果两边一致就需要将从库的auto.cnf文件删除

//可以选择备份 或者删除

//备份

mv auto.cnf ./auto.cnf.back

//删除

rm -rf auto.cnf

删除后在启动从机mysql服务进入客户端执行salve状态

show slave status \G

//状态会变为

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

四、测试

数据库工具新建连接,一个为master,将master的数据导出

新建两个slave连接,将数据导入

修改master连接中的数据,查看从库是否改变,改变则MySql数据库主从搭建成功



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。