一. 配置MySQL数据库主从同步
系统环境:Linux
MySQL版本:5.7 注意:主从数据库MySQL版本务必保持一致
具体概括为以下操作步骤
1)开启master的二进制日志
2)开启slave的二进制日志
3)将slave指向master
4)开始复制
1.1 开启master二进制日志
1)编辑mysql配置文件
vi /etc/my.cnf
2)添加二进制日志配置,开启二进制(mysql-bin只是二进制日志名称,可以自行指定)
server-id=1 #id是一定要指定的,是唯一的标识(master数据库要比slave数据库的id优先级高才行) log-bin=mysql-bin #开启二进制日志
3)授权
登录数据库,需要给slave数据库配置一个用户/密码的权限
允许某个ip地址的某个用户以某个密码对当前数据库的所有库和表进行复制操作
mysql> grant replication slave on *.* to 'root'@'slave数据库ip' identified by '密码';
PS:如果在重置密码时提示 如下错误:
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
主要原因是当前设置的密码不符合规则,设置为8位长度并包含大小写字母及特殊符号即可,或者修改密码规则,具体自行Google
配置之后需要刷新权限
mysql> flush privileges;
上面修改配置文件需重启服务
service mysqld restart
4)查看master的状态
mysql> show master status;
file:是日志文件名称
position:日志所在位置
1.2 开启slave的二进制日志
登录slave服务器
1)配置my.cnf配置文件
vi /etc/my.cnf
2)添加slave二进制日志配置,开启二进制(mysql-bin只是二进制日志名称,可以自行指定)
server-id=2 log-bin=mysql-bin
注意:每一台指定唯一的一个server-id标识
修改完配置服务需重启服务
service mysqld restart
3)配置slave指向master
mysql> change master to
-> master_host='master数据库ip',
-> master_user='master授权账号',
-> master_password='授权密码',
-> master_log_file='master日志文件(例:mysql-bin.000001)',
-> master_log_pos=master日志所在位置(例:1250);
master的日志文件名称可以在master数据库使用show master status;查看到
1.3 开启主从复制
在slave服务器上执行
mysql> start slave;
查看slave运行状态
mysql> show slave status\G;
可看到如下内容
mysql> show slave status\G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 106.53.73.200
Master_User: root
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 154
Relay_Log_File: VM_0_16_centos-relay-bin.000002
Relay_Log_Pos: 320
Relay_Master_Log_File: mysql-bin.000001
Slave_IO_Running: Yes
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: 154
Relay_Log_Space: 536
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: 0
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 1
Master_UUID: f8100725-c3e5-11e9-ae45-525400da2f1f
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:
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)ERROR:
No query specified
能查看到这两个为yes则表示成功
Slave_IO_Running: Yes #表示slave的日志读取线程开启
Slave_SQL_Running: Yes #表示SQL执行线程开启
如果出现不同步情况参考网址:https://blog.csdn.net/heng_ji/article/details/51013710
1.4 配置需要同步的数据库以及不需要同步的数据库
1)停止Master服务
service mysqld stop
2)修改配置文件
vim /etc/my.cnf
增加如下内容
binlog_do_db=myslave # 如果需要同时同步多个数据库,请另起一行设置binlog_do_db=需要同步的数据库名称 binlog_ignore_db=mysql # 不想同步的数据库
1.5 补充内容
我在后续的教程中使用到了本次教程创建的主从数据库,但是我发现数据同步功能失效
排查了一下,发现是Slave_SQL_Running变成了No,那么如何解决呢?
解决办法如下:
登录数据库 mysql -u账号 -p (写给小白的 我太贴心) 执行如下命令: MariaDB [(none)]> stop slave; MariaDB [(none)]> SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1; START SLAVE; MariaDB [(none)]> start slave; MariaDB [(none)]> show slave status\G
如果是slave_io_running:no
解决办法如下:
1、查看主服务器
MariaDB [(none)]> show master status\G
2、在从服务器上查看
问题所在:发现Master_Log_File没有对应
3、在出现Slave_IO_Running: No的机器上操作
MariaDB [(none)]> slave stop; MariaDB [(none)]>CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000026', MASTER_LOG_POS=0; MariaDB [(none)]> slave start; MariaDB [(none)]> show slave status\G
问题解决 ~