MySQL主從異步, 半同步配置

對於MySQL還是個新手, 對一些的底層的東西缺乏理解,只是從業務角度去理解, 希望數據能夠達到一個什麼樣的效果(更安全, 更快速)。

其中MySQL自帶的複製機制是比較不錯的選擇, 可以保證數據的安全, 同時又不需要人工干預。複製分爲異步和半同步兩種機制, 半同步需要安裝插件。


主從複製搭建過程

     異步複製配置

     1. 準備兩個相同版本的MySQL(5.6)數據庫, 建議安裝在兩臺機器(CentOS 6.7)上

          例: 

          主數據庫IP:172.22.1.152

          從數據庫IP:172.22.1.153

      主數據庫設置

      2. 在主數據庫, 創建一個複製使用的賬戶,負責將數據從主數據庫複製到從數據庫.

           授予REPLICATION SLAVE權限, 這裏使用用戶名: repl, 密碼: Aa12345

           mysql>GRANT REPLICATION SLAVE ON *.* TO 'repl'@'172.22.1.153'  identified by 'Aa12345' with grant option;

           或者直接通過可視化工具創建用戶,  如下圖

                

        3. 配置主數據庫my.cnf, 開啓BINLOG, 並設置sever-id的值, 主從server-id的值必須是不一樣的

            #Master configuration-defaults
            server-id=1
            log_bin=mysql-bin #啓動MySQ二進制日誌系統,注意:如果原來的配置文件中已經有這一行,就不用再添加了
            expire_logs_days = 10  #二進制日誌自動刪除的天數。默認值爲0, 表示"沒有自動刪除".
            #下面兩個屬性在半同步配置的時候會用到, 如果沒有安裝同步插件, 建議不要開啓
            #rpl_semi_sync_master_enabled=1
            #rpl_semi_sync_master_timeout=30000

        4. 在主庫上, 設置讀鎖定有效, 這個操作是爲了確保沒有數據庫操作, 以便獲得一個一致性的快照

             如果可以確定主數據庫沒有讀寫操作, 可以不執行當前步驟

             mysql> flush tables with read lock;

        5. 從當前主庫獲得二進制日誌名和偏移量值. 這個操作的目的是爲了在從數據庫啓動以後, 從這個點開始進行數據的恢復.

             mysql> show master status;

                          

          6. 備份主數據庫, 恢復到從數據庫, 這也是需要步驟4,5的原因

          7. 主數據庫備份完畢後, 恢復寫操作

               mysql> unlock tables;


          從數據庫設置

8. 配置從數據庫my.cnf, 設置sever-id的值, 主從server-id的值必須是不一樣的  

              #Slave configuration-defaults
              server-id=2   #設置服務器id,爲2表示從服務器,注意:如果原來的配置文件中是否已經有這一行.
              expire_logs_days = 15  #二進制日誌自動刪除的天數。默認值爲0,表示"沒有自動刪除".
              slave_skip_errors=1032,1396,1062 #忽略sql執行錯誤
              relay_log_recovery = 1 #從庫開啓中繼日誌relay-log自我修復
              slave_parallel_type='logical_clock'; #基於邏輯時鐘的方式支持多線程複製
              slave_parallel_workers=4; #設置併發處理的線程數
              #rpl_semi_sync_slave_enabled=1
          9.  在從庫上, 使用--skip-slave-start選項啓動從數據庫, 這樣不會立即啓動從數據庫服務項目上的複製進程,方便我們對從數據庫的服務進行進一步的配置.

               需要的時候再考慮這一步吧

         10. 對從數據庫服務器做相應設置, 指定複製使用的用戶, 主數據庫服務器的IP, 用戶名密碼, 以後第5步中的日誌名和偏移量值

                mysql> change master to master_host='172.22.1.152',master_user='repl',master_password='Aa12345',master_log_file='mysql-bin.000002' ,master_log_pos=3688;

          11. 啓動關閉slave線程

                 mysql> start/stop slave;

          12. 從服務器查看同步服務是否正常啓動

                 mysql> show processlist

                 

                 結果中顯示上述, 表明slave已經連接上master, 並開始接受並執行日誌

          13. 添加新數據, 或者創建新表檢查數據是否正常同步

           

           MySQL通過引入sync_binlog參數來控制Binlog刷新到磁盤的頻率:

           mysql> SHOW VARIABLES LIKE '%sync_binlog%'

           在默認情況下, sync_binglog=0表示MySQL不控制Binlog的刷新, 由文件系統自己控制文件系統的緩存的刷新.

           如果sync_binlog>0, 則表示每sync_binlog次事務提交, MySQL調用文件系統的刷新操作將Binlog刷到磁盤. 比如: sync_binlog=1, 表示每一次事務提交,MySQL都需要把            binlog刷新到磁盤,如果主機故障, 系統最多損失一最近一個事務的數據。同時也因爲頻率的刷新, 對I/O帶來很大的壓力


        故障判斷:

        通常從服務器沒有成功從主庫同步到數據,都是SQL執行出錯,日誌同步一般有錯, 這種情況排除錯誤, 然後重啓slave就可以。

        mysql >show slave status;

        例如: Slave_IO_Running, Slave_SQL_Running, Last_SQL_Errno

          


    半同步複製

           在半同步複製中, 爲了保證主庫上的每一個binlog事務都能夠被可靠的複製到從庫上,主庫在每次事務成功提交時, 並不及時反饋給前端應用用戶,而是等待其中之一個從庫也接收到Binlog事務併成功寫入中繼日誌後, 主庫才返回Commit操作成功給客戶端。如果同步出現故障, 則MySQL自動調整複製爲異步模式,事務正常返回提交結果給客戶端。半同步服務需要安裝插件.

           1. 首先判斷MySQL服務器是否支持動態增加插件

               mysql> select @@have_dynamic_loading

               顯示: 

            2. 確認支持動態增加插件後,檢查MySQL的安裝目錄下是否存在插件semisync_master.so和semisync_slave.so

                mysql> show variables like 'plugin_dir'; #查看插件存入地址

                在主庫上安裝插件semisync_master.so

                mysql> install plugin rpl_semi_sync_master SONAME 'semisync_master.so'
                在從庫上安裝插件semisync_slave.so

                mysql> install plugin rpl_semi_sync_slave SONAME 'semisync_slave.so'

                安裝完成以後, 可以在pluging表中能夠看到剛纔安裝的插件:

                mysql> select * from mysql.plugin;

               

           3.  分別配置主從數據庫my.cnf, 打開半同步semi-sync

                主庫my.cnf

                rpl_semi_sync_master_enabled=1
                rpl_semi_sync_master_timeout=30000

                從庫my.cnf

                rpl_semi_sync_slave_enabled=1

           至此半同步配置完畢,下面可以通過命令來驗證:

           msyql> show status like '%semi_sync%'

           mysql> show variables like '%Rpl%'


                 






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章