mysql主從復制,基于GTID主從復制,并行復制,半同步復制
復制功能:
數據分布:負載均衡(讀)
備份:高可用和故障切換
復制方式:
主–從復制(A-B一主一從或者A-BC一主多從)
基于GTID復制
異步復制
半同步復制
復制原理:
Mysql中有一種日志叫做bin日志(二進制日志)。
這個日志會記錄下所有修改了數據庫的SQL語句
(insert,update,delete,ALTER TABLE,grant等等)。
主從復制的原理其實就是把主服務器上的bin日志復制到從服務器上
執行一遍,這樣從服務器上的數據就和主服務器上的數據相同了。
Mysql復制特點:
異步復制:主節點中一個用戶請求一個寫操作時,主接點不需要把寫的
數據在本地操作完成同時就響應用戶。但是,從節點中的數據有可能會
落后主服務,可以使用(很多軟件來檢查是否落后)
主從數據不一致
主從復制:
mysql主從復制原理:
從庫生成兩個線程,一個I/O線程,一個SQL線程;
i/o線程去請求主庫 的binlog,并將得到的binlog日志寫到
relay log(中繼日志) 文件中;
主庫會生成一個 log dump 線程,用來給從庫 i/o線程傳binlog;
SQL 線程,會讀取relay log文件中的日志,并解析成具體操作,來實現
主從的操作一致,而最終數據一致;
AB機的主從復制:
如果想要配置一主多從,從節點配置相同,server-id不同即可
**主節點:**
啟用二進制日志。
為當前節點設置一個全局唯一的server_id。
創建有復制權限的用戶賬號 REPLIACTION SLAVE ,REPLIATION CLIENT。
**從節點:**
啟動中繼日志。
為當前節點設置一個全局唯一的server_id。
使用有復制權限的用戶賬號連接至主節點,并啟動復制線程。
實驗環境:
主端:172.25.254.1 server1
從端:172.25.254.2 server2
主端:
[root@server1 ~]# ls
mysql-community-client-5.7.17-1.el6.x86_64.rpm
mysql-community-common-5.7.17-1.el6.x86_64.rpm
mysql-community-libs-5.7.17-1.el6.x86_64.rpm
mysql-community-libs-compat-5.7.17-1.el6.x86_64.rpm
mysql-community-server-5.7.17-1.el6.x86_64.rpm
[root@server1 ~]# yum install -y * 安裝服務
[root@server1 ~]# /etc/init.d/mysqld start 開啟服務
Initializing MySQL database: [ OK ]
Installing validate password plugin: [ OK ]
Starting mysqld: [ OK ]
[root@server1 ~]# vim /etc/my.cnf 編輯my.cnf常用參數配置
[root@server1 ~]# cat /etc/my.cnf | tail -n 2
啟用二進制日志文件
添加:log-bin = mysql-bin
添加 :server-id =1
server-id=1
log-bin=mysql-bin
[root@server1 ~]# /etc/init.d/mysqld restart 重啟服務文件內容生效
Stopping mysqld: [ OK ]
Starting mysqld: [ OK ]
[root@server1 ~]# grep password /var/log/mysqld.log 查看日志會看到出是密碼
2018-08-08T12:25:20.167210Z 1 [Note] A temporary password is generated for root@localhost: jdomj?l:W2yp
root@localhost:后面的就是密碼
從端:
[root@server2 ~]# ls
mysql-community-client-5.7.17-1.el6.x86_64.rpm
mysql-community-common-5.7.17-1.el6.x86_64.rpm
mysql-community-libs-5.7.17-1.el6.x86_64.rpm
mysql-community-libs-compat-5.7.17-1.el6.x86_64.rpm
mysql-community-server-5.7.17-1.el6.x86_64.rpm
[root@server2 ~]# yum install -y * 安裝服務
[root@server2 ~]# vim /etc/my.cnf 編輯my.cnf常用參數配置
[root@server2 ~]# cat /etc/my.cnf | tail -n 1
server-id=2 填寫server-id和主端不同即可
[root@server2 ~]# /etc/init.d/mysqld start 開啟服務
Initializing MySQL database: [ OK ]
Installing validate password plugin: [ OK ]
Starting mysqld: [ OK ]
[root@server2 ~]# grep password /var/log/mysqld.log 過濾密碼
2018-08-08T12:27:29.954223Z 1 [Note] A temporary password is generated for root@localhost: srpy%>EUr5rA
root@localhost:后面的就是密碼
主端初始化完成:
[root@server1 ~]# mysql_secure_installation 進入初始化安裝
Securing the MySQL server deployment.
Enter password for user root: 輸入默認的初始化密碼
The existing password for the user account root has expired. Please set a new password.
New password: 輸入新密碼:要求大小寫字母數字和字符
Password updated successfully! 密碼配置成功
Reloading privilege tables..
... Success!
Remove anonymous users? [Y/n] 詢問是否不允許匿名用戶登錄
Disallow root login remotely? [Y/n] 詢問是否不允許遠程連接
Remove test database and access to it? [Y/n] 詢問是否刪除測試數據庫并訪問它
Reload privilege tables now? [Y/n] 詢問是否重新加載權限表
主端添加授權:
mysql> show databases; 顯示所有數據庫
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)
mysql> grant replication slave on *.* to repl@'172.25.254.%' identified by 'Yakexi+007'; 在主節點上創建有復制權限的用戶,網段為另外一臺虛擬機的IP
Query OK, 0 rows affected, 1 warning (0.17 sec)
mysql> show master status; 查看狀態
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 | 1428 | | | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
圖文Position應該是一致的,因為每次作會有變化。
從端可以登陸主端
[root@server2 ~]# mysql -u repl -p -h 172.25.254.1 登陸主端輸入主端設置的密碼即可登陸
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 11
Server version: 5.7.17-log MySQL Community Server (GPL)
Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> quit
Bye
從端初始化:
[root@server2 ~]# mysql_secure_installation
Securing the MySQL server deployment.
Enter password for user root: 輸入默認的初始化密碼
The existing password for the user account root has expired. Please set a new password.
New password: 輸入新密碼:要求大小寫字母數字和字符
Password updated successfully! 密碼配置成功
Reloading privilege tables..
... Success!
Remove anonymous users? [Y/n] 詢問是否不允許匿名用戶登錄
Disallow root login remotely? [Y/n] 詢問是否不允許遠程連接
Remove test database and access to it? [Y/n] 詢問是否刪除測試數據庫并訪問它
Reload privilege tables now? [Y/n] 詢問是否重新加載權限表
從端可以連接并查看slave信息:
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)
mysql> change master to master_host='172.25.254.1',master_user='repl',master_password='Yakexi+007',master_log_file='mysql-bin.000001',master_log_pos=1428; 在從節點配置訪問主節點的參數信息,對應寫即可
Query OK, 0 rows affected, 2 warnings (1.38 sec)
mysql> start slave;
Query OK, 0 rows affected (0.15 sec)
mysql> show slave status\G 查看從節點的狀態信息看是否連接成功
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 172.25.254.1
Master_User: repl
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 1428
Relay_Log_File: server2-relay-bin.000002
Relay_Log_Pos: 320
Relay_Master_Log_File: mysql-bin.000001
Slave_IO_Running: Yes ##這兩個參數變為yes即可
Slave_SQL_Running: Yes ##
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 1428
Relay_Log_Space: 529
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 1
Master_UUID: 1d70d2c8-9b06-11e8-ac6a-525400f867b2
Master_Info_File: /var/lib/mysql/master.info
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
Master_Retry_Count: 86400
Master_Bind:
Last_IO_Error_Timestamp:
Last_SQL_Error_Timestamp:
Master_SSL_Crl:
Master_SSL_Crlpath:
Retrieved_Gtid_Set:
Executed_Gtid_Set:
Auto_Position: 0
Replicate_Rewrite_DB:
Channel_Name:
Master_TLS_Version:
1 row in set (0.00 sec)
主端建立數據庫數據表插入字段用于測試 :
mysql> create database love; 創建數據庫
Query OK, 1 row affected (0.21 sec)
mysql> use love;
Database changed
mysql> create table ours(
-> username varchar(10) not null,
-> password varchar(10) not null); 創建數據表
Query OK, 0 rows affected (1.21 sec)
mysql> desc ours; 查看數據表結構
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| username | varchar(10) | NO | | NULL | |
| password | varchar(10) | NO | | NULL | |
+----------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)
mysql> insert into ours values('xfl','123'); 插入字段
Query OK, 1 row affected (0.30 sec)
mysql> insert into ours values('xyy','456'); 插入字段
Query OK, 1 row affected (0.26 sec)
mysql> select * from ours; 顯示字段信息
+----------+----------+
| username | password |
+----------+----------+
| xfl | 123 |
| xyy | 456 |
+----------+----------+
2 rows in set (0.00 sec)
從端可以查看數據表字段信息:
mysql> use love; 使用數據庫
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> select * from ours; 查看字段信息已經復制成功
+----------+----------+
| username | password |
+----------+----------+
| xfl | 123 |
| xyy | 456 |
+----------+----------+
2 rows in set (0.00 sec)
Mysql-5.7 基于GTID的主從復制
從 MySQL 5.6.5 開始新增了一種基于 GTID 的復制方式。通過 GTID 保證了
每個在主庫上提交的事務在集群中有一個唯一的ID。這種方式強化了數據庫的主備
一致性,故障恢復以及容錯能力。
實驗環境在上一個實驗基礎上進行配置:
從端修改my.cnf文件并停止slave:
[root@server2 ~]# vim /etc/my.cnf
[root@server2 ~]# cat /etc/my.cnf | tail -n 4
server-id=2
gtid_mode=ON 開啟gtid模式
enforce-gtid-consistency=true 強制gtid一直性,用于保證啟動gitd后事務的安全;
[root@server2 ~]# /etc/init.d/mysqld restart 重啟服務
Stopping mysqld: [ OK ]
Starting mysqld: [ OK ]
主端修改配置文件重啟服務:
[root@server1 ~]# cat /etc/my.cnf |tail -n 5
server-id=1
log-bin=mysql-bin
gtid_mode=ON
enforce-gtid-consistency=true
[root@server1 ~]# /etc/init.d/mysqld restart
Stopping mysqld: [ OK ]
Starting mysqld: [ OK ]
[root@server2 ~]# mysql -p 登陸數據庫
mysql> show slave status\G 查看slave狀態信息
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 172.25.254.1
Master_User: repl
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000002
Read_Master_Log_Pos: 154
Relay_Log_File: server2-relay-bin.000005
Relay_Log_Pos: 367
Relay_Master_Log_File: mysql-bin.000002
Slave_IO_Running: Yes ##這兩行為yes代表連接成功
Slave_SQL_Running: Yes ##
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 154
Relay_Log_Space: 742
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 1
Master_UUID: 1d70d2c8-9b06-11e8-ac6a-525400f867b2
Master_Info_File: /var/lib/mysql/master.info
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
Master_Retry_Count: 86400
Master_Bind:
Last_IO_Error_Timestamp:
Last_SQL_Error_Timestamp:
Master_SSL_Crl:
Master_SSL_Crlpath:
Retrieved_Gtid_Set:
Executed_Gtid_Set:
Auto_Position: 0
Replicate_Rewrite_DB:
Channel_Name:
Master_TLS_Version:
1 row in set (0.00 sec)
mysql> stop slave; 停止slave
Query OK, 0 rows affected (0.17 sec)
主端查看狀態:
[root@server1 ~]# /etc/init.d/mysqld restart 重啟服務
Stopping mysqld: [ OK ]
Starting mysqld: [ OK ]
[root@server1 ~]# mysql -p
mysql> show master status; 查看master狀態
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000002 | 154 | | | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
從端重新建立連接:
MASTER_AUTO_POSITION:參數意思
該參數在mysql5.6.5版本引入,如果進行change master to時使用MASTER_AUTO_POSITION = 1,
slave連接master將使用基于GTID的復制協議。
使用基于GTID協議的復制,slave會告訴master它已經接收到或執行了哪些事務。
使用基于GTID的復制時(MASTER_AUTO_POSITION = 1),首先要開啟gtid_mode(在my.cnf中設置gtid-mode = ON),
mysql> change master to master_host='172.25.254.1',master_user='repl',master_password='Yakexi+007',MASTER_AUTO_POSITION = 1;
Query OK, 0 rows affected, 2 warnings (0.37 sec)
mysql> start slave;
Query OK, 0 rows affected (0.11 sec)
主端在表中插入字段:
mysql> use love;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> show tables;
+----------------+
| Tables_in_love |
+----------------+
| ours |
+----------------+
1 row in set (0.00 sec)
mysql> insert into ours values('xxx','789'); 插入字段
Query OK, 1 row affected (0.12 sec)
從端可以復制字段信息實時查看:
mysql> use love;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> select * from ours;
+----------+----------+
| username | password |
+----------+----------+
| xfl | 123 |
| xyy | 456 |
| xxx | 789 |
+----------+----------+
3 rows in set (0.00 sec)
mysql主從復制存在的問題:
主庫宕機后,數據可能丟失
從庫只有一個sql Thread,主庫寫壓力大,復制很可能延時
解決方法:
半同步復制---解決數據丟失的問題
并行復制----解決從庫復制延遲的問題
并行復制:
MySQL從5.6開始有了SQL Thread多個的概念,可以并發還原數據,
即并行復制技術。MySQL 5.6中,設置參數slave_parallel_workers = 4(>1),
即可有4個SQL Thread(coordinator線程)來進行并行復制,其狀態為:
Waiting for an evant from Coordinator。
在MySQL 5.7中,引入了基于組提交的并行復制(Enhanced Multi-threaded Slaves),
設置參數slave_parallel_workers>0并且global.slave_parallel_type=‘LOGICAL_CLOCK’,
即可支持一個schema下,slave_parallel_workers個的worker線程
并發執行relay log中主庫提交的事務。其核心思想:一個組提交的事務
都是可以并行回放(配合binary log group commit);
slave機器的relay log中 last_committed相同的事務(sequence_num不同)
可以并發執行。
其中,變量slave-parallel-type可以有兩個值:DATABASE 默認值,
基于庫的并行復制方式;LOGICAL_CLOCK:基于組提交的并行復制方式
MySQL 5.7開啟Enhanced Multi-Threaded Slave配置
添加參數永久生效:
[root@server2 ~]# cat /etc/my.cnf | tail -n 10
log-slave-updates
gtid_mode=ON
enforce-gtid-consistency=true
slave-parallel-type=LOGICAL_CLOCK
slave-parallel-workers=16
若將slave_parallel_workers設置為0,則MySQL 5.7退化為原單線程復制,
但將slave_parallel_workers設置為1,則SQL線程功能轉化為coordinator線程,
但是只有1個worker線程進行回放,也是單線程復制。然而,這兩種性能卻又有一些
的區別,因為多了一次coordinator線程的轉發,因此slave_parallel_workers=1
的性能反而比0還要差
**master_info_repository=TABLE**
開啟MTS功能后,務必將參數master_info_repostitory設置為TABLE,
這樣性能可以有50%~80%的提升。這是因為并行復制開啟后對于元master.info
這個文件的更新將會大幅提升,資源的競爭也會變大。在之前InnoSQL的版本中,
添加了參數來控制刷新master.info這個文件的頻率,甚至可以不刷新這個文件。
因為刷新這個文件是沒有必要的,即根據master-info.log這個文件恢復本身就是
不可靠的。在MySQL 5.7中,Inside君推薦將master_info_repository設置為
TABLE,來減小這部分的開銷。
relay_log_info_repository=TABLE
relay_log_recovery=ON
顯示哪些線程正在運行
mysql> show processlist;
+----+-------------+-----------+------+---------+------+--------------------------------------------------------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+----+-------------+-----------+------+---------+------+--------------------------------------------------------+------------------+
| 28 | root | localhost | test | Query | 0 | starting | show processlist |
| 30 | system user | | NULL | Connect | 1301 | Slave has read all relay log; waiting for more updates | NULL |
+----+-------------+-----------+------+---------+------+--------------------------------------------------------+------------------+
2 rows in set (0.00 sec)
參數
id #ID標識,要kill一個語句的時候很有用
use #當前連接用戶
host #顯示這個連接從哪個ip的哪個端口上發出
db #數據庫名
command #連接狀態,一般是休眠(sleep),查詢(query),連接(connect)
time #連接持續時間,單位是秒
state #顯示當前sql語句的狀態
info #顯示這個sql語句
當打開16個線程再次查看哪些線程正在運行:
mysql> show processlist; 設置了16個線程的結果
+----+-------------+-----------+------+---------+------+--------------------------------------------------------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+----+-------------+-----------+------+---------+------+--------------------------------------------------------+------------------+
| 1 | system user | | NULL | Connect | 3748 | Slave has read all relay log; waiting for more updates | NULL |
| 3 | system user | | NULL | Connect | 3988 | Waiting for an event from Coordinator | NULL |
| 4 | system user | | NULL | Connect | 3988 | Waiting for an event from Coordinator | NULL |
| 5 | system user | | NULL | Connect | 3988 | Waiting for an event from Coordinator | NULL |
| 6 | system user | | NULL | Connect | 3988 | Waiting for an event from Coordinator | NULL |
| 7 | system user | | NULL | Connect | 3988 | Waiting for an event from Coordinator | NULL |
| 8 | system user | | NULL | Connect | 3988 | Waiting for an event from Coordinator | NULL |
| 9 | system user | | NULL | Connect | 3988 | Waiting for an event from Coordinator | NULL |
| 10 | system user | | NULL | Connect | 3988 | Waiting for an event from Coordinator | NULL |
| 12 | system user | | NULL | Connect | 3988 | Waiting for an event from Coordinator | NULL |
| 13 | system user | | NULL | Connect | 3988 | Waiting for an event from Coordinator | NULL |
| 14 | system user | | NULL | Connect | 3988 | Waiting for an event from Coordinator | NULL |
| 15 | system user | | NULL | Connect | 3988 | Waiting for an event from Coordinator | NULL |
| 16 | system user | | NULL | Connect | 3988 | Waiting for an event from Coordinator | NULL |
| 17 | system user | | NULL | Connect | 3987 | Waiting for an event from Coordinator | NULL |
| 18 | system user | | NULL | Connect | 3987 | Waiting for an event from Coordinator | NULL |
| 19 | system user | | NULL | Connect | 3987 | Waiting for an event from Coordinator | NULL |
| 23 | system user | | NULL | Connect | 3749 | Waiting for master to send event | NULL |
| 24 | root | localhost | NULL | Query | 0 | starting | show processlist |
+----+-------------+-----------+------+---------+------+--------------------------------------------------------+------------------+
19 rows in set (0.00 sec)
半同步復制:
默認情況下,MySQL的復制功能是異步的,異步復制可以提供最佳的性能,
主庫把binlog日志發送給從庫,這一動作就結束了,并不會驗證從庫是
否接收完畢,這一過程,也就意味著有可能出現當主服務器或從服務
器端發生故障的時候,有可能從服務器沒有接收到主服務器發送過來的
binlog日志,這就會造成主服務器和從服務器的數據不一致,甚至在恢
復時造成數據的丟失。注意:半同步復制模式必須在主服務器和從服務器
端同時開啟,否則主服務器默認使用異步復制模式。
在主端:
mysql> show global variables like 'have_dynamic_loading';
+----------------------+-------+
| Variable_name | Value |
+----------------------+-------+
| have_dynamic_loading | YES |
+----------------------+-------+
1 row in set (0.00 sec)
mysql> show global variables like 'plugin_dir';
+---------------+--------------------------+
| Variable_name | Value |
+---------------+--------------------------+
| plugin_dir | /usr/lib64/mysql/plugin/ |
+---------------+--------------------------+
1 row in set (0.00 sec)
mysql> install plugin rpl_semi_sync_master soname 'semisync_master.so'; 安裝服務插件
Query OK, 0 rows affected (0.11 sec)
rpl_semi_sync_master_enabled 參數控制主節點是否開啟半同步復制;rpl_semi_sync_master_timeout
參數控制主節點等待備節點返回確認信息的超時時間,單位為毫秒,超過這個時間后半同步復制轉變成異步復制,
mysql> set global rpl_semi_sync_master_enabled = 1;
Query OK, 0 rows affected (0.00 sec)
mysql> set global rpl_semi_sync_master_enabled = ON;
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.14 sec)
mysql> set global rpl_semi_sync_slave_enabled=ON; rpl_semi_sync_master_enabled 參數控制主節點是否開啟半同步復制
Query OK, 0 rows affected (0.00 sec)
mysql> show variables like '%semi%';
+---------------------------------+-------+
| Variable_name | Value |
+---------------------------------+-------+
| rpl_semi_sync_slave_enabled | ON |
| rpl_semi_sync_slave_trace_level | 32 |
+---------------------------------+-------+
2 rows in set (0.00 sec)
主端查看參數:
mysql> show status like '%rpl_semi_sync%';
+--------------------------------------------+-------+
| Variable_name | Value |
+--------------------------------------------+-------+
| Rpl_semi_sync_master_clients | 0 |
| Rpl_semi_sync_master_net_avg_wait_time | 0 |
| Rpl_semi_sync_master_net_wait_time | 0 |
| Rpl_semi_sync_master_net_waits | 0 |
| Rpl_semi_sync_master_no_times | 0 |
| Rpl_semi_sync_master_no_tx | 0 |
| Rpl_semi_sync_master_status | ON |
| Rpl_semi_sync_master_timefunc_failures | 0 |
| Rpl_semi_sync_master_tx_avg_wait_time | 0 |
| Rpl_semi_sync_master_tx_wait_time | 0 |
| Rpl_semi_sync_master_tx_waits | 0 |
| Rpl_semi_sync_master_wait_pos_backtraverse | 0 |
| Rpl_semi_sync_master_wait_sessions | 0 |
| Rpl_semi_sync_master_yes_tx | 0 |
+--------------------------------------------+-------+
14 rows in set (0.00 sec)
從端關閉io_thread:
mysql> stop slave io_thread;
Query OK, 0 rows affected (0.06 sec)
主端修改數據表字段:
mysql> use love;
Database changed
mysql> insert into ours values('ss','3'); 插入字段會有卡頓默認時間是10s,10s過后會自動變成異步復制
Query OK, 1 row affected (10.83 sec)
mysql> show status like '%rpl_semi_sync%'; 一些參數的值也會變化
+--------------------------------------------+-------+
| Variable_name | Value |
+--------------------------------------------+-------+
| Rpl_semi_sync_master_clients | 0 |
| Rpl_semi_sync_master_net_avg_wait_time | 0 |
| Rpl_semi_sync_master_net_wait_time | 0 |
| Rpl_semi_sync_master_net_waits | 0 |
| Rpl_semi_sync_master_no_times | 1 |
| Rpl_semi_sync_master_no_tx | 1 |
| Rpl_semi_sync_master_status | OFF |
| Rpl_semi_sync_master_timefunc_failures | 0 |
| Rpl_semi_sync_master_tx_avg_wait_time | 0 |
| Rpl_semi_sync_master_tx_wait_time | 0 |
| Rpl_semi_sync_master_tx_waits | 0 |
| Rpl_semi_sync_master_wait_pos_backtraverse | 0 |
| Rpl_semi_sync_master_wait_sessions | 0 |
| Rpl_semi_sync_master_yes_tx | 0 |
+--------------------------------------------+-------+
14 rows in set (0.00 sec)
從端打開查看io_thread
mysql> start slave io_thread; 打開slave io_thread
Query OK, 0 rows affected (0.00 sec)
mysql> use love;
Database changed
mysql> select * from ours; 數據已經同步
+----------+----------+
| username | password |
+----------+----------+
| xfl | 123 |
| xyy | 456 |
| xxx | 789 |
| ss | 3 |
+----------+----------+
4 rows in set (0.00 sec)
智能推薦
mysql的主從復制、基于gtid的主從復制和半同步復制
主從復制 在官網上下載mysql的安裝包mysql-5.7.17-1.el6.x86_64.rpm-bundle.tar 在server1,2中均做以下動作 主節點上: mysql -p mysql> grant replication slave on . to repl@’172.25.11.%’ identified by ‘WDd12345.&rs...
mysql的主從復制、基于Gtid的主從復制、半同步復制
1.mysql主從復制的作用: (1)實時災備,用于故障切換 (2) 讀寫分離,提供查詢服務 (3) 備份,避免影響業務 2.主從部署必要條件: (1) 主庫開啟binlog日志(設置log-bin參數) (2) 主從server-id不同 (3)從庫服務器能連通主庫 3.主從復制實驗: 實驗環境:mysql-5.7.17-1.el6.x86_64.rpm-bundle.tar server2:主...
mysql主從復制、基于GTID的主從、半同步
使用的mysql版本5.7.17 一、主從復制 原理: 主從復制一共有三個進程,從庫生成兩個線程,一個I/O線程,一個SQL線程; i/o線程去請求主庫的binlog,并將得到的binlog日志寫到relay log(中繼日志) 文件中; 主庫會生成一個 log dump 線程,用來給從庫 i/o線程傳binlog; SQL 線程,會讀取relay log文件中的日志,并解析成具體操作,來實現主從...
mysql主從復制及半同步(基于gtid)
1.MySQL主從復制(基于GTID) Mysql主庫(master):server2 —>172.25.155.2 Mysql從庫( slave ):server3 —>172.25.155.3 下載安裝包 mysql-community-client-5.7.17-1.el6.x86_64.rpm mysql-community-common-5.7.17-...
基于gtid的半同步mysql主從復制
此篇博客的是在上一篇博客(mysql主從復制)的基礎上寫的 https://blog.csdn.net/weixin_40543283/article/details/87911286 此篇博客寫的是基于gtid的半同步mysql主從復制 一、gtid的半同步mysql主從復制的原理介紹 1.什么是gtid? GTID (Global Transaction ID) 是對于一個已提交事...
猜你喜歡
Mysql的主從復制以及基于gtid的主從復制、半同步復制、組復制
前言: Mysql是現在普遍使用的數據庫,但是如果宕機了必然會造成數據丟失。為了保證mysql數據庫的可靠性。就要會一些提高可靠性的技術。因此,一般來說都是通過 主從復制(Master-Slave)的方式來同步數據提高可靠性,再通過讀寫分離(MySQL-Proxy)來提升數據庫的并發負載能力。 本文我們將會詳細給大家介紹在Redhat7環境下Mysql的主從復制以及基于gtid的主從復制、半同步復...
基于gtid實現的mysql主從復制,半同步復制,組復制
MySQL主從復制 1.mysql主從復制原理: 從庫有兩個線程IO線程和SQL線程 1.從庫的IO線程向主庫的主進程發送請求,主庫驗證從庫,交給主庫IO線程負責數據傳輸; 2.主庫IO線程對比從庫發送過來的master.info里的信息,將binlog文件信息,偏移量和binlog文件名等發送給從庫 3.從庫接收到信息后,將binlog信息保存到relay-bin中,同時更新master.inf...
linux mysql的主從復制(GTID)/并行復制/無損復制
安裝mysql 本次使用五個rpm包安裝 安裝后修改密碼即可 密碼默認在log中 初始化修改即可 開啟mysql二進制日志 可以設定徐亞同步的數據庫或不需要的數據庫 進入mysql創建備份賬戶 查看日至位置以及pos在備份機使用 grant replication slave on *.* to 'bobo'@'172.25.15....
MySQL5.7主從復制,基于GTID主從復制、半同步、組復制、全同步解析
一、主從復制 1.環境 系統:redhat6.5 防火墻:保持關閉 selinux=disabled mysql主機:server1 172.25.32.4/24 mysql從機:server2 172.25.32.5/24 2.MySQL5.7安裝啟動(server4和server5同樣操作) 1.下載并安裝(下載地址:www.mysql.com) 2.開啟MySQL并安全初始化 3.配置主從復...