MySQL进阶运维与架构多源复制

举报
Ustinian_2022 发表于 2022/07/27 18:04:33 2022/07/27
【摘要】 31.6 搭建MySQL多源复制环境MySQL中的多源复制指的是一个MySQL从库有多个MySQL主库,多个MySQL主库之间没有任何主从关系,从库可以同时接收多个主库的数据,主要的应用场景是将多个MySQL中的数据聚合到一个MySQL中。注意:使用MySQL的多源复制时,为保证从库数据的一致性,需要保证从每个主数据库中复制不同的数据库,或者使用应用程序处理复制数据时产生的数据冲突。31.6...

31.6 搭建MySQL多源复制环境

MySQL中的多源复制指的是一个MySQL从库有多个MySQL主库,多个MySQL主库之间没有任何主从关系,从库可以同时接收多个主库的数据,主要的应用场景是将多个MySQL中的数据聚合到一个MySQL中。

注意:使用MySQL的多源复制时,为保证从库数据的一致性,需要保证从每个主数据库中复制不同的数据库,或者使用应用程序处理复制数据时产生的数据冲突。


31.6.1 服务器规划

MySQL多源复制的服务器规划如表31-5所示。

表31-5 MySQL多源复制的服务器规划

MySQL多源复制的示意图如图31-5所示。

图31-5 MySQL多源复制示意图


31.6.2 搭建MySQL多源复制环境

本节在31.3节的基础上将MySQL的主从模式切换为MySQL的多源复制模式,读者也可以在31.1节的基础上增加MySQL服务器搭建MySQL的多源复制环境。由于两种方式的搭建过程基本相同,因此不再赘述第二种搭建方式。

(1)修改每台MySQL服务器的my.cnf文件。


vim /data/mysql/conf/my.cnf
[mysqld]
master-info-repository=TABLE
relay-log- info-repository=TABLE

重启每台服务器上的MySQL服务。

(2)在binghe152服务器和binghe153服务器上停止从库的运行。


mysql> STOP SLAVE;
Query OK, 0 rows affected (0.01 sec)

(3)在binghe151服务器上执行锁表操作。


mysql> FLUSH TABLES WITH READ LOCK;
Query OK, 0 rows affected (0.00 sec)

(4)重新打开连接binghe151服务器的命令行终端,登录MySQL,查看主库的运行状态。


mysql> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000008 |    16588 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

(5)在binghe151服务器上解除锁表操作。


mysql> UNLOCK TABLES;
Query OK, 0 rows affected (0.00 sec)

(6)在binghe152服务器上创建数据同步的账户信息。


mysql> CREATE USER 'binghe153'@'192.168.175.153' IDENTIFIED BY 'binghe153';   
Query OK, 0 rows affected (0.11 sec)
mysql> ALTER USER 'binghe153'@'192.168.175.153' IDENTIFIED WITH mysql_native_password BY 'binghe153';  
Query OK, 0 rows affected (0.00 sec)
mysql> GRANT REPLICATION SLAVE ON *.* TO 'binghe153'@'192.168.175.153'; 
Query OK, 0 rows affected (0.00 sec)
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

(7)在binghe152服务器上查看主库的状态。


mysql> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000008 |    16578 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

结果显示,当前的二进制日志文件为mysql-bin.000008,位置坐标为16578。

(8)在binghe153服务器上,重置从库的设置。


mysql> CHANGE MASTER TO MASTER_HOST='192.168.175.151', 
    -> MASTER_PORT=3306,
    -> MASTER_USER='binghe153',
    -> MASTER_PASSWORD='binghe153',
    -> MASTER_LOG_FILE='mysql-bin.000008',
-> MASTER_LOG_POS=16588
-> FOR CHANNEL 'binghe151-master';
Query OK, 0 rows affected, 2 warnings (0.01 sec)
mysql> CHANGE MASTER TO MASTER_HOST='192.168.175.152', 
    -> MASTER_PORT=3306,
    -> MASTER_USER='binghe153',
    -> MASTER_PASSWORD='binghe153',
    -> MASTER_LOG_FILE='mysql-bin.000008',
-> MASTER_LOG_POS=16578
-> FOR CHANNEL 'binghe152-master'; 
Query OK, 0 rows affected, 2 warnings (0.01 sec)

注意:如果一个从库具有多个主库时,设置从库时需要使用FOR CHANNEL指定通道。

(9)在binghe153服务器上指定通道启动MySQL从库。


mysql> START SLAVE FOR CHANNEL 'binghe151-master';
Query OK, 0 rows affected (0.00 sec)
mysql> START SLAVE FOR CHANNEL 'binghe152-master';
Query OK, 0 rows affected (0.00 sec)

(10)在binghe153服务器上查看从库的运行状态。


mysql> SHOW SLAVE STATUS \G
*************************** 1. row ***************************
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
                 Channel_Name: binghe151-master
###################省略部分输出结果##############################
*************************** 2. row ***************************
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
                 Channel_Name: binghe152-master
###################省略部分输出结果##############################

在binghe153服务器上的从库运行正常,并且分别指定了不同的通道连接到binghe151服务器上的MySQL和binghe152服务器上的MySQL。


31.6.3 测试MySQL多源复制环境

(1)在binghe151服务器上,向testdb数据库的t_user数据表中插入测试数据。


mysql> INSERT INTO testdb.t_user
    -> (id, t_name)
    -> VALUES
    -> (8, 'binghe008');
Query OK, 1 row affected (1.04 sec)

(2)在binghe153服务器上,查看数据是否同步。


mysql> SELECT * FROM testdb.t_user; 
+----+-----------+
| id | t_name    |
+----+-----------+
|  1 | binghe    |
|  2 | binghe002 |
|  3 | binghe003 |
|  4 | binghe004 |
|  5 | binghe005 |
|  6 | binghe006 |
|  7 | binghe007 |
|  8 | binghe008 |
|  9 | binghe009 |
+----+-----------+
9 rows in set (0.12 sec)

结果显示,数据已经成功同步。

(3)在binghe152服务器上的testdb数据库下新建t_order数据表,并插入测试数据。


mysql> CREATE TABLE testdb.t_order(
    -> id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
    -> t_remark VARCHAR(30) NOT NULL DEFAULT ''
    -> );
Query OK, 0 rows affected (0.24 sec)
mysql> INSERT INTO testdb.t_order(t_remark) VALUES ('order001');
Query OK, 1 row affected (0.00 sec)

(4)在binghe153服务器上查看是否同步了数据。


mysql> SELECT * FROM testdb.t_order;
+----+----------+
| id | t_remark |
+----+----------+
|  1 | order001 |
+----+----------+
1 row in set (0.00 sec)

结果显示,在binghe153服务器上成功同步了数据。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。