mysql 多主多從配置,自增id解決方案


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

是不是就不會重復了? 不難看出,自增長值可設置為主機的數量值即可,但是一定要想到可擴充性,也就是盡量設置這個值大些。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM