`
LJ你是唯一LT
  • 浏览: 238701 次
社区版块
存档分类
最新评论

MySQL主从切换

阅读更多
环境:
原主库:192.168.10.197     ---新从库
原从库:192.168.10.226    ---新主库

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
.......
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics