我们生产环境中会碰到这种情况:备份主机数据,或者添加一台主机。进行双主机的结构。
另外就是在线上中途添加更多的从机。
而我们知道,从机上设置 slave 时要指定 master_log_file 和 master_log_pos, 即指定binlog文件和偏移值。
这也就是说,从机是可以从任意位置的 binlog 文件中进行数据的同步。比如:我们将 binlog 文件备份到其它某处放置,某天,数据库出问题了,需要对某些数据进行数据恢复,这时候从该文件中进行恢复。
添加一个新的从机,可以有两种方式:从 master 机器复制; 另一种是直接从 slave 复制.
复制主库要步骤:
====================
1.将内存中的数据同步到表中.
2.锁定表,不让出现脏数据
3.备份
4.解锁
5.在另一台机器上同步数据,并且设置 master_log_file 和 master-log_pos
命令:
a.同步数据,并锁表: mysql> flush tables with read lock;
b.记住当前 binlog 的偏移值,后面设置 slave 上的值. show master status; 记下 file 和 position
c.备份:.参照 http://blog.sina.com.cn/s/blog_5f54f0be0100vp6m.html
命令: [root@li387-161 ~] mysqldump --all-databases --host=master-1 > backup.sql
d.解锁 mysql> unlock tables;
e.同步从机.将 backup.sql 复制到从机上.[root@li387-161 ~] mysql --host=slave-1 < backup.sql
设置从机:
mysql>change master to master_host = '192.168.3.119',master_port = 3306,master_user = 'repl_user',master_password='root',master_log_file='master-bin.000005',master_log_pos=194244;
这里的 master_log_file 和 master_log_pos 就是前面第 2 步中记下来的两个值.
开启从机
start slave;
复制从库要步骤:
====================
可以看到,从主库复制会有段时间锁表,这段时间会影响主库的使用。如果我们能直接从从库进行复制,就不会对主库产生影响了。但是,从从库复制要保证的是复制过程中从库上的数据不会发生变化,所以要先停掉从库。
1.停止从库: mysql> stop slave;
2.看当前从库的状态。和前面的看主库状态一样。但现在是从从库复制,所以查看从库状态:mysql> show slave status;
记下 Relay_Master_Log_file 和 Exec_Master_Log_Pos, 用处和前面一样.
3.备份从库数据.用 mysqldump
4.在新的从库上还原数据
5.设置新从库的 slave 参数.change master to master_host = '192.168.3.119',master_port = 3306,master_user = 'repl_user',master_password='root',master_log_file='master-bin.000005',master_log_pos=194244;
可以看到,虽然新从库是从从库复制的数据,但实际上 binlog 的 master 还是指向的主库。
另外,这里将 master_log_file 和 master_log_pos 设置成第 2 步中的 Relay_Master_Log_file 和 Exec_Master_Log_Pos
start slave;
转载于:https://blog.51cto.com/pesen/1535592