mysql 复制架构变更方法

2021/12/31 2:08:54

本文主要是介绍mysql 复制架构变更方法,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

mysql 复制架构变更方法

DB角色:

主 库:A

从库1:B

从库2:C

一主两从变成级联复制

架构:

image-20210429141013150

具体过程如下:

原架构:
A 主库    
B 从库1    
C 从库2

修改为:
A 主库    
B 从库1(是C的Master)   
C 从库2

#1. 先停掉C的复制,stop slave;并查看c的复制进度。
# 过段时间查看B的复制进度,超过C的复制进度就可以停B库的复制进度。

#2.停掉B库的复制进度后,查看b库的show master status;并查看他对于A库的复制进度
#之后,就可以重新启动B库的复制了,这个时候,

#3.在C库上操作,他现在主库是A库,从新开启A库的复制进程,应用binlog到B库停止时候的复制进度为止,
#语句是:start slave until master_log_file='tex-bin.003882',master_log_pos=322474479;
mysql> start slave until master_log_file='mysql-bin.000047',master_log_pos=12856918;
Query OK, 0 rows affected (17.10 sec)
#这样B库和C库在B库停止那个时间点,数据是一致的。

#4.在C库上重新变更主库
#io线程还在工作,sql线程已经停止,所有都停止下复制进程。
mysql> stop slave;
#之后停止复制,之后
mysql> reset slave
#5.change到B库上,因为b库在停止时候查看了2个进度一个是对于A库的复制进度,还有一个是本身的master状态,这个时候正好给C库用上,
#之后就可以正常进行级联复制了。

CHANGE MASTER TO
  MASTER_HOST='10.204.11.203',  #B库的ip
  MASTER_USER='repl',
  MASTER_PASSWORD='******',
  MASTER_PORT=3994,
  MASTER_LOG_FILE='mysql-bin.000005', #b库上显示的show  master status文件号
  MASTER_LOG_POS=154;  #b库上显示的show  master status pos号。
  
#对比语句
#C库
[root@d11092377 ~]# goto3991 -e"show slave status\G" 2>/dev/null|grep  "Master_Log_"
              Master_Log_File: mysql-bin.000003  #寻找的C库现在进度
          Read_Master_Log_Pos: 154
        Relay_Master_Log_File: mysql-bin.000003
          Exec_Master_Log_Pos: 154   #C库现在进度
#b库
[root@d16090074 mysql]# goto3991 -e"show slave status\G" 2>/dev/null|grep  "Master_Log_"
              Master_Log_File: mysql-bin.000003
          Read_Master_Log_Pos: 154
        Relay_Master_Log_File: mysql-bin.000003
          Exec_Master_Log_Pos: 154
这这个时候,两个库的复制进度一样,也就是进度一致,省的执行C库追赶操作。
直接查看B库现在的master status。

[root@d16090074 mysql]# goto3991 -e"show master status;" 2>/dev/null
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000003 |      154 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+

在C库直接reset slave;之后change 到b库就可以了。

级联复制变成一主两从

image-20210429134752614

#1.在B库上执行
goto3994 -e" stop slave SQL_THREAD;"
Query OK, 0 rows affected (0.01 sec)
goto3994 -e"show slave status\G" 2>/dev/null|grep  "Master_Log_"  #获取停止应用SQL时候A库的复制进度。
goto3994 -e"show slave status\G" 2>/dev/null |grep "_Running:" #确认复制进程关闭了SQL进程。
#2.在C库上执行
goto3994 -e"show slave status\G" 2>/dev/null |grep "_Running:"
goto3994 -e"show slave status\G" 2>/dev/null|grep  "Master_Log_"

[root@d11092377 ~]# goto3994 -e"show slave status\G" 2>/dev/null|grep  "Master_Log_"
              Master_Log_File: mysql-bin.000005 #获取进度
          Read_Master_Log_Pos: 980
        Relay_Master_Log_File: mysql-bin.000005
          Exec_Master_Log_Pos: 980  #获取pos号
          
#3.查看B库和C库的复制进度一样的时候,进行change修改。

#4.在B库上执行再次确认复制进度
goto3994 -e"show slave status\G" 2>/dev/null|grep  "Master_Log_"  #获取停止应用SQL时候A库的复制进度。
goto3994 -e"show slave status\G" 2>/dev/null |grep "_Running:" #确认复制进程关闭了SQL进程。

#5.开始进程切换
#在C库上执行
goto3994 -e"show master status;" 2>/dev/null #确认复制进度赶上B库的进度。因为此时B库是静止的,所以应该很好追赶。
goto3994 -e"stop slave;"  
goto3994 -e"reset slave;" 
goto3994
mysql>
CHANGE MASTER TO
  MASTER_HOST='10.204.11.203',  #A库的ip
  MASTER_USER='repl',
  MASTER_PASSWORD='******',
  MASTER_PORT=3994,
  MASTER_LOG_FILE='mysql-bin.000005', #b库上显示的A库的复制进度 文件号
  MASTER_LOG_POS=154;  #b库上显示的A库的复制进度 pos号

start slave;
select sleep(1);
show slave status\G #进行检查完成。


这篇关于mysql 复制架构变更方法的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程