1. 程式人生 > >mysql雙主配置及其註意事項

mysql雙主配置及其註意事項

mysql linux

mysql雙主配置及其註意事項

主庫配置

[mysqld]
server-id       = 1
log-bin=mysql1-bin
#salve-net-timeout默認是3600秒,縮短時間是為了防止雙YES的假象
slave-net-timeout=60
auto_increment_offset=2
auto_increment_increment=2
如果要指定同步或不同步哪些庫,可使用如下參數
#binlog-do-db=osyunweidb   #需要同步的數據庫名,如果有多個數據庫,可重復此參數,每個數據庫一行
#binlog-ignore-db=mysql    #不同步mysql系統數據庫

從庫配置

[mysqld]
server-id       = 2
log-bin=mysql2-bin
#salve-net-timeout默認是3600秒,縮短時間是為了防止雙YES的假象
slave-net-timeout=60
auto_increment_offset=1
auto_increment_increment=2

主鍵沖突

多主和主從有一點區別:因為在多主中都有對服務器有寫的權限,所以會造成主鍵沖突。從而導致同步失敗。所以需要保證自增長的數據不同。使用auto_increment_offsetauto_increment_increment來解決。

auto_increment_offset
auto_increment_increment

這兩個參數的作用:

  • 控制自增列auto_incremnet的行為
  • 用於master_master之間的復制,防止出現重復值

auto_increment_increment:自增值的自增量

auto_increment_offset: 自增值的偏移量

一般設置:

auto_increment_offset=1 偏移量從開始,依次增加

auto_increment_offset=N 有幾臺主服務器,就設置為N,這樣就可以保證他們之間的主鍵不沖突。

主從同步故障解決辦法:

  1. 適用於數據相差不大。要求不嚴格的情況。

在主庫上鎖表 flush tables with read lock

在從庫上執行:

stop slave;
#跳過錯誤的步驟,可以改變後面的數字,實現多次跳轉
set  global sql_slave_skip_counter =1;
start slave;
show slave status\G;
解鎖表 unlock tables;

2.重做,實現完全同步。適用於要求數據完全統一的情況下:

1. 在主庫上鎖表
2.進行主庫數據備份
3.查看master的狀態
4.將備份文件拷貝到從庫
######################
5.停止從庫的狀態
6.導入備份的數據庫
7.設置主從同步
8.開啟從同步
9.查看同步的狀態
10.在master上解鎖

不同版本做主從報錯問題:

配置:

    master1 mysql:5.6
    master2 mysql: 5.5
  1. 在master1做slave,master2做主數據看時成功
  2. 在master1做master,master2做從數據庫時報錯

     Got fatal error 1236 from master when reading data from binary log:
    ‘Slave can not handle replication events with the checksum that master is configured to log; 
    the first event ‘mysql-bin.000001‘ at 5115510, the last event read from ‘./mysql-bin.000001‘ at 5115510,
    the last byte read from ‘./mysql-bin.000001‘ at 120.‘

查詢資料發現當mysql版本為5.6時:
這個錯誤一般出現在master5.6,slave在低版本的情況下。這是由於5.6使用了crc32做binlog的checksum;當一個event被寫入binary log(二進制日誌)的時候,checksum也同時寫入binary log,然後event通過網絡傳輸到從服務器(slave)之後,再在從服務器中對其進行驗證並寫入從服務器的relay log。

由於每一步都記錄了event和checksum,所以看報錯就知道是無法checksum。
解決: 在master1配置文件中設置binlog_checksum =none;重啟,然後重新進行連接就好了。

mysql雙主配置及其註意事項