久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

怎么在MySQL中配置半同步復制

188次閱讀
沒有評論

共計 5321 個字符,預計需要花費 14 分鐘才能閱讀完成。

自動寫代碼機器人,免費開通

今天就跟大家聊聊有關怎么在 MySQL 中配置半同步復制,可能很多人都不太了解,為了讓大家更加了解,丸趣 TV 小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

MySQL 安裝

通過 APT 的方式安裝,官方指導文檔地址:
https://dev.mysql.com/downloads/repo/apt/

1、下載 mysql-apt-config_0.8.3-1_all.deb

怎么在 MySQL 中配置半同步復制

2、安裝 deb

A Quick Guide to Using the MySQL APT Repository:
https://dev.mysql.com/doc/mysql-apt-repo-quick-guide/en/

sudo dpkg -i mysql-apt-config_0.8.3-1_all.deb

3、更新源

sudo apt-get update

4、安裝 MySQL

sudo apt-get install mysql-server

5、根據提示選擇安裝和設置密碼。

另外,還需要對其進行設置,綁定的 IP 和打開防火墻的 3306 端口,這里主要是學習 MySQL 半同步復制,對 MySQL 的安裝不做多解釋,如果疑問歡迎留言。

MySQL 半同步復制介紹

怎么在 MySQL 中配置半同步復制

(1)默認情況下,MySQL 的復制功能是異步的,異步復制可以提供最佳的性能,主庫把 binlog 日志發送給從庫,這一動作就結束了,并不會驗證從庫是否接收完畢,這一過程,也就意味著有可能出現當主服務器或從服務器端發生故障的時候,有可能從服務器沒有接收到主服務器發送過來的 binlog 日志,這就會造成主服務器和從服務器的數據不一致,甚至在恢復時造成數據的丟失。

注意:

半同步復制模式必須在主服務器和從服務器端同時開啟,否則主服務器默認使用異步復制模式。

(2)異步復制案例:

MySQL5.6 數據庫主從(Master/Slave)同步安裝與配置詳解

(3)為了解決上述可能發生的錯誤,MySQL 5.5 引入了一種半同步復制模式。該模式可以確保從服務器接收完主服務器發送的 binlog 日志文件并寫入到自己的中繼日志 relay log 里,然后會給主服務器一個反饋,告訴主服務器已經接收完畢,這時主服務線程才返回給當前 session 告知操作完成。

(4)當出現超時情況是,主服務器會暫時切換到異步復制模式,直到至少有一個從服務器從及時收到信息為止。

(5)中繼日志的自我修復:

從 MySQL 5.5.X 版本開始,增加了 relay_log_recovery 參數,這個參數的作用是:當 slave 從庫宕機后,假如 relay.log 損壞了,導致一部分中繼日志沒有處理,則自動放棄所有未執行的 relay-log, 并且重新從 master 上獲取日志,這樣就保證了 relay-log 的完整性。默認情況下該功能是關閉的,將 relay_log_recovery 的值設置為 1 時,可在 slave 從庫上開啟該功能,建議開啟。

(6)半同步復制與異步復制的切換:

半同步復制的工作原理就是當 slave 從庫 IO_Thread 線程將 binlog 日志接收完畢之后,要給 master 主庫一個確認,如果 rpl_semi_sync_master_timeout=10000 (10 秒) 超過 10 秒未收到 slave 從庫的接受確認信號,那么就會自動切換為傳統的異步復制模式。

MySQL 半同步復制配置

首先,需要安裝兩個 MySQL,這里是:

Master:192.168.1.227

Slave:192.168.1.224

原始數據庫的模樣如下:

怎么在 MySQL 中配置半同步復制

一、Master 配置

(1)在 Master 數據庫安裝半同步復制插件:

mysql INSTALL PLUGIN rpl_semi_sync_master SONAME  semisync_master.so

怎么在 MySQL 中配置半同步復制

(2)設置 Master 上開啟半同步復制:

mysql SET GLOBAL rpl_semi_sync_master_enabled = 1;

怎么在 MySQL 中配置半同步復制

(3)修改 mysqld.cnf 配置文件:

怎么在 MySQL 中配置半同步復制

上圖指出了 MySQL 配置的文件路徑。

[mysqld]
log-bin=mysql-bin
server_id = 10086
server_id_bits = 33
rpl_semi_sync_master_enabled=1
rpl_semi_sync_master_timeout=1000

怎么在 MySQL 中配置半同步復制

(4)修改 MySQL server-uuid 配置文件:

root@xuliugen:/var/lib/mysql# pwd
/var/lib/mysql

修改 auto.cnf 文件,server-uuid 的值格式固定,為了和 Slave 的區別開

[auto]
server-uuid=8d90feb7-1a88-11e7-9d11-000c298a546f

(5)查看配置是否成功:

mysql SELECT PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME LIKE  %semi%

怎么在 MySQL 中配置半同步復制

(6)參數說明:

1、rpl_semi_sync_master_enabled = 1, 表示在 master 上已經開啟了半同步復制模式;

2、rpl_semi_sync_master_timeout = 10000,表示如果主庫在某次事務中的等待時間超過 10000 毫秒,則降級為異步復制模式,不在等待 slave 從庫。如果主庫再次探測到 slave 從恢復了,則會自動切換回半同步復制模式;

3、rpl_semi_sync_master_wait_no_slave , 表示是否允許 master 每個事務提交后都要等待 slave 的接收確認信號。默認為 ON,即每一個事務都會等待。如果為 OFF,則 slave 追趕上之后,也不會開啟半同步復制模式,需要手工開啟;

4、rpl_semi_sync_master_trace_level = 32, 指用于開啟半同步復制模式時的調試級別,默認為 32。

可以看出,在配置 Master 的時候,只設置了 1,其他的都采取的默認設置。

二、Slave 配置

(1)在 Slave 數據庫安裝半同步復制插件:

mysql INSTALL PLUGIN rpl_semi_sync_slave SONAME  semisync_slave.so

怎么在 MySQL 中配置半同步復制

(2)設置 Slave 上開啟半同步復制:

mysql SET GLOBAL rpl_semi_sync_slave_enabled = 1;

怎么在 MySQL 中配置半同步復制

(3)修改 mysqld.cnf 配置文件:

[mysqld]
log-bin=mysql-bin
server_id=10089
server_id_bits = 32
rpl_semi_sync_slave_enabled = 1

怎么在 MySQL 中配置半同步復制

(4)修改 MySQL server-uuid 配置文件:

root@xuliugen:/var/lib/mysql# pwd
/var/lib/mysql

修改 auto.cnf 文件,server-uuid 的值格式固定,為了和 Slave 的區別開

[auto]
server-uuid=8d90feb7-1a88-11e7-9d11-000c298a123f

確保和 Master 的 server-uuid 不一樣!

(5)查看配置是否成功:

mysql SELECT PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME LIKE  %semi%

怎么在 MySQL 中配置半同步復制

(6)參數說明:

1、rpl_semi_sync_slave_enabled = 1, 表示在 slave 上已經開啟了半同步復制模式;

2、rpl_semi_sync_slave_trace_level = 32, 指用于開啟半同步復制模式時的調試級別,默認為 32。

三、為 Slave 指定 Master

(1)命令行模式下重啟 Master

root@xuliugen:~# service mysql restart

(2)命令行模式下重啟 Slave

root@xuliugen:~# service mysql restart

(3)查看 Master 狀態:

mysql  show master status\G;
*************************** 1. row ***************************
 File: mysql-bin.000004
 Position: 154
 Binlog_Do_DB:
 Binlog_Ignore_DB:
Executed_Gtid_Set:
1 row in set (0.02 sec)
mysql

怎么在 MySQL 中配置半同步復制

注意:

File: mysql-bin.000004
Position: 154

很重要,后邊需要使用!

(4)為 Slave 指定 Master:

1、首先關閉 Slave 的半同步復制

mysql  stop slave;
Query OK, 0 rows affected (0.01 sec)

2、為 Slave 指定 Master

mysql change master to master_host= 192.168.1.227 ,master_user= root ,master_password= 123456 ,master_log_file= mysql-bin.000004 , master_log_pos=154;
Query OK, 0 rows affected, 2 warnings (0.02 sec)

其中:

master_host= 192.168.1.227 ,Master 主庫 IP 地址
master_user= root ,Master 主庫數據庫賬戶
master_password= 123456 ,Master 主庫數據庫 root 用戶密碼
master_log_file= mysql-bin.000004 , Master 主庫 binlog 文件
master_log_pos=154,Master 主庫 binlog 文件 position

注意:

在 MySQL 5.6 版本以后,在進行主從復制的時候可以使用 GTID 的方式,無需再找 binglog 和 pos 點,只需要知道主服務器的 IP、端口、賬戶、密碼就可以實現自動找點同步,開啟 GTID 功能的時候就不用再使用 binlog 和 pos 了。詳細信息,請查閱相關資料進行學習。

3、開啟 Slave 的半同步復制

mysql  start slave;
Query OK, 0 rows affected (0.01 sec)

四、測試半同步復制是否成功

怎么在 MySQL 中配置半同步復制

五、如何優雅的關閉 Slave 同步信息

在某些時候,一臺服務器不再用來作為 Slave,那么我們就需要清楚他的同步信息,一般會使用:

mysql  stop slave # 先關閉
mysql  reset slave # 清楚 Slave 同步信息 

但是,這樣再通過 show master status\G 顯示的時候:

mysql  show master status\G;

還是會出現同步的信息,這是因為執行了 reset slave 只是把 master.info 和 relay-log.info 文件刪除了,但同步信息還在,如果有人在執行 start slave 命令開啟了同步功能,結果就會又從頭開始同步了,有可能還會造成數據的丟失。

如何讓其清除的更干凈哪?請使用下邊的命令:

mysql  stop slave # 先關閉
mysql  reset slave all# 清楚 Slave 同步信息 

再次執行 show master status\G 就不會再有任何信息了。

六、部分異常場景模擬

(1)半同步復制與異步復制的切換:

上述已經介紹了為什么會出現半同步復制到異步復制的切換,那么現在模擬一個場景進行演示。

場景如下:

1、關閉 slave 同步,停止 IO 接收 binlog 日志

mysql  stop slave;

該操作就將 IO 線程關閉,等待 10 秒之后,如果 master 未收到來自 slave 的確認信息,就會切換到異步復制模式:

怎么在 MySQL 中配置半同步復制

上圖看到 slave 已經關閉了半同步復制模式,再次開啟:

mysql  start slave;

怎么在 MySQL 中配置半同步復制

此時,已經還原到半同步復制模式了。

(2)同步報錯案例演示:

我們,首先從 slave 庫上刪除數據庫表 ufind,然后到 master 再次刪除該庫 ufind,該同步就會報錯:

怎么在 MySQL 中配置半同步復制

Last_Error: Error Can t drop database ufind database doesn t exist on query. Default database: ufind . Query: DROP DATABASE `ufind`

此時,查看半同步狀態:

怎么在 MySQL 中配置半同步復制

是開啟的,因此沒有將半同步復制模式轉化為異步復制模式,可以看出半同步復制模式跟 IO_Thread 是有直接關系的,但跟 SQL_THREAD 沒有關系。

也就是說,slave 從庫接收完二進制日志后給 master 主庫一個確認,但是他不會管 relay-log 中繼日志是否執行完畢。

看完上述內容,你們對怎么在 MySQL 中配置半同步復制有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注丸趣 TV 行業資訊頻道,感謝大家的支持。

向 AI 問一下細節

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-12-04發表,共計5321字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 蓝山县| 芜湖市| 杭州市| 八宿县| 连江县| 突泉县| 雷波县| 雅安市| 海宁市| 普洱| 周口市| 启东市| 璧山县| 无为县| 习水县| 太仓市| 绥宁县| 丰原市| 西丰县| 遂平县| 贵阳市| 子长县| 五家渠市| 颍上县| 杨浦区| 睢宁县| 安阳市| 濮阳市| 措勤县| 姚安县| 犍为县| 县级市| 文山县| 西昌市| 长汀县| 宜良县| 濉溪县| 荃湾区| 樟树市| 德钦县| 卢湾区|