現實情況下,mysql比較常見的是一主多從,而在主庫出現問題是,需要將其從庫升為主庫,但事實上這種操作非常繁瑣,基本上要對所有的從庫進行操作。 既然如此,不妨將mysql做成ABC的結構,A為主庫,B為A的從庫,C是B的從庫 這種情況,在A出現問題是,可以直接
現實情況下,mysql比較常見的是一主多從,而在主庫出現問題是,需要將其從庫升為主庫,但事實上這種操作非常繁瑣,基本上要對所有的從庫進行操作。
既然如此,不妨將mysql做成ABC的結構,A為主庫,B為A的從庫,C是B的從庫
這種情況,在A出現問題是,可以直接將B升為主庫,其余下級從庫將不需要任何操作。
這里記錄一次此類操作,我這里的情況是,已經存在A和B,A是主,B是從
需求是,添加一個A的從庫C,再添加一個C的從庫D。
快速添加mysql從庫(前提是都已經安裝了相同版本的mysql)
首先將從庫B的主從stop掉
mysql> stop slave; Query OK, 0 rows affected (0.06 sec) mysql> show slave status\G; *************************** 1. row *************************** Slave_IO_State: Master_Host: 10.10.1.171 Master_User: mysqlab Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000096 Read_Master_Log_Pos: 585421644 Relay_Log_File: mysql-relay-bin.000279 Relay_Log_Pos: 2043143 Relay_Master_Log_File: mysql-bin.000096 Slave_IO_Running: No Slave_SQL_Running: No
然后將從庫B的數據文件打包,分別拷貝到新的從庫C和C的從庫D下(sock和pid文件不要打包)
sync tar -czf mysqldata3326.tar.gz mysqldata3326/ scp mysqldata3326.tar.gz 10.10.1.173:/home/ scp mysqldata3326.tar.gz 10.10.1.174:/home/
解壓分別放在C和D的數據目錄(刪除主從信息文件)
cd /home tar zxf mysqldata3326.tar.gz mv /home/mysqldata3326/datadir/master.info /home/mysqldata3326/datadir/master.info.bak
修改C和D的配置文件的server-id,C為11 , D為21,(我這里有端口的區別,這個根據現實情況)
vim /home/mysqldata3326/my.cnf
分別啟動C和D
/usr/local/mysql/bin/mysqld_safe --defaults-file=/home/mysqldata3326/my.cnf --user=mysql &
配置C和D的主從(一定要先配置好C和D的主從)
C:查看C的master信息
mysql> show master status; +------------------+----------+--------------+---------------------------------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+---------------------------------------------+ | mysql-bin.000092 | 1953402 | | mysql,test,information_schema,sphinx_search | +------------------+----------+--------------+---------------------------------------------+
D:配置D的主從信息
mysql> slave stop; mysql> reset slave; mysql> change master to master_host='10.10.1.173',master_user='mysqlab',master_password='xxxxx',master_log_file='mysql-bin.000092',master_log_pos=1953402; mysql> slave start; mysql> show slave status\G; *************************** 1. row *************************** Slave_IO_State: Master_Host: 10.10.1.173 Master_User: mysqlab Master_Port: 3326 Connect_Retry: 60 Master_Log_File: mysql-bin.000092 Read_Master_Log_Pos: 1953490 Relay_Log_File: mysql-relay-bin.000279 Relay_Log_Pos: 214513 Relay_Master_Log_File: mysql-bin.000092 Slave_IO_Running: Yes Slave_SQL_Running: Yes
修改C的主庫同步信息(這里的主從信息要和stop B從庫的信息一致)
mysql> slave stop; mysql> reset slave; mysql> change master to master_host='10.10.1.171',master_user='mysqlab',master_password='xxxxxx',master_log_file='mysql-bin.000096',master_log_pos=585421644; mysql> slave start;
最后啟動B的主從!完成
驗證:
通過show slave status\G;查看主從信息,SQL和IO線程是否為yes
最簡單的驗證就是在A里隨便創建個庫,然后show一下D里是否同步了。
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com