MySQL主主互備結構是基於mysql增量日志基礎上的,區別於主從復制結構.
在主主復制結構中,兩台服務器的任何一台上面的數據庫存發生了改變都會同步到另一台服務器上,這
個改變是基於sql語句的改變,如果刪除系統數據庫源文件或刪除後新創建同名MYSQL表實現同步則無效
。這樣兩台服務器互為主從,並且都能向外提供服務,這就比使用主從復制具有更好的性能.
接下來我將使用兩個相同的環境來實現這個效果:
系統環境:centos6.3
數據庫: mysql-5.6.10
注:在做此項配置之前首先要保證數據庫當前無任何變動,建議同步前關閉WEB服務等影響數據庫變動的
服務
安裝配置mysql(略)
1.主1 mysql配置:(192.168.7.201)
刪除之前遺留bin日志
# rm -rf /usr/local/mysql/log/bin*
修改mysql配置文件:
# vi /etc/my.cnf
添加:
-----------------
# Replication Master Server 1
# bin日志路徑
log-bin = /usr/local/mysql/log/bin.log
# 服務器ID號
server-id = 1
# 忽略mysql數據庫復制
binlog-ignore-db=mysql
# 每次增長2
auto-increment-increment = 2
# 設置自動增長的字段的偏移量,即初始值為2
auto-increment-offset = 1
------------
# mysql -u root -p123456
在主1上為主2添加同步帳號
> grant replication slave on *.* to 'slave'@'192.168.7.249' identified by '123456';
將主1的數據庫表全部備份,並發送到主2服務器上。
# /usr/local/mysql/bin/mysqldump -u root -p123456 --opt --skip-lock-tables --flush-logs
--all-database > /root/allbak.sql
# cd ~
# scp allbak.sql [email protected]:/root
重啟服務
# service mysqld restart
# mysql -u root -p123456;
配置連接到主2服務器(注意這步一定要在主2添加賬戶後執行)
> stop slave;
> change master to
master_host='192.168.7.249',master_user='slave',master_password='123456';
> start slave;
2.主2 mysql配置(192.168.7.249)
刪除之前遺留bin日志
# rm -rf /usr/local/mysql/log/bin*
修改mysql配置文件:
# vi /etc/my.cnf
添加:
--------------------
# Replication Master Server 2
# bin日志路徑
log-bin = /usr/local/mysql/log/bin.log
server-id=2
# 忽略mysql數據庫復制
replicate-ignore-db=mysql
# 每次增長2
auto-increment-increment = 2
# 設置自動增長的字段的偏移量,即初始值為2
auto-increment-offset = 2
---------------------
# mysql -u root -p123456
在主2上為主1添加同步帳號
> grant replication slave on *.* to 'slave'@'192.168.7.201' identified by '123456';
恢復主1的數據庫到主2
#/usr/local/mysql/bin/mysql -u root -p123456 < /root/allbak.sql
重啟服務
# service mysqld restart
# mysql -u root -p123456;
配置連接到主1服務器
> stop slave;
> change master to
master_host='192.168.7.201',master_user='slave',master_password='123456';
> start slave;
最後分別登陸兩台服務器mysql後台查看主主備份連接狀態
# mysql -u root -p123456;
> show slave statusG;
搜索這三行,如下則主主互備配置成功
Slave_IO_State: Waiting for master to send event
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
當主1的數據庫增加,刪除,改變數據時,主2也會同步更新。
當主2的數據庫增加,刪除,改變數據時,主1也會同步更新。
這樣就可以配合keepalived實現數據庫雙機熱備+數據同步互備,大大提高了MYSQL的可靠性和安全性