欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

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

程序员文章站 2024-02-17 18:50:22
...

现实情况下,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的数据文件打包,分别拷贝到新的从库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里是否同步了。