=Start=
缘由:
之前记录了一篇「MySQL主从环境搭建」的文章,并在此过程中实际搭建了一套MySQL主从环境,但是后来实际使用的时候发现存在几个问题(主要是主从数据不一致,根据比较Slave上的Master_Log_File、Read_Master_Log_Pos/Exec_Master_Log_Pos几个选项和Master上对应的File、Position得出该结论),所以需要重新搭建主从,在此记录一下大体过程和其中遇到的问题。
参考解答:
重建主从的步骤
Step
|
Master
|
Slave
|
---|---|---|
1 | 重置Master状态,并锁表准备数据库备份操作:
mysql> RESET MASTER; mysql> FLUSH TABLES WITH READ LOCK; mysql> SHOW MASTER STATUS; #注意记录此处File和Position的值 |
|
2 | 在不断开上面MySQL连接的情况下执行下面的shell命令进行数据库备份:
shell> mysqldump -uroot -p db_name > db_name.sql #备份指定数据库 或 shell> mysqldump -uroot -p db_name --master-data > db_name.sql 或 shell> mysqldump -uroot -p --opt --single-transaction --comments --hex-blob --dump-date --no-autocommit --all-databases > all_db.sql #备份所有数据库 在数据备份成功的情况下,解除锁表: mysql> UNLOCK TABLES; |
|
3 | 将备份的数据发送到远端Slave所在服务器:
shell> scp -C db_name.sql user@slave_ip:/tmp/ |
|
4 | 停掉还在运行中的备份操作:
mysql> STOP SLAVE; |
|
5 | 将刚才在Master上备份的数据导入Slave对应的数据库(如果该数据库不存在的话需要新建):
shell> mysql -uroot -p db_name < db_name.sql |
|
6 | 在Slave上修改Master的一些信息:
mysql> RESET SLAVE; mysql> CHANGE MASTER TO MASTER_HOST='<MASTER_HOST>', MASTER_USER='<SLAVE_USER>', MASTER_PASSWORD='<SLAVE_PASSWORD>', MASTER_LOG_FILE='<Relay_Master_Log_File>', MASTER_LOG_POS=<Exec_Master_Log_Pos>; |
|
7 | 启动Slave & 查看Slave状态:
mysql> START SLAVE; mysql> SHOW SLAVE STATUS\G 当看到下面两个选项的值为 ‘Yes’ 时表明Slave启动成功: 当然,也需要注意一下以下几个选项和Master是否一致: |
参考链接:
- http://stackoverflow.com/questions/2366018/how-to-re-sync-the-mysql-db-if-master-and-slave-have-different-database-incase-o
- http://dev.mysql.com/doc/refman/5.7/en/change-master-to.html
- https://www.percona.com/blog/2008/07/07/how-show-slave-status-relates-to-change-master-to/
- http://dba.stackexchange.com/questions/30782/update-mysql-slave-when-changing-the-hostname-ip-of-master
=END=
《“MySQL主从环境重建”》 有 1 条评论
MySQL复制与数据一致性 分享
http://seanlook.com/2018/03/22/mysql-ppt-replication-and-consistency/
MySQL主从复制idempotent模式以及同步错误处理预案
http://seanlook.com/2018/03/11/mysql-replication-error-and-idempotent/