开发者社区> 转身泪倾城> 正文

MySQL主从切换

简介:
+关注继续查看
1、切换之前确保主从是同步的 
原主库(192.168.10.197): 
mysql> show processlist; 
+----+-------------+----------------------+------+-------------+------+-----------------------------------------------------------------------------+------------------+ 
| Id | User | Host | db | Command | Time | State | Info | 
+----+-------------+----------------------+------+-------------+------+-----------------------------------------------------------------------------+------------------+ 
| 2 | system user | | NULL | Connect | 1348 | Slave has read all relay log; waiting for the slave I/O thread to update it | NULL | 
| 16 | repli | 192.168.10.226:50357 | NULL | Binlog Dump | 141 | Master has sent all binlog to slave; waiting for binlog to be updated | NULL | 
| 17 | root | localhost | NULL | Query | 0 | init | show processlist | 
+----+-------------+----------------------+------+-------------+------+-----------------------------------------------------------------------------+------------------+ 
3 rows in set (0.00 sec) 
mysql> show master status\G 
*************************** 1. row *************************** 
File: mysql-bin.000009 
Position: 319 
Binlog_Do_DB: 
Binlog_Ignore_DB: 
Executed_Gtid_Set: 
1 row in set (0.00 sec) 
原从库(192.168.10.226): 
mysql> show processlist; 
+----+-------------+-----------+------+---------+------+-----------------------------------------------------------------------------+------------------+ 
| Id | User | Host | db | Command | Time | State | Info | 
+----+-------------+-----------+------+---------+------+-----------------------------------------------------------------------------+------------------+ 
| 14 | root | localhost | NULL | Query | 0 | init | show processlist | 
| 15 | system user | | NULL | Connect | 224 | Waiting for master to send event | NULL | 
| 16 | system user | | NULL | Connect | 971 | Slave has read all relay log; waiting for the slave I/O thread to update it | NULL | 
+----+-------------+-----------+------+---------+------+-----------------------------------------------------------------------------+------------------+ 
3 rows in set (0.03 sec) 
mysql>show slave status \G 
*************************** 1. row *************************** 
Slave_IO_State: Waiting for master to send event 
Master_Host: 192.168.10.197 
Master_User: repli 
Master_Port: 3306 
Connect_Retry: 60 
Master_Log_File: mysql-bin.000009 
Read_Master_Log_Pos: 319 
....... 
Slave_IO_Running: Yes 
Slave_SQL_Running: Yes 
...... 
Seconds_Behind_Master: 0  

2、修改参数  vi /etc/my.cnf 
原主库: 
read-only=1 
log_slave_updates=1 
relay-log=/var/lib/mysql/mysql-relay-bin 
relay-log-index=/var/lib/mysql/mysql-relay-bin.index 
skip-slave-start=1 
innodb_flush_log_at_trx_commit = 1 
sync-binlog=1 

原备库: 
#read-only=1    ---注释掉只读模式 

3、操作原从库 
mysql> stop slave io_thread; 
Query OK, 0 rows affected (0.11 sec) 
mysql> show processlist; 
+----+-------------+-----------+------+---------+------+-----------------------------------------------------------------------------+------------------+ 
| Id | User | Host | db | Command | Time | State | Info | 
+----+-------------+-----------+------+---------+------+-----------------------------------------------------------------------------+------------------+ 
| 16 | system user | | NULL | Connect | 9728 | Slave has read all relay log; waiting for the slave I/O thread to update it | NULL | 
| 17 | root | localhost | NULL | Query | 0 | init | show processlist | 
+----+-------------+-----------+------+---------+------+-----------------------------------------------------------------------------+------------------+ 
2 rows in set (0.05 sec) 
mysql> show slave status \G 
..... 
Slave_IO_Running: No     ---这个已停掉 
Slave_SQL_Running: Yes 
原从库变新主库 
mysql> stop slave; 
Query OK, 0 rows affected (0.04 sec) 
mysql> reset master; 
Query OK, 0 rows affected (2.26 sec) 
mysql> reset slave; 
Query OK, 0 rows affected (0.04 sec) 
mysql> show master status\G 
*************************** 1. row *************************** 
File: mysql-bin.000001 
Position: 120 
Binlog_Do_DB: 
Binlog_Ignore_DB: 
Executed_Gtid_Set: 
1 row in set (0.02 sec) 

4、操作原主库 
mysql> reset master; 
Query OK, 0 rows affected (0.15 sec) 
mysql> reset slave; 
ERROR 1198 (HY000): This operation cannot be performed with a running slave; run STOP SLAVE first 
mysql> stop slave; 
Query OK, 0 rows affected (0.07 sec) 
mysql> reset slave; 
Query OK, 0 rows affected (0.09 sec) 
原主库变新从库 
mysql> CHANGE MASTER TO 
-> MASTER_HOST='192.168.10.226', 
-> MASTER_USER='repli', 
-> MASTER_PASSWORD='repli', 
-> MASTER_LOG_FILE='mysql-bin.000001', 
-> MASTER_LOG_POS=120; 
Query OK, 0 rows affected, 2 warnings (0.05 sec) 
mysql> start slave; 
Query OK, 0 rows affected (0.13 sec) 
mysql> show slave status \G 
*************************** 1. row *************************** 
Slave_IO_State: Waiting for master to send event 
Master_Host: 192.168.10.226 
Master_User: repli 
Master_Port: 3306 
Connect_Retry: 60 
Master_Log_File: mysql-bin.000001 
Read_Master_Log_Pos: 120 
Relay_Log_File: localhost-relay-bin.000002 
Relay_Log_Pos: 283 
Relay_Master_Log_File: mysql-bin.000001 
Slave_IO_Running: Yes 
Slave_SQL_Running: Yes 

5、删除新从库上的relay-log.info 文件,否则下次重启slave时会报如下错误。 
/var/lib/mysql 
-rw-rw---- 1 mysql mysql 127 Jan 5 22:31 master.info 
-rw-rw---- 1 mysql mysql 62 Jan 5 22:31 relay-log.info 
mv  relay-log.info  /tmp 
mysql> start slave; 
ERROR 1872 (HY000): Slave failed to initialize relay log info structure from the repository 
由于新的slave改变了服务端口和文件路径,分析应该是由于mysql-relay-bin.index中仍然保存着旧relay日志文件的路径,而这些路径下又找不到合适的文件,因此报错。 

出现这个这个问题解决方法: 
先删掉文件,再重启mysql服务:service mysql restart 
mysql> start slave; 
ERROR 1872 (HY000): Slave failed to initialize relay log info structure from the repository 
mysql> reset slave; 
Query OK, 0 rows affected (0.00 sec) 
查看新从库/var/lib/mysql/master.info内容,从新change master 
mysql> change master to 
-> master_host='192.168.10.226', 
-> master_port=3306, 
-> master_user='repli', 
-> master_password='repli', 
-> master_log_file='mysql-bin.000001', 
-> master_log_pos=120; 
Query OK, 0 rows affected, 2 warnings (0.05 sec) 
mysql> start slave; 
Query OK, 0 rows affected (0.05 sec) 

6、重启新主从库,开启slave进程,检查是否正常 
[root@localhost mysql]# service mysql restart 
Shutting down MySQL... [ OK ] 
Starting MySQL.... [ OK ] 
新主库 
mysql> show processlist; 
+----+-------+----------------------+------+-------------+------+-----------------------------------------------------------------------+------------------+ 
| Id | User | Host | db | Command | Time | State | Info | 
+----+-------+----------------------+------+-------------+------+-----------------------------------------------------------------------+------------------+ 
| 2 | root | localhost | NULL | Query | 0 | init | show processlist | 
| 4 | repli | 192.168.10.197:56038 | NULL | Binlog Dump | 283 | Master has sent all binlog to slave; waiting for binlog to be updated | NULL | 
+----+-------+----------------------+------+-------------+------+-----------------------------------------------------------------------+------------------+ 
2 rows in set (0.00 sec) 
mysql> show master status\G 
*************************** 1. row *************************** 
File: mysql-bin.000002 
Position: 120 
Binlog_Do_DB: 
Binlog_Ignore_DB: 
Executed_Gtid_Set: 
1 row in set (0.00 sec) 
新从库 
start slave; 
mysql> show processlist; 
+----+-------------+-----------+------+---------+------+-----------------------------------------------------------------------------+------------------+ 
| Id | User | Host | db | Command | Time | State | Info | 
+----+-------------+-----------+------+---------+------+-----------------------------------------------------------------------------+------------------+ 
| 1 | root | localhost | NULL | Query | 0 | init | show processlist | 
| 2 | system user | | NULL | Connect | 67 | Waiting for master to send event | NULL | 
| 3 | system user | | NULL | Connect | 67 | Slave has read all relay log; waiting for the slave I/O thread to update it | NULL | 
+----+-------------+-----------+------+---------+------+-----------------------------------------------------------------------------+------------------+ 
3 rows in set (0.00 sec) 
mysql> show slave status\G 
*************************** 1. row *************************** 
Slave_IO_State: Waiting for master to send event 
Master_Host: 192.168.10.226 
Master_User: repli 
Master_Port: 3306 
Connect_Retry: 60 
Master_Log_File: mysql-bin.000002 
Read_Master_Log_Pos: 120 
Relay_Log_File: mysql-relay-bin.000005 
Relay_Log_Pos: 283 
Relay_Master_Log_File: mysql-bin.000002 
Slave_IO_Running: Yes 
Slave_SQL_Running: Yes 
Replicate_Do_DB: 
Replicate_Ignore_DB: 
Replicate_Do_Table: 
Replicate_Ignore_Table: 
Replicate_Wild_Do_Table: 
Replicate_Wild_Ignore_Table: 
Last_Errno: 0 
Last_Error: 
Skip_Counter: 0 
Exec_Master_Log_Pos: 120 
Relay_Log_Space: 456 
Until_Condition: None 
Until_Log_File: 
Until_Log_Pos: 0 
Master_SSL_Allowed: No 
Master_SSL_CA_File: 
Master_SSL_CA_Path: 
Master_SSL_Cert: 
Master_SSL_Cipher: 
Master_SSL_Key: 
Seconds_Behind_Master: 0 
Master_SSL_Verify_Server_Cert: No 
Last_IO_Errno: 0 
Last_IO_Error: 
Last_SQL_Errno: 0 
Last_SQL_Error: 
Replicate_Ignore_Server_Ids: 
Master_Server_Id: 60 
Master_UUID: c954f3a2-21d0-11e4-a4b2-000c2981e58a 
Master_Info_File: /var/lib/mysql/master.info 
SQL_Delay: 0 
SQL_Remaining_Delay: NULL 
Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it 
Master_Retry_Count: 86400 
Master_Bind: 
Last_IO_Error_Timestamp: 
Last_SQL_Error_Timestamp: 
Master_SSL_Crl: 
Master_SSL_Crlpath: 
Retrieved_Gtid_Set: 
Executed_Gtid_Set: 
Auto_Position: 0 
1 row in set (0.00 sec) 
新主从同步,切换完成! 

[root@localhost mysql]# cat master.info     --文件记录的信息 
23 
mysql-bin.000002 
120 
192.168.10.226 
repli 
repli 
3306 
60 
.......

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
mysql主从切换(正常切换)
<p><br></p> <p>环境:</p> <p>主从:mysql 5.6.10  </p> <p>centos 6.5  </p> <p><br></p> <p>步骤:</p> <p></p> <div id="blog_content" class="blog_content" style="font-size:14px; line-height:1.8em; font
7681 0
mysql主从备份、主从切换
本文实现两个数据库同步,分为主从模式和相互备份模式。 实施环境: 两台Linux机器 SerA ip:10.0.0.232 SerB ip:10.0.0.234 Demo1:主从模式 Master:SerA    Slave:SerB 在SerA和SerB上分别建立用于同步的账号(也...
911 0
mysql安装_官网流程
如下内容参考自mysql官网:https://dev.mysql.com/doc/refman/8.0/en/linux-installation-yum-repo.html
13 0
python安装MySQL库引出的一些问题
python安装MySQL库引出的一些问题
11 0
+关注
转身泪倾城
文章
问答
视频
文章排行榜
最热
最新
相关电子书
更多
高效MySQL的N个习惯
立即下载
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
相关镜像