MySQL-5.6主從複製
阿新 • • 發佈:2021-10-18
一、 需求
1.準備6臺數據庫
2.一臺主庫,一臺從庫,一臺延時複製,一臺半同步複製,一臺過濾複製,一臺基於GTID的主從複製
3.環境準備
主機 | 外網ip | 內網ip | 主從 |
---|---|---|---|
db01 | 10.0.0.51 | 172.16.1.51 | mysql主庫 |
db02 | 10.0.0.52 | 172.16.1.52 | mysql從庫 |
db03 | 10.0.0.53 | 172.16.1.53 | mysql延時複製 |
db04 | 10.0.0.54 | 172.16.1.54 | mysql半同步複製 |
db05 | 10.0.0.55 | 172.16.1.55 | mysql過濾複製 |
db06 | 10.0.0.56 | 172.16.1.56 | GTID主從複製 |
二、非同步複製
1.mysql主庫配置
#編輯主庫配置檔案 [root@db01 ~]# vim /etc/my.cnf [mysqld] server_id=1 log_bin=mysql-bin #檢視binlog mysql> show master status; +------------------+----------+--------------+------------------+-------------------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +------------------+----------+--------------+------------------+-------------------------------+ | mysql-bin.000008 | 120 | | | 0e2277b0-1e92-11eb-b4de-000c29577624:1-2 | +------------------+----------+--------------+------------------+-------------------------------+ 1 row in set (0.00 sec) #授權使用者 mysql> grant replication slave on *.* to zzc@'172.16.1.%' identified by '123'; Query OK, 0 rows affected (1.00 sec)
2.從庫配置
#從庫配置 [root@db02 ~]# vim /etc/my.cnf [mysqld] server_id=2 [root@db02 ~]# mysql mysql> change master to -> master_host='172.16.1.51', -> master_user='zzc', -> master_password='123', -> master_port=3306, -> master_log_file='mysql-bin.000008', -> master_log_pos=120; Query OK, 0 rows affected, 2 warnings (0.09 sec) mysql> start slave; Query OK, 0 rows affected (0.01 sec) mysql> show slave status\G *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 172.16.1.51 Master_User: zzc Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000008 Read_Master_Log_Pos: 120 Relay_Log_File: db02-relay-bin.000002 Relay_Log_Pos: 283 Relay_Master_Log_File: mysql-bin.000008 Slave_IO_Running: Yes Slave_SQL_Running: Yes
三、延時複製
[root@db03 ~]# vim /etc/my.cnf
[mysqld]
server_id=3
[root@db03 ~]# systemctl restart mysqld
[root@db03 ~]# mysql
mysql> change master to
-> master_host='172.16.1.51',
-> master_user='zzc',
-> master_password='123',
-> master_port=3306,
-> master_log_file='mysql-bin.000008',
-> master_log_pos=120,
-> master_delay=3600; #延時輔助只需多加這條內容
mysql> start slave;
mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 172.16.1.51
Master_User: zzc
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000008
Read_Master_Log_Pos: 120
Relay_Log_File: db03-relay-bin.000002
Relay_Log_Pos: 283
Relay_Master_Log_File: mysql-bin.000008
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
------------------------------- 省略 ---------------------------------
SQL_Delay: 3600
SQL_Remaining_Delay: NULL
四、半同步複製
#半同步複製基於非同步複製而來
#修改從庫配置檔案
[root@db04 ~]# vim /etc/my.cnf
[mysqld]
server_id=4
rpl_semi_sync_slave_enabled =1
#先確認主從的MySQL伺服器是否支援動態增加外掛
mysql> show global variables like 'have_dynamic_loading';
+----------------------+-------+
| Variable_name | Value |
+----------------------+-------+
| have_dynamic_loading | YES |
+----------------------+-------+
1 row in set (0.00 sec)
#分別在主從庫上安裝對用外掛
-- 主庫安裝外掛
mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME'semisync_master.so';
Query OK, 0 rows affected (0.01 sec)
-- 主庫開啟半同步複製
mysql> SET GLOBAL rpl_semi_sync_master_enabled = 1;
Query OK, 0 rows affected (0.00 sec)
mysql> SET GLOBAL rpl_semi_sync_master_timeout = 1000;
Query OK, 0 rows affected (0.00 sec)
-- 從庫安裝外掛
mysql> install plugin rpl_semi_sync_slave soname 'semisync_slave.so';
Query OK, 0 rows affected (0.20 sec)
#編輯主庫配置檔案
[root@db01 ~]# vim /etc/my.cnf
[mysqld]
server_id=1
log_bin=mysql-bin
rpl_semi_sync_master_enabled=1
rpl_semi_sync_master_timeout=1000
#從庫開啟半同步複製
mysql> set global rpl_semi_sync_slave_enabled=1;
Query OK, 0 rows affected (0.07 sec)
#重啟io執行緒使其生效
mysql> stop slave io_thread;
mysql> start slave io_thread;
#檢視binlog
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------------------+
| mysql-bin.000009 | 120 | | | 0e2277b0-1e92-11eb-b4de-000c29577624:1-2 |
+------------------+----------+--------------+------------------+-------------------------------+
1 row in set (0.00 sec)
[root@db04 ~]# mysql
mysql> change master to
-> master_host='172.16.1.51',
-> master_user='zzc',
-> master_password='123',
-> master_port=3306,
-> master_log_file='mysql-bin.000009',
-> master_log_pos=120;
mysql> start slave;
Query OK, 0 rows affected (0.00 sec)
-- 主庫檢視
mysql> show status like 'Rpl_semi_sync_master_status';
+-----------------------------+-------+
| Variable_name | Value |
+-----------------------------+-------+
| Rpl_semi_sync_master_status | ON |
+-----------------------------+-------+
1 row in set (0.00 sec)
-- 從庫檢視
mysql> show status like 'Rpl_semi_sync_slave_status';
+----------------------------+-------+
| Variable_name | Value |
+----------------------------+-------+
| Rpl_semi_sync_slave_status | ON |
+----------------------------+-------+
1 row in set (0.00 sec)
#這兩個變數常用來監控主從是否執行在半同步複製模式下。
五、GTID的主從複製
#主庫
[root@db01 ~]# vim /etc/my.cnf
[mysqld]
server_id=1
log_bin=mysql-bin
rpl_semi_sync_master_enabled=1
rpl_semi_sync_master_timeout=1000
log-slave-updates
gtid_mode=on
enforce_gtid_consistency=on
#從庫1
[root@db56 ~]# vim /etc/my.cnf
[mysqld]
server_id=6
log_bin=mysql-bin
log-slave-updates
gtid_mode=on
enforce_gtid_consistency=on
mysql> change master to
-> master_host='172.16.1.51',
-> master_user='zzc',
-> master_password='123',
-> master_port=3306,
-> master_log_file='mysql-bin.000009',
-> master_log_pos=120;
-> master_auto_position=1;
mysql> start slave;
Query OK, 0 rows affected (0.00 sec)
mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 172.16.1.51
Master_User: rep
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000009
Read_Master_Log_Pos: 151
Relay_Log_File: db02-relay-bin.000002
Relay_Log_Pos: 361
Relay_Master_Log_File: mysql-bin.000009
Slave_IO_Running: Yes
Slave_SQL_Running: Yes