MySQL主从环境重建

本文最后更新于2016年9月25日,已超过 1 年没有更新,如果文章内容失效,还请反馈给我,谢谢!

=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启动成功:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

当然,也需要注意一下以下几个选项和Master是否一致:
Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 107
Exec_Master_Log_Pos: 107

参考链接:

=END=

声明: 除非注明,ixyzero.com文章均为原创,转载请以链接形式标明本文地址,谢谢!
https://ixyzero.com/blog/archives/2893.html

One thought on “MySQL主从环境重建”

发表评论

电子邮件地址不会被公开。 必填项已用*标注