在實際項目中,兩臺分佈於異地的主機上安裝有MYSQL數據庫,兩臺服務器互爲主備,客戶要求當其中一臺機器出現故障時,另一臺可以接管服務器上的應用,這就須要兩臺數據庫的數據要實時保持一致,在這裏使用MYSQL的同步功能實現雙機的同步複製。mysql
1、數據庫同步設置sql
主機操做系統:centos數據庫
數據庫版本:mysql Ver 14.12 Distrib 5.0.22centos
前提:MYSQL數據庫正常啓動服務器
假設兩臺主機地址分別爲:網絡
ServA:192.168.0.101 ServB:192.168.0.203ide
Iptables 開發3306端口測試
1.1 配置同步帳號spa
在ServA上受權一個ServB能夠登陸的賬號:操作系統
GRANT all privileges ON *.* TO root@'192.168.0.203' IDENTIFIED BY '123456';
在ServB上受權一個ServA能夠登陸的賬號:
GRANT all privileges ON *.* TO root@'192.168.0.101' IDENTIFIED BY '123456';
1.2 配置數據庫參數
1、 以root用戶登陸ServA,修改ServA的my.cnf文件
vi /etc/my.cnf
在[mysqld]的配置項中增長以下配置:
default-character-set=utf8
log-bin=mysql-bin
relay-log=relay-bin
relay-log-index=relay-bin-index
server-id=1
master-host=192.168.0.203
master-user=root
master-password=123456
master-port=3306
master-connect-retry=30
binlog-do-db=abc
replicate-do-db=abc
replicate-ignore-table=umsdb.boco_tb_menu
replicate-ignore-table=umsdb.boco_tb_connect_log
replicate-ignore-table=umsdb.boco_tb_data_stat
replicate-ignore-table=umsdb.boco_tb_log_record
replicate-ignore-table=umsdb.boco_tb_workorder_record
2、以root用戶登陸ServB,修改ServB的my.cnf文件
vi /etc/my.cnf
在[mysqld]的配置項中增長以下配置:
default-character-set=utf8
log-bin=mysql-bin
relay-log=relay-bin
relay-log-index=relay-bin-index
server-id=2
master-host=192.168.0.101
master-user=root
master-password=123456
master-port=3306
master-connect-retry=30
binlog-do-db=abc
replicate-do-db=abc
replicate-ignore-table=umsdb.boco_tb_menu
replicate-ignore-table=umsdb.boco_tb_connect_log
replicate-ignore-table=umsdb.boco_tb_data_stat
replicate-ignore-table=umsdb.boco_tb_log_record
replicate-ignore-table=umsdb.boco_tb_workorder_record
1.3 手工執行數據庫同步
假設以ServA爲主服務器,在ServB上重啓mysql:
service mysqld restart
在ServB上用root用戶登陸mysql,執行:
Mysql> stop slave;
Mysql> load data from master;
Mysql> start slave;
在ServA上重啓mysql:
service mysqld restart
1.4 查看數據庫同步狀態
在mysql命令提示符下執行:
Mysql> show slave status\G
將顯示同步進程的狀態,以下所示,若是都爲yes表示正常;
3、 數據庫同步測試
配置完數據庫後進行測試,首先在網絡正常狀況下測試,在ServA上進行數據庫操做,和在ServB上進行數據庫操做,數據都可以同步過去。
拔掉ServB主機上的網線,而後在ServA上作一些數據庫操做,以後再恢復ServB的網絡環境,可是在ServB上卻看不到同步的數據,經過命令show slave status\G查看發現Slave_IO_Running的狀態是No,這種狀態持續很長一段時間,數據才能同步到ServB上去。這是什麼問題呢?同步延遲不會這麼大吧。後來經過網上查找相關資料,找到一個同步延遲相關的參數:
--slave-net-timeout=seconds
參數含義:當slave從主數據庫讀取log數據失敗後,等待多久從新創建鏈接並獲取數據。
因而在配置文件中增長該參數,設置爲60秒
slave-net-timeout=60
重啓MYSQL數據庫後測試,該問題解決。