mariadb主从复制
采用一主一从,读写分离结构
Master: 172.16.11.31/16
Slave: 172.16.11.32/16
服务器配置
Master服务器配置
修改数据库配置文件
1 2 3 4 5 6 7 8 9 10
| vim /etc/my.conf #添加配置 [mysqld] log-bin=mysql-bin #[必须]启用二进制日志 server-id=31 #[必须]服务器唯一ID,默认是1(从数据库ID要比主数据库ID大) #read-only=0 #忽略的数据,指不需要同步的数据库 #binlog-ignore-db=mysql #指定同步的数据库 #binlog-do-db=db01
|
配置完成重启数据库以使更改生效。
主库配置
登陆mysql,创建远程连接账号,并授予主从复制权限。
1 2 3 4 5 6 7 8 9 10
| #创建同步用户,设置密码 #CREATE USER 'replication_user'@'slave_ip_address' IDENTIFIED BY 'password'; #分配权限 #GRANT REPLICATION SLAVE ON *.* TO 'replication_user'@'slave_ip_address'; #刷新权限 #FLUSH PRIVILEGES; #创建sync用户用于同步,并设置密码,该用户可在任意主机连接该MYSQL服务,分配权限并刷新权限。 CREATE USER 'sync'@'172.16.11.32' IDENTIFIED BY 'password'; GRANT REPLICATION SLAVE ON *.* TO 'sync'@'172.16.11.32'; FLUSH PRIVILEGES;
|
Master服务器配置完毕
Slave服务器配置
修改数据库配置文件
1 2 3 4
| vim /etc/my.conf #添加配置 [mysqld] server-id=32 #[必须]服务器唯一ID,默认是1(从数据库ID要比主数据库ID大)
|
配置完成重启数据库以使更改生效。
初始化从服务器:将主服务器的数据复制到从服务器上。在从服务器上执行以下命令(错误案例):
1 2 3 4
| STOP SLAVE; RESET SLAVE; CHANGE MASTER TO MASTER_HOST='172.16.11.31', MASTER_USER='sync',MASTER_PASSWORD='password'; START SLAVE;
|
Slave服务器配置完毕
验证复制状态:在主服务器上进行一些数据更改,然后在从服务器上执行以下命令
IO和SQL线程默认处于关闭状态,需要手动开启
确保输出中的”Slave_IO_Running”和”Slave_SQL_Running”字段都显示为”YES”,并且”Seconds_Behind_Master”字段的值不断增长。这表示从服务器正在成功地复制主服务器上的数据。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| MariaDB [(none)]> SHOW SLAVE STATUS\G ; *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 172.16.11.31 Master_User: sync Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000004 Read_Master_Log_Pos: 942 Relay_Log_File: mysql01-relay-bin.000005 Relay_Log_Pos: 627 Relay_Master_Log_File: mysql-bin.000004 Slave_IO_Running: Yes Slave_SQL_Running: No ······
|
发现错误
1 2
| #这里显示NO, Slave_SQL_Running: No
|
问题定位:
在从服务器上CHANGE MASTER TO语句中没有手动备份
解决方法
有两种方法解决:
方法1: (在mariadb中不支持MASTER_AUTO_POSITION = 1,故本方法不可用)
注意:只能在mysql中使用
重新构建主从关系
1 2 3 4
| stop slave; CHANGE MASTER TO MASTER_HOST='172.16.11.31',MASTER_USER='sync',MASTER_PASSWORD='password',MASTER_AUTO_POSITION = 1; start slave; show slave status\G;
|
方法2:
在配置时,手动配置从服务器复制主服务器的指定位置.
主服务器查看状态:(二进制保存位置position
1 2 3 4 5 6 7 8 9
| show master status;
MariaDB [(none)]> show master status; + | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | + | mysql-bin.000005 | 639 | | | +
|
重新构建主从关系,从服务器(slave)复制主服务器(master)指定位置
1 2 3 4 5
| stop slave; reset slave; CHANGE MASTER TO MASTER_HOST='172.16.11.31',MASTER_USER='sync',MASTER_PASSWORD='password',MASTER_LOG_FILE='mysql-bin.000005',MASTER_LOG_POS=639; start slave; show slave status\G;
|
master_host 为要更改主库的ip地址
master_password 为要修改的密码
master_log_file 为二进制文件
master_log_pos 为要复制的节点位置 (在master查的)
使用方法2后
1 2
| Slave_IO_Running: Yes Slave_SQL_Running: Yes
|
主从复制完成
取消主从关系
1 2 3 4 5
| #注意: ' '之间有空格,里面必须有内容,即使为空,也应该用空格代替,而不能什么都不写。 change master to master_user=' ',master_host=' ',master_password=' '; slave stop; reset slave; show slave status\G;
|
主从数据库数据同步成功
参考
https://blog.csdn.net/weixin_30670965/article/details/101483425
https://blog.csdn.net/jesseyoung/article/details/41942809