Mysql主从切换测试

本文详细介绍了MySQL主从切换的操作步骤,包括从库创建复制账号、主库设置只读模式、等待从库执行完SQL、停止复制进程、从库升为主库、主库变为从库等,还给出了确认从库执行完SQL的两种方法,最后进行了测试并实现了主从切换的来回操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

--主 10.100.10.a 3306
--从 10.100.10.b 3306


--从库创建复制账号
grant replication slave on *.* to repl@'10.100.10.a' identified by 'xxxx';
flush privileges; 

--主库设置成只读模式
mysql> show global variables like "%read_only%";   --1只读 0非只读
mysql> set global read_only=1;                      --这时root用户可写,如果要都不能写,需要执行FLUSH TABLES WITH READ LOCK 对应的解锁语句是UNLOCK TABLES;
mysql> show global variables like "%read_only%";


--等待从库执行完全部sql
确认方法一:
主库执行
show master status # 记录File、Position 

从库执行
select master_pos_wait('mysql-bin.000001',120); 

确认方式二:
从库执行
SHOW PROCESSLIST语句的输出,直到你看到Has read all relaylog waiting for the slave I/O thread to update it


--从库停止复制进程
stop slave IO_THREAD;

show slave status\G;


--确认从库非只读
show global variables like "%read_only%";

--从库升为主库
stop slave;
reset master;
reset slave all;  --从Mysql 5.5开始,多了一个all参数。如果不加all参数,那么所有的连接信息仍然保留在内存中,包括主库地址、端口、用户、密码等。这样可以直接运行start slave命令而不必重新输入change master to命令,而运行show slave status也仍和没有运行reset slave一样,有正常的输出。但如果加了all参数,那么这些内存中的数据也会被清除掉,运行show slave status就输出为空了

show master status \G;  --记录bin-log 信息

--主库变为从库
change master to master_host='10.100.10.b',master_user='repl',master_password='xxxx',master_log_file='mysql-bin.000001',master_log_pos=120;

关闭只读
mysql> show global variables like "%read_only%";   --1只读 0非只读
mysql> set global read_only=0;                     
mysql> show global variables like "%read_only%";

开启复制进程
start slave;
show slave status\G;

若是SQL线程(Slave_IO_Running)
I/O线程(Slave_SQL_Running)都显示为YES状态,则切换成功. 


--测试 OK

--切回
--主 10.100.10.b 3306
--从 10.100.10.a 3306


--主库设置成只读模式
mysql> show global variables like "%read_only%";   --1只读 0非只读
mysql> set global read_only=1;                      --这时root用户可写,如果要都不能写,需要执行FLUSH TABLES WITH READ LOCK 对应的解锁语句是UNLOCK TABLES;
mysql> show global variables like "%read_only%";


--等待从库执行完全部sql
确认方法一:
主库执行
show master status # 记录File、Position 

从库执行
select master_pos_wait('mysql-bin.000001',120); 

确认方式二:
从库执行
SHOW PROCESSLIST语句的输出,直到你看到Has read all relaylog waiting for the slave I/O thread to update it


--从库停止复制进程
stop slave IO_THREAD;

show slave status\G;


--确认从库非只读
show global variables like "%read_only%";

--从库升为主库
stop slave;
reset master;
reset slave all;  --从Mysql 5.5开始,多了一个all参数。如果不加all参数,那么所有的连接信息仍然保留在内存中,包括主库地址、端口、用户、密码等。这样可以直接运行start slave命令而不必重新输入change master to命令,而运行show slave status也仍和没有运行reset slave一样,有正常的输出。但如果加了all参数,那么这些内存中的数据也会被清除掉,运行show slave status就输出为空了

show master status \G;  --记录bin-log 信息

--主库变为从库
change master to master_host='10.100.10.a',master_user='repl',master_password='xxxx',master_log_file='mysql-bin.000001',master_log_pos=120;

关闭只读
mysql> show global variables like "%read_only%";   --1只读 0非只读
mysql> set global read_only=0;                     
mysql> show global variables like "%read_only%";

开启复制进程
start slave;
show slave status\G;

若是SQL线程(Slave_IO_Running)
I/O线程(Slave_SQL_Running)都显示为YES状态,则切换成功. 


--测试 OK
 

MySQL主从切换是指将原本的MySQL主服务器切换为从服务器,同时将原本的从服务器切换为新的主服务器。这种切换可以用于实现高可用性和故障恢复。 下面是一个示例的MySQL主从切换过程: 1. 停止应用程序与MySQL数据库的连接,确保所有数据传输已完成并且没有未完成的事务。 2. 在原主服务器上执行FLUSH TABLES WITH READ LOCK语句,以保证在备份期间没有写操作。 3. 使用mysqldump或其他备份工具对原主服务器进行全量备份。可以使用以下命令执行备份: ``` mysqldump -u <username> -p<password> --all-databases --master-data > backup.sql ``` 4. 将备份文件传输到新主服务器上。 5. 在新主服务器上还原备份文件。可以使用以下命令执行还原: ``` mysql -u <username> -p<password> < backup.sql ``` 6. 在新主服务器上打开binlog功能,并获取新的binlog文件名和位置。 7. 在原从服务器上执行CHANGE MASTER TO语句,将新主服务器配置为新的主服务器。可以使用以下命令执行配置: ``` CHANGE MASTER TO MASTER_HOST='<new_master_host>', MASTER_USER='<replication_user>', MASTER_PASSWORD='<replication_password>', MASTER_LOG_FILE='<new_master_log_file>', MASTER_LOG_POS=<new_master_log_pos>; ``` 8. 在原从服务器上启动复制过程: ``` START SLAVE; ``` 9. 等待一段时间,确保复制过程正常运行。 10. 在应用程序中更新连接配置,将主服务器地址改为新的主服务器。 11. 恢复原主服务器的正常操作,可以将其配置为新的从服务器或者禁用复制功能。 这是一个简单的MySQL主从切换过程示例,实际操作中可能会根据具体需求和环境进行调整。在进行主从切换前,建议先进行充分的备份并测试整个过程,以确保数据的完整性和可用性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值