MySQL两主(多主)多从架构配置

一、角色划分

1、MySQL数据库规划

我现在的环境是:zhdy04和zhdy05已经做好了主主架构配置,现在需要的是把两台或者多台从服务器与主一一同步。

如果搭建主主环境,参照此链接!

主机名

IP 地址

角色

Mysql_server_id

zhdy04

192.168.230.145

masterA

145

zhdy05

192.168.230.146

masterB

146

zhdy06

192.168.230.147

slaveA

147

zhdy07

192.168.230.148

slaveB

148

二、MySQL数据同步设定

1、因为咱们测试的机器数据库全部都是初始值,所以不需要导入任何数据库。(写的原因是假如,配置的环境和现在不一致。我们仍然需要做数据备份和导入)

2、数据同步帐号添加

按理来说,之前我们已经配置了主主,也就是zhdy04和zhdy05已经互相授权了。接下来我们需要设置的是:

  1. 在zhdy04上面授权zhdy06可以同步。
  2. 在zhdy05上面授权zhdy07可以同步。

zhdy04 masterA服务器:

mysql> grant replication slave on *.* to 'repl'@'192.168.230.147' identified by 'zhangduanya';
Query OK, 0 rows affected (0.03 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

zhdy05 masterB服务器:

mysql> grant replication slave on *.* to 'repl'@'192.168.230.148' identified by 'zhangduanya';
Query OK, 0 rows affected (0.03 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

3、数据库配置文件修改

  1. zhdy04 masterA服务器:
server-id=145
log-bin=mysql-bin
auto-increment-increment=2
auto-increment-offset=1
log-slave-updates
  1. zhdy05 masterB服务器:
server-id=146
log-bin=mysql-bin
auto-increment-increment=2
auto-increment-offset=2
log-slave-updates
  1. zhdy06 slaveA服务器:
server-id=147
  1. zhdy07 slaveB服务器:
server-id=148

在此我为了让大家更加容易理解我所做的配置,所以没有添加任何附加的服务,例如如下:

log-bin = mysql-bin                                                     #打开二进制功能,MASTER主服务器必须打开此项
binlog-format=ROW
binlog-row-p_w_picpath=minimal
log-slave-updates=true
gtid-mode=on
enforce-gtid-consistency=true
master-info-repository=TABLE
relay-log-info-repository=TABLE
sync-master-info=1
slave-parallel-workers=0
sync_binlog=0
binlog-checksum=CRC32
master-verify-checksum=1
slave-sql-verify-checksum=1
binlog-rows-query-log_events=1
#expire_logs_days=5
max_binlog_size=1024M                                                   #binlog单文件最大值

replicate-ignore-db = mysql                                             #忽略不同步主从的数据库
replicate-ignore-db = information_schema
replicate-ignore-db = performance_schema
replicate-ignore-db = test
replicate-ignore-db = zabbix

max_connections = 3000
max_connect_errors = 30

skip-character-set-client-handshake                                     #忽略应用程序想要设置的其他字符集
init-connect='SET NAMES utf8'                                           #连接时执行的SQL
character-set-server=utf8                                               #服务端默认字符集
wait_timeout=1800                                                       #请求的最大连接时间
interactive_timeout=1800                                                #和上一参数同时修改才会生效
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES                     #sql模式

skip-name-resolve
slow_query_log=1
long_query_time = 6
slow_query_log_file=slow-query.log
innodb_flush_log_at_trx_commit = 2
innodb_log_buffer_size = 16M


binlog-do-db=openfire
binlog-ignore-db=mysql,information_schema
replicate-do-db=openfire
replicate-ignore-db=mysql,information_schema




read_only = 1       #开始只读模式  
read_only=0;    #关闭只读,可以读写

4、重启4台DB:

/etc/init.d/mysqld restart

5、同步设置:

  1. zhdy04 masterA服务器:
mysql> show master status;
记录下各自的 master_log_file、master_log_pos值

+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000004 |      120 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.01 sec)
  1. zhdy05 masterB服务器:
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000004 |      120 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
  1. zhdy06 slaveA服务器:
mysql> change master to master_host='192.168.230.145', master_user='repl', master_password='zhangduanya', master_log_file='mysql-bin.000004', master_log_pos=120;
Query OK, 0 rows affected, 2 warnings (0.04 sec)
  1. zhdy07 slaveB服务器:
mysql> change master to master_host='192.168.230.146', master_user='repl', master_password='zhangduanya', master_log_file='mysql-bin.000004', master_log_pos=120;
Query OK, 0 rows affected, 2 warnings (0.08 sec)

6、检查配置

首先一定要把四台的firewalld全部关闭!

# systemctl stop firewalld 
# systemctl disable firewalld

分别检查四台服务器的

Slave_IO_Running: Yes Slave_SQL_Running: Yes

开启情况!

  1. zhdy06 slaveA服务器:
mysql> start slave;
Query OK, 0 rows affected (0.02 sec)

mysql> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.230.145
                  Master_User: repl
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000004
          Read_Master_Log_Pos: 120
               Relay_Log_File: zhdy06-relay-bin.000002
                Relay_Log_Pos: 283
        Relay_Master_Log_File: mysql-bin.000004
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
  1. zhdy04 masterA服务器:
mysql> start slave;
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.230.146
                  Master_User: repl
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000004
          Read_Master_Log_Pos: 120
               Relay_Log_File: zhdy04-relay-bin.000012
                Relay_Log_Pos: 283
        Relay_Master_Log_File: mysql-bin.000004
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
  1. zhdy07 slaveB服务器:
mysql> start slave;
Query OK, 0 rows affected (0.02 sec)

mysql> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.230.146
                  Master_User: repl
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000004
          Read_Master_Log_Pos: 120
               Relay_Log_File: zhdy07-relay-bin.000002
                Relay_Log_Pos: 283
        Relay_Master_Log_File: mysql-bin.000004
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
  1. zhdy05 masterB服务器:
mysql> start slave;
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.230.145
                  Master_User: repl
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000004
          Read_Master_Log_Pos: 120
               Relay_Log_File: zhdy05-relay-bin.000011
                Relay_Log_Pos: 283
        Relay_Master_Log_File: mysql-bin.000004
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes

由此看来全部同步成功!

7、最后一步,在主服务器zhdy04 masterA创建一个数据库,也就是说这四台服务器都会有这个数据库!

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| qqq                |
| test               |
+--------------------+
5 rows in set (0.06 sec)

我就不一一截屏了,然后所有的数据库均有了qqq这个数据库!

8、总结

也就是说,未来我们搭建多主多从看完这个配置是不是也有思路了?就像配置路由器一样,互相连接的互相授权下是不是就可以了?

给大家一个设置的方法:

auto-increment-increment = 10
auto-increment-offset   = 1
auto-increment-increment = 10
auto-increment-offset   = 2
auto-increment-increment = 10
auto-increment-offset   = 3

这样是不是就可以设置10台主mysql了呢?

但是一旦超过20台呢?或者是100台?

20台

auto-increment-increment = 20
auto-increment-offset   = 1
auto-increment-increment = 20
auto-increment-offset   = 2

…..

auto-increment-increment = 20
auto-increment-offset   = 20

100台

auto-increment-increment = 100
auto-increment-offset   = 1
auto-increment-increment = 100
auto-increment-offset   = 2

…..

auto-increment-increment = 100
auto-increment-offset   = 100

是不是就不会重复了? 不难看出,自增长值可设置为主机的数量值即可,但是一定要想到可扩充性,也就是尽量设置这个值大些。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏散尽浮华

mysql主从同步(4)-Slave延迟状态监控

之前部署了mysql主从同步环境(Mysql主从同步(1)-主从/主主环境部署梳理),针对主从同步过程中slave延迟状态的监控梳理如下: 在mysql日常维护...

3497
来自专栏程序员同行者

centos7搭建mysql5.7主从同步

2573
来自专栏Laoqi's Linux运维专列

Centos7.3 RabbitMQ分布式集群搭建

1284
来自专栏杨建荣的学习笔记

MySQL级联复制的同步问题(一) (r9笔记第71天)

今天碰到一个有些奇怪的问题,有一套环境,在主从复制的时候有一些问题。 大体的流程设计如下: 三个节点位于三个不同的区域,因为节点1和节点3之间的网络存在问题,...

3164
来自专栏cmazxiaoma的架构师之路

MySQL主从复制

MySQL复制功能提供分担读负载。 基于二进制日志的复制是异步的,那么复制有什么好处? 1.实现在不同服务器上的数据分布,利用二进制日志增量进行,不需要太多...

1542
来自专栏乐沙弥的世界

配置MySQL GTID 主从复制

1994
来自专栏代码GG之家

SDL系列讲解(十) 按键处理流程

SDL系列讲解(一) 简介 SDL系列讲解(二) 环境搭建 SDL系列讲解(三) 工具安装 SDL是什么,能干什么,为什么我们要学习它? SDL系列讲解(四)...

2078
来自专栏别先生

org.apache.thrift.transport.TTransportException: Could not create ServerSocket on address 0.0.0.0/0.

1、启动hive的过程中,[hadoop@slaver1 soft]$ hive --service metastore & 错误如下所示: 原因:之前启动hi...

3645
来自专栏运维小白

17.4 配置从

主从配置 - 从上操作 安装mysql 查看my.cnf,配置server-id=132,要求和主不一样 修改完配置文件后,启动或者重启mysqld服务 把主上...

1986
来自专栏Java架构解析

MySQL主从同步报error 1236

【一】前言:作为MySQL的数据库管理员经常会碰到主从同步的问题,比较常见的有error 1236的报错。刚好最近又碰到了这个报错,以下是整理的文档;

1380

扫码关注云+社区