现实情况下,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里是否同步了。
©著作权归作者所有:来自51CTO博客作者Minkon1的原创作品,如需转载,请注明出处,否则将追究法律责任
mysqlmysql主从一主多从Mysql
共同学习,写下你的评论
评论加载中...
作者其他优质文章