MySQL主从环境重建


=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=

,

《“MySQL主从环境重建”》 有 1 条评论

发表回复

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