mysql主從切換
在真實的生產環境中,總會有一些意外。
當企業的數據庫集群有機器不幸down掉的時候,怎么把從庫切換成主庫呢。
可以總結為如下步驟
一.登錄從庫關閉io進程,確保relay log已被完全執行,並根據當前pos選取出下一個master。
mysql -uroot -ptqw961110
stop slave io_thread; #關閉io進程
show processlist; #查看還有什么進程在運行。
當進程運行到最后,顯示Slave has read all relay log; waiting for more updates,則證明relay log已被完全讀取並執行完畢。
show slave status \G; 查看從庫slave狀態
看到從庫關於master的信息全部寫在mysql.slave_master_info中
select * from mysql.slave_master_info;
看到master_log的pos記錄是155.
這時我們需要登錄上所有的從庫,並重復上述查看master信息的步驟,對比各自pos的值,並選取最大值得從庫作為下一個master。
二.清除從庫的master信息,配置從庫成為master。
選取到目標slave后,登上數據庫,停掉slave;
mysql -uroot -ptqw961110
stop slave;
drop table mysql.slave_master_info; #刪除master_info信息表
create user 'test'@'%' identified with mysql_native_password by 'tqw961110'; #創建一個新的用戶
grant replication slave on *.* to 'test'@'%'; #授權
flush privileges; #刷新
退出數據庫,進入數據庫目錄。
刪除relay log
rm -f *relay*
編輯配置文件
vim /etc/my.cnf
log-bin=mysql-bin
server-id=1
如果有log-slaves-updates和read-only則要注釋掉
重啟mysql
systemctl restart mysql
登錄上mysql
執行
reset master (也可以不執行)
show master status ; #查看master信息
四.修改其余從庫的master信息
登錄其余數據庫
stop slave;
change master to master_host='172.16.1.22', master_user='test', master_user='tqw961110', master_log_file='mysql-bin.000001', master_log_pos=155;
start slave;
show slave status \G;
假如io和sql兩個線程都啟動了,證明切換成功。