MySQL 从服务器复制的原理就是从主服务器读取binlog, 在从服务器回放来同步主服务器进度的过程。从服务器采用两个线程来完成同步过程: I/O 线程完成读取主服务器binlog 到写入从服务器中继文件的工作。SQL 线程从中继文件读取事件,并在从数据库执行。
主从服务器设置的前提是,主从服务器都开启了 binlog。
我这里主服务器的内网ip是: 192.168.182.119, 从服务器的内网ip 是 192.168.182.120。(确保两个ip 可以相互ping通)
1、设置从服务器的 sever-id。vim my.cnf :
设置从服务器的server-id 为一个1至1的32次幂-1之间的整数,且不同于其他主从服务器的server-id.
2、在主服务器上为从服务器的复制设置一个账户用户复制操作。
#slave_user 是从服务器连接主服务器的用户, slave_pass 是连接密码,根据需要进行修改。
create user 'slave_user'@'192.168.182.120' identified by 'slave_pass';
grant replication slave on *.* to 'slave_user'@'192.168.182.120';
3、备份主服务器的数据,如果你需要备份的数据表有不支持事务的表,则需要停服,来保证数据备份数据的一致性。如果所有的表都是事务引擎,则可以参考如下备份脚本:
# --single-transaction 会让事务引擎的表数据在一个事务内完成,确保了备份数据的一致性。--master-data=1 让从服务器复制的位置正好和备份时刻对接上,详见: https://dev.mysql.com/doc/refman/5.6/en/mysqldump.html#option_mysqldump_master-data
mysqldump --single-transaction --master-data=1 shop>shop.sql
4、在从服务器使用上面备份的文件制作一个数据库副本。
create database shop;
mysql -uroot -p shop<shop.sql
5、查看主服务器的当前坐标
flush tables;
show master status;
6、在从服务器连接主服务器并设置初始复制坐标:
change master to master_host='192.168.182.119',master_user='slave_user',master_password='slave_pass',master_log_file='mysql-bin.000008',master_log_pos=2033;
7、开始复制
start slave;
# 查看 slave 的复制状态
show slave status;
# 停止复制, 在从服务器备份时,这个操作会很有用
stop slave
接来下,在主服务器做一些修改测试下同步情况。(略)
参考: 《MySQL 技术内幕 5th》