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

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

mysql 多主多从配置,自增id解决方案的更多相关文章

  1. MySql 双主多从配置指导

    MySql 双主多从配置指导 一.背景 互联网项目为了数据的可靠性和架构的可拓展性经常会用到双主多从的数据库,来实现数据的备份.负载均衡和突发状况时数据库切换. 二.思路 配置两台数据库A.B互为主从 ...

  2. mysql清空表数据并重置自增ID

    mysql清空表数据并重置自增ID: ## 查看mysql> select * from work_order_company;mysql> show create table work_ ...

  3. mysql双主互为主从配置

    在使用双主互为主从的模式前提是互为主从的两个数据库,表的主键必须是自增的. 环境不多说了 ,多台mysql单实例或单台多实例都可以.多实例的配置请参考:https://www.cnblogs.com/ ...

  4. MySQL一主多从配置和读写分离配置

    一.一主多从配置 此次操作实现的是一主两从的方式.主服务器slave2(2.100),从服务器slave2-1(2.107),slave2-2(2.108);第一:准备主数据库    1. 在不同的机 ...

  5. MySQL双主双从配置

    双主双从结构图 Master1配置 server-id=1 #开启binlog日志 log-bin=mysql-bin #忽略的库 binlog-ignore-db=mysql #复制的库 binlo ...

  6. 为什么mysql事务回滚后,自增ID依然自增

    因为innodb的auto_increament的计数器记录的当前值是保存在存内 存中的,并不是存在于磁盘上,当mysqlserver处于运行的时候,这个计数值只会随着insert改增长,不会随着de ...

  7. mysql一主多从配置详情

    https://www.cnblogs.com/zgx/archive/2011/09/13/2174823.html 1.准备好3台虚机,一台master,两台slave且都安装好mysql 2.主 ...

  8. 006.MySQL双主-Master02可用配置

    [root@Master02 ~]# vim /etc/keepalived/keepalived.conf ! Configuration File for keepalived global_de ...

  9. 005.MySQL双主-Master01可用配置

    [root@Master01 ~]# vim /etc/keepalived/keepalived.conf ! Configuration File for keepalived global_de ...

随机推荐

  1. 微信小程序现实问题之低素质客户需求问题

    ·微信小程序已经在市场摸爬滚打很久了,但是真正是否可用以及是否真正满足客户需求,市场是否真正到了火热的程度,值得怀疑. 根据本人从事小程序开发的经验,短时间内,小程序市场依然会不温不火,而此时客户的满 ...

  2. css positioning计算和jquery对应函数

  3. SQL Server ->> Memory Allocation Mechanism and Performance Analysis(内存分配机制与性能分析)之 -- Minimum server memory与Maximum server memory

    Minimum server memory与Maximum server memory是SQL Server下配置实例级别最大和最小可用内存(注意不等于物理内存)的服务器配置选项.它们是管理SQL S ...

  4. MySQL案例01:Last_SQL_Errno: 1755 Cannot execute the current event group in the parallel mode

    周五同事监控报警,有个MySQL从库复制状态异常,让我帮忙排查下,经过排查发现是MySQL5.6并行复制的一个Bug所致,具体处理过程如下: 一.错误信息 登录mysql从库服务器,检查复制状态 my ...

  5. centOS 7 简单设置(虚拟机)

    1.修改主机名 hostnamectl set-hostname 2.ssh连接慢的问题解决 vim /etc/ssh/sshd_config UseDNS=no GSSAPIAuthenticati ...

  6. RabbitMq ack 与 nack

    1.ack 移除 2.nack 移除再次发送队列

  7. July 18th 2017 Week 29th Tuesday

    My heart is stronger now that you are in it. 我的心里有了你,从此变得更强大. You will no longer feel lonely if ther ...

  8. SVN安装操作流程

    SVN 安装操作流程 1.服务端安装流程 1.1 双击打开svn-server安装包 1.2 点击Next 1.3 勾选上“I accert the terms in the License Agre ...

  9. Hystrix请求熔断与服务降级

    Hystrix请求熔断与服务降级 https://www.cnblogs.com/huangjuncong/p/9026949.html SpringCloud实战-Hystrix请求熔断与服务降级 ...

  10. Python之条件判断和循环(入门4)

    转载请标明出处: http://www.cnblogs.com/why168888/p/6407755.html 本文出自:[Edwin博客园] Python之条件判断和循环 1. Python之if ...