Mariadb的主從復制實驗和半同步的實現

1,主服務器需要開啟二進制日志記錄,并且授權一個用戶給從節點。

主服務器的主配置文件[mysqld]內容如下。

  1. [mysqld]
  2. port=?3306
  3. socket=?/tmp/mysql.sock
  4. skip-external-locking
  5. key_buffer_size?=?256M
  6. max_allowed_packet?=?1M
  7. table_open_cache?=?256
  8. sort_buffer_size?=?1M
  9. read_buffer_size?=?1M
  10. read_rnd_buffer_size?=?4M
  11. myisam_sort_buffer_size?=?64M
  12. thread_cache_size?=?8
  13. query_cache_size=?16M
  14. thread_concurrency?=?8
  15. log-bin=/mydata/binlog/mysql-bin???定義二進制日志的位置,生產環境中不應當與數據庫文件在一個磁盤上。
  16. binlog_format=mixed
  17. server-id=?1????????server-id就使用默認的1
  18. datadir=/mydata/data
  19. sync_binlog?=?1????產生二進制日志就寫入磁盤

給從節點授權一個復制使用的用戶

MariaDB [(none)]> GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO slaveuser@’172.16.2.17′ IDENTIFIED BY ‘slavepass’;

MariaDB [(none)]> FLUSH PRIVILEGES;

從節點配置:

mysql的主配置文件[mysqld]段如下

?
  1. [mysqld]
  2. port=?3306
  3. socket=?/tmp/mysql.sock
  4. skip-external-locking
  5. key_buffer_size?=?256M
  6. max_allowed_packet?=?1M
  7. table_open_cache?=?256
  8. sort_buffer_size?=?1M
  9. read_buffer_size?=?1M
  10. read_rnd_buffer_size?=?4M
  11. myisam_sort_buffer_size?=?64M
  12. thread_cache_size?=?8
  13. query_cache_size=?16M
  14. thread_concurrency?=?8
  15. #log-bin=mysql-bin????????因為節點無需二進制日志,所以把這項注釋掉了
  16. relay-log=/mydata/relaylog/relay-log???????定義中繼日志
  17. binlog_format=mixed
  18. server-id=?2???????????server-id定義為2
  19. datadir=/mydata/data
  20. read_only?=?1????????????設定數據庫為只讀,但對于超級用戶無效。只能針對普通用戶。

在mysql中執行

?
  1. CHANGE?MASTER?TO?MASTER_HOST=‘172.16.2.15’,?MASTER_USER=‘realuser’,?MASTER_PASSWORD=‘passwd’,?MASTER_LOG_FILE=‘master_bin.000001’,?MASTER_LOG_POS=495;
  2. START?SLAVE;

配置完成后,在主庫創建數據庫和表,然后到從庫查看。如果有說明配置成功。

查看從節點狀態的命令是:SHOW SLAVE STATUS; 其它含意解釋如下。

?
  1. MariaDB?[(none)]>?show?slave?status\G
  2. ***************************?1.?row?***************************
  3. Slave_IO_State:??????????????????????當前從節點IO的狀態
  4. Master_Host:?172.16.2.16??????主節點的IP
  5. Master_User:?slave??????????????????使用那個用戶連接的主節點
  6. Master_Port:?3306??????????????????主節點使用的TCP端口
  7. Connect_Retry:?60????????????????????多長時間讀取一次
  8. Master_Log_File:?mysql-bin.000005????當前主節點的二進制日志文件
  9. Read_Master_Log_Pos:?581??????????????????????當前主節點二進制日志文件位置
  10. Relay_Log_File:?relay-log.000001????????當前從節點中繼日志文件
  11. Relay_Log_Pos:?4????????????????????????????????當前從節點中繼日志文件中記錄的位置
  12. Relay_Master_Log_File:?mysql-bin.000005??正在中繼主節點的日志文件是那個
  13. Slave_IO_Running:?No????????????????????????????從節點的IO_THREAD線程是否啟動,如果為NO表示還沒有向主節點請求二進制日志文件。這個線程工作內容是把主節點的二進制日志一條一條的同步到從節點的中繼日志中。
  14. Slave_SQL_Running:?No?????????????????從節點的SQL線程是否啟用,這個線程的任務是把中繼日志中的SQL語句一條一條的讀的MySQL中執行,以實現數據的寫入。
  15. Master_Server_Id:?0???????????????主節點的ID

當數據庫已經運行了一段時間后,主節點已經有大量的數據。這時如果添加一臺從節點,最好把主節點做一個完整備份,恢復到從節點。然后再配置從節點到主節點復制數據,這樣能快速把主從節點數據同步一致。

1,先對主服務器做一個完整備份。然后把備份好的數據發送到從節點上。

?
  1. #?mysqldump?–lock-all-tables?–all-databases?–master-data=2?>?master.sql
  2. #?scp?master.sql?172.16.2.17:/root

需要創建從節點連接主節點使用的數據庫。

?
  1. mysql>?GRANT?REPLICATION?SLAVE,?REPLICATION?CLIENT?ON?*.*?TO??realuser@’172.16.2.13′??IDENTIFIED?BY?‘passwd’
  2. mysql>?FLUSH?PRIVILEGES;

2,定義好從節點的工作特性。然后恢復數據。

在配置文件中[mysqld]加入以下段,并且注釋二進制日志,因為從節點要二進制日志沒用,白白浪費空間。

?
  1. relay-log??=??/mydata/relaylog/relay-log
  2. server-id?=?2?????????????serviceID?一定不能與主節點的ID重復。
  3. read_only?=?1???????????設置數據庫為只讀模式,但對于超級用戶無效。普通用戶只能讀,不能修改。
  4. sql?<?/root/master.sql????把主節點備份的數據恢復到庫中

3,恢復數據時需要在備份的文件中找到,備份主節點時二進制日志文件使用到那個文件了,二進制日志文件中事件id所在的位置。大概如下:
— CHANGE MASTER TO MASTER_LOG_FILE=’mysql-bin.000009′, MASTER_LOG_POS=7925;

然后到數據庫執行連接到主服務器。

CHANGE MASTER TO MASTER_HOST=’172.16.2.15′, MASTER_USER=’realuser’, MASTER_PASSWORD=’passwd’, MASTER_LOG_FILE=’master_bin.000001′, MASTER_LOG_POS=495;

啟動IO_THREAD線程和SQL_THREAD線程

START SLAVE;

復制總結:

1,對于master 需要啟動二進制日志,有惟一的server-id

2,binlog dump : 將從服務的 io thread 發出的讀取二進制日志事件請求的數據發送給對方 。

3,slave 必須啟用中繼日志,關閉二進制日志(建議),有惟一的server-id。

IO thread:向master請求二進制日志并保存到本地的中繼日志。

SQL thread:把本的中繼日志中的sql語句一條一條的讀取并執行

4,對于從服務器,一般只有一個主服務器。否則會造成中繼日志混亂。

5,MariaDB 10 版本支持多源復制。從服務器支持多個主服務器,但是多個數據庫。

6,可以多級復制,但從服務器如果做為其它從服務器的主服務器,需要開啟二進制日志

7,從服務器可以有多個。

8,因為是異步復制,從服務器的數據可能會落后于主服務器。這個問題一很難避免。

如何啟用半同步? 從mysql5.5.8后才有的功能。由google貢獻給mysql的補丁,以插件式安裝,默認沒有安裝。位于mysql的安裝目錄下的 lib/plugin下的 semisync_master.so 和 semisync_slave.so 一個是主節點專用,一個是從節點專用。

什么叫半同步: master至少要等待一個從節點把數據完全復制過去。

使用INSTALL 命令安裝。配置文件中[mysql]下的plugin_dir= 用來指定插件文件的保存位置。如果有其它插件保存在其它位置,需要在這里定義,這樣INSTALL命令可以找到。

在mysql下的安裝方法

MariaDB> INSTALL PLUGIN rpl_semi_sync_master SONAME ‘semisync_master.so’;

安裝過后引入幾個新的服務器變量: 查看方法: SHOW GLOBAL VARIABLES LIKE ‘%semi%’;

  1. |?rpl_semi_sync_master_enabled?????|?OFF?|???是否開啟此插件
  2. |?rpl_semi_sync_master_timeout??????|?10000?|????等待從節點最多多長時間,單位是毫秒。如果從節點在等待時間內沒有響應,就不再等待,從半同步模式變為異步模式。
  3. |?rpl_semi_sync_master_trace_level????|?32?|
  4. |?rpl_semi_sync_master_wait_no_slave?|?ON???????如果沒有從節點是否還需要等待。

需要在配置文件中的[mysql]段中寫入

rpl_semi_sync_master_enabled=1

rpl_semi_sync_master_timeout=1000

設置好后重新啟動服務就可以了。

在從節點上的設置方法

?
  1. MariaDB>?INSTALL?PLUGIN?rpl_semi_sync_slave?SONAME?‘semisync_slave.so’;
  2. MariaDB>?SHOW?GLOBAL?VARIABLES?LIKE?‘rpl_semi%’;???????查看安裝插件后生成的服務器變量
  3. ??????|?rpl_semi_sync_slave_enabled??????|?OFF????是否開啟了此插件,ON為開啟。
  4. ??????|?rpl_semi_sync_slave_trace_level??|?32?????此項需要與主節點保持一致。

在主配置文件中的[mysql] 段中寫入

rpl_semi_sync_slave_enabled=1

在從節點上重啟IO THREAD線程就可以了。

MariaDB> STOP SLAVE IO_THREAD;

MariaDB> START SLAVE IO_THREAD;

查看是否已經啟用半同步模式,需要在MASTER上查看。

?
  1. MariaDB>?SHOW?GLOBAL?STATUS?LIKE?‘%semi%’;
  2. ?????Rpl_semi_sync_master_clients????工作于半同步的客戶端有幾個
  3. ?????Rpl_semi_sync_master_net_avg_wait_time???主節點為等待IO_THREAD平均等待的時間
  4. ?????Rpl_semi_sync_master_net_wait_time?????主節點為等待IO_THREAD等待的時間
  5. ?????Rpl_semi_sync_master_net_waits???????????主節點為等待IO_THREAD等待的次數
  6. ?????Rpl_semi_sync_master_tx_avg_wait_time??主節點為等待IO_THREAD等待的事務

本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/87305

(0)
HGGHGG
上一篇 2017-09-17 21:51
下一篇 2017-09-18 01:40

相關推薦

  • shell腳本基礎

    編程基礎 v程序:指令+數據 v程序編程風格: 過程式:以指令為中心,數據服務于指令(適合小型程序) 對象式:以數據為中心,指令服務于數據(適合大型程序) vshell程序:提供了編程能力,解釋執行 程序的執行方式 v計算機:運行二進制指令; v編程語言: 低級:匯編 高級: 編譯:高級語言–>編譯器–>目標代碼 java…

    Linux干貨 2016-08-15
  • YUM LNMP 安裝 wordpress

    1配置防火墻 Iptables -A INPUT -m state –state NEW -m tcp -p tcp –dport 80 -j ACCEPT #允許80端口通過防火墻 iptables-A&…

    Linux干貨 2016-06-22
  • grep基本正則表達式以及擴展正則表達式

    基本正則表達式: grep:Globel serach REgular expression and print out the line 作用:文本搜索工具,根據用戶指定的“模式(過濾條件)”對目標文本逐行進行匹配檢查,打印匹配到的行 模式:由正則表達式的元字符及文本字符所編寫出的過濾條件 grep選項:       &nbs…

    Linux干貨 2016-08-08
  • 數組

    一.數組 變量:存儲單個元素的內存空間 數組:存儲多個元素的連續的內存空間,相當于多個變量的集合。 索引:編號從0 開始,屬于數值索引  注:索引可支持使用自定義的格式,而不僅是數值格式,即為關聯索引,bash4.0 版本之后開始支持,bash 的數組支持稀疏格式(索引不連續) 二.數組的聲明 declare -a ARRAY_NAME decla…

    Linux干貨 2016-11-23
  • 第五周作業

    1、顯示當前系統上root,fedora或user1用戶的默認shell。 [root@hostname ~]# grep -E ‘^(root|fedora|user1)’ /etc/passwd | cut -d: -f1,7 root:/bin/bash 2、找出/etc/rc.d/init.d/functions文件中某詞后面跟一組小括號的行,形如:…

    Linux干貨 2017-08-04
  • Linux基礎之shell腳本編程(一)

    本文主要是shell腳本編程練習 1、寫一個腳本    (1)、獲取并列出當前系統上的所有磁盤設備;    (2)、顯示每個磁盤設備上每個分區相關的空間使用信息;   1 #!/bin/bash   2 #author:BaoZhang  &nbsp…

    Linux干貨 2016-11-11
欧美性久久久久