本文實現兩個數據庫同步,分為主從模式和相互備份模式。
實施環境:
兩台Linux機器
SerA ip:10.0.0.232
SerB ip:10.0.0.234
Demo1:主從模式
Master:SerA Slave:SerB
在SerA和SerB上分別建立用於同步的賬號(也可以不新建賬號,直接給其他賬號分配訪問權限)
use mysql;
delete from user;
grant all privileges on *.* to '$username'@'%' identified by '$password' with grant option;
flush privileges;
上面是為了安全,刪除了一些用戶(一般都要把默認的沒有密碼的用戶刪除)
StepA:
SerA配置為Master,在SerA上在my.cnf中添加:
replicate-do-db=$database
server-id=1
指定binlog(因為時通過binlog實現數據同步的)
配置完后重啟數據庫服務,用show master status可以看到Master信息。
StepB:
在SerB的my.cnf中指定
replicate-do-db=$database
server-id=2
指定binlog
配置完后重啟數據庫服務,用show slave status可以看到Slave信息。
(在MySQL5.1以后,my.cnf中已經去除了master-host等參數,應該在啟動服務之后通過change master to ...命令來實現配置,也可以在啟動的時候添加這些參數。下面是change master to ...示例)
bin/mysql -u$username -p$password -e "stop slave;change master to master_host='$mysqlMasterHost',master_port=3306,master_user=$username,master_password=$password;start slave;"
mysqlMasterHost是Master的IP,
master_port是Master的端口,
master_user和master_password是用於同步的賬號和密碼
還有master_log_file和master_log_pos參數指定同步數據的位置。
可以在mysql命令模式下執行change master,之后start slave
注意:由於設置了slave的配置信息,mysql在數據庫目錄下生成master.info
所以如有要修改相關slave的配置要先刪除該文件。否則修改的配置不能生效。
這樣就可以實現主從配置,此時在SerA指定數據庫中加入數據,SerB中相應的數據庫也會添加數據。
模擬主從切換:
假設SerA現在無法提供服務,只需在SerB上執行show master status記錄master_log_file和master_log_pos,停止ServB的slave。
在SerA上執行change master 到SerB,並且指定master_log_file和master_log_pos,這樣就可以恢復在SerA宕機期間存到SerB上的數據。
看一些配置和查看命令的結果:
注意Slave_IO_Running和Slave_SQL_Running的狀態都必須是YES
Demo2:雙機互備
雙機互備只是兩台機器同時做Master和Slave,
即在SerA上使它的Master指向SerB,SerB的Maser指向SerA,
配置其實和主從模式是一樣的。