为mysql快速添加从库,并为从库添加从库

现实情况下,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的数据文件打包,分别拷贝到新的从库CC的从库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/


解压分别放在CD的数据目录(删除主从信息文件)

cd /home
tar zxf mysqldata3326.tar.gz
mv /home/mysqldata3326/datadir/master.info /home/mysqldata3326/datadir/master.info.bak


修改CD的配置文件的server-idC11 ,    D21,(我这里有端口的区别,这个根据现实情况)

vim /home/mysqldata3326/my.cnf


分别启动CD

/usr/local/mysql/bin/mysqld_safe --defaults-file=/home/mysqldata3326/my.cnf --user=mysql &

 


配置CD的主从(一定要先配置好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里是否同步了。

本文出自 “Tuesday” 博客,请务必保留此出处http://cuimk.blog.51cto.com/6649029/1590205

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。