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