mysql主主、从同步
原理
master服务器将数据的改变记录二进制binlog日志,当master上的数据发生改变时,则将其改变写入二进制日志中;
slave服务器会在一定时间间隔内对master二进制日志进行探测其是否发生改变,如果发生改变,则开始一个I/O Thread请求master二进制事件,同时主节点为每个I/O线程启动一个dump线程,用于向其发送二进制事件,并保存至从节点本地的中继日志中,从节点将启动SQL线程从中继日志中读取二进制日志,在本地重放,使得其数据和主节点的保持一致,最后I/O Thread和SQL Thread将进入睡眠状态,等待下一次被唤醒。
操作
修改配置文件
配置1
以下是192.168.241.22的配置
vim /etc/my.cnf
在
[mysqld]
后追加1
2
3
4
5
6
7
8
9server-id = 1
log-bin = mysql-bin
binlog-ignore-db = mysql,information_schema
sync_binlog = 1
binlog_checksum = none
binlog_format = mixed
auto-increment-increment = 2
auto-increment-offset = 1
slave-skip-errors = all然后重启
1
2
3service mysqld restart
或
/etc/init.d/mysqld restart
数据同步授权(iptables防火墙开启3306端口,要确保对方机器能使用下面权限连接到本机mysql)
都是填写对方的用户名、IP、密码
1 | mysql> grant replication slave,replication client on *.* to root@'192.168.241.33' identified by "1234"; |
- 最好将库锁住,仅仅允许读,以保证数据一致性;待主主同步环境部署后再解锁;锁住后,就不能往表里写数据,但是重启mysql服务后就会自动解锁!
1
2
3
4
5# 注意该参数设置后,如果自己同步对方数据,同步前一定要记得先解锁!
mysql> FLUSH TABLES WITH READ LOCK;
# 显示表,记着上面的参数
mysql> show master status;
配置2
以下是192.168.241.33的配置
修改配置文件,在
[mysqld]
后追加
vim /etc/my.cnf1
2
3
4
5
6
7
8
9server-id = 2
log-bin = mysql-bin
binlog-ignore-db = mysql,information_schema
sync_binlog = 1
binlog_checksum = none
binlog_format = mixed
auto-increment-increment = 2
auto-increment-offset = 2
slave-skip-errors = all重启mysql
数据同步授权
iptables防火墙开启3306端口,要确保对方机器能使用下面权限连接到本机mysql
同理,slave也要授权给master机器远程同步数据的权限1
2
3
4mysql> grant replication slave ,replication client on *.* to root@'192.168.241.22' identified by "1234";
mysql> flush privileges;
mysql> FLUSH TABLES WITH READ LOCK;
mysql> show master status;
执行主张同步操作
两台机器都需要执行以下操作,区别在于都需要写对方的数据
先在slave数据库上做同步master的设置。(确保slave上要同步的数据,提前在master上存在。最好双方数据保持一致)
1 | mysql> unlock tables; //先解锁,将对方数据同步到自己的数据库中 |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 食葫芦的葫芦娃!
评论