(一)多主复制概述
所谓多主复制,是将多个主库的数据复制到一个从库中。通常用于数据仓库整合数据,比如olTP系统为了分散业务压力,对业务进行分库分表,当要对数据进行分析的时候,可以使用多主复制将数据整合到同一个数据库实例上,便于统一分析。MysqL从5.7版本开始支持多主复制。
本文通过搭建多主复制环境来了解MysqL多主复制的特点。
(二)基础环境
主库1 | 主库2 | 从库 | |
服务器IP地址 | 192.168.10.11 | 192.168.10.12 | 192.168.10.13 |
MysqL版本 | 5.7.24 | 5.7.24 | 5.7.24 |
待同步的数据库 | db1 | db2 | 从库上创建空库db1和db2 |
(三)多主复制搭建
(3.1)创建用于复制的用户(主库执行)
在2个主数据库上创建用于复制的用户rep,用户需具有“replication slave”权限。每个数据库上复制账号可以不相同,这里为了测试方便,创建为相同的账号。
MysqL> grant replication slave on *.* to 'rep'@%' IDentifIEd by 123';
(3.2)参数修改(从库执行)
-- 重启数据库失效,建议配置在启动文件中MysqLSET GLOBAL master_info_repository = table';MysqLSET GLOBAL relay_log_info_repository ';
(3.3)主库创建测试数据,备库创建空数据库
主库1: create database db1;MysqLuse db1MysqLtable test01 -> ( -> ID1 int not null auto_increment,-> name varchar(30),1)">-> primary key(ID1) );MysqLinsert into test01 values(1,a'); | 主库2: db2;MysqL db2MysqL test02 -> ID2 (ID2) into test02 2,1)">b');
|
备库: database db2; |
(3.4)将主库数据手动同步到备库(从库执行)
在备库上执行远程导出 *** 作:
[root@slavedb ~]# MysqLdump -uroot -p123456 -h192.168.10.11 --master-data=2 --set-gtID-purged=OFF -P3306 db1 --single-transaction > db1.sql[root@slavedb ~]# MysqLdump -uroot -p123456 -h192.12 --master-data=2 --set-gtID-purged=OFF -P3306 db2 --single-transaction > db2.sql
在备库上执行导入 *** 作:
[root@slavedb ~]# MysqL -h192.13 -P3306 -uroot -p123456 db1 < /root/db1.sql [root@slavedb ~]# MysqL -h192.13 -P3306 -uroot -p123456 db2 < /root/db2.sql
(3.5)开启从库同步db1(从库执行)
STEP1:确认主库1导出到的日志位置
cat db1.sql |grep "CHANGE MASTER"|less-- CHANGE MASTER TO MASTER_LOG_file='master-bin.000029',MASTER_LOG_POS=1835;STEP2:将主库1添加到复制环境
> change master to -> master_host=192.168.10.11,1)">-> master_port=3306-> master_user-> master_password-> master_log_filemaster-bin.000029-> master_log_pos1835 for channel ch1';query OK,1); Font-weight: bold">0 rows affected,2 warnings (0.02 sec)
STEP3:开启主库1的复制
> start slave 0 rows affected (0.00 sec)
(3.6)开启从库同步db2(从库执行)
STEP1:确认主库2导出到的日志位置
cat db2.sql |1419;STEP2:将主库2添加到复制环境
change master to master_host=192.168.10.123306rep123=1419 for channel ch2';STEP3:开启主库2的复制
MysqL> start slave ';
(3.7)测试数据复制是否正常
主库1: 11,1)">aa'); | 主库2: 22,1)">bb'); |
备库: select from db1.test01;+---+------+| ID1 | name || 1 | a | 11 | aa 2 rows in set (0.00 sec)MysqL db2.test02;| ID2 2 | b 22 | bb 0.00 sec |
数据复制正常。
(3.8)确认复制状态
> show slave status \G*************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 192.168.10.11 Master_User: rep Master_Port: Connect_Retry: 60 Master_Log_file: master-bin.000029 Read_Master_Log_Pos: 1835 Relay_Log_file: slavedb-relay-bin-ch1.000002 Relay_Log_Pos: 321 Relay_Master_Log_file: master Slave_IO_Running: Yes Slave_sql_Running: Yes Replicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_table: Replicate_Ignore_table: Replicate_Wild_Do_table: Replicate_Wild_Ignore_table: Last_Errno: 0 Last_Error: Skip_Counter: Exec_Master_Log_Pos: Relay_Log_Space: 534 Until_Condition: None Until_Log_file: Until_Log_Pos: Master_SSL_Allowed: No Master_SSL_CA_file: Master_SSL_CA_Path: Master_SSL_Cert: Master_SSL_Cipher: Master_SSL_Key: Seconds_Behind_Master: Master_SSL_Verify_Server_Cert: No Last_IO_Errno: Last_IO_Error: Last_sql_Errno: Last_sql_Error: Replicate_Ignore_Server_IDs: Master_Server_ID: 1 Master_UUID: caa64a22-481a-11ea-b0f1-000c29fb6200 Master_Info_file: MysqL.slave_master_info sql_Delay: sql_Remaining_Delay: NulL Slave_sql_Running_State: Slave has read all relay log; waiting for more updates Master_Retry_Count: 86400 Master_Bind: Last_IO_Error_Timestamp: Last_sql_Error_Timestamp: Master_SSL_Crl: Master_SSL_Crlpath: RetrIEved_GtID_Set: Executed_GtID_Set: 8a885841-481c-bdc4-000c29840f0f:1-10-000c29fb6200:466040 auto_position: Replicate_Rewrite_DB: Channel_name: ch1 Master_TLS_Version: 2. row 10.121419-ch2.2 Replicate_Rewrite_DB: Channel_name: ch2 Master_TLS_Version: 0.00 sec)
【完成】
附录:
MysqL复制(replication)文档集合: 1.复制概述 2.基于二进制日志文件位置(binlog)配置复制 3.基于全局事物标识符(GTID)配置复制 4.多源复制 5.级联复制 6.半同步复制 7.延迟复制 8.复制过滤规则 9.对复制进行故障排除 10.故障切换 11.复制管理 |
以上是内存溢出为你收集整理的MySQL复制(四)--多源(主)复制全部内容,希望文章能够帮你解决MySQL复制(四)--多源(主)复制所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)