MySQL的Replication功能可以自動同步主MySQL服務器的更新到若干個輔MySQL服務器上,這個功能能把MySQL的數據實時分布到多台機器上,提交了MySQL的數據安全性。
配置MySQL Replication並不是個簡單的工作,如果配置的不好,回導致MySQL的同步性能不好,或者不能同步,甚至導致主輔服務器的數據不一致。
下面主服務器為master,輔助服務器為slave
master的配置
第一步保證master能單機正常工作,略。
在master上創建一個MySQL用戶,這個用戶專門用於Replication:
grant replication slave on *.* to 'repluser'@'%' identified by 'mypassword';
編輯MySQL的配置文件,允許log-bin,並且給master分配一個ID:
[mysqld]
skip-name-resolve
server-id=10
log-bin=mysql-bin
sync_binlog=1
innodb_flush_logs_at_trx_commit=1
innodb_support_xa=1
slave的配置
配置ID等
[mysqld]
server-id=20
log_bin = mysql-bin
relay_log = mysql-relay-bin
skip_slave_start
log_slave_updates = 1
read_only
skip-name-resolve
同步數據
在master上把數據導出,並記錄當前數據位置。用一個用戶連接mysql並運行:
flush tables with read lock;
show master status;
然後該連接不要退出,否則read lock就失效了,記錄下當前日志的文件名和位置。在另外一個窗口運行如下命令導出數據:
mysqldump -uroot -p --all-databases |gzip -c > db.sql.gz
然後把數據文件拷貝到slave上,解壓縮:
gunzip db.sql.gz
進MySQL導入:
source db.sql;
這時候slave上的數據已經同步到master的導出時刻的數據了,下面就啟動自動同步的線程就可以了:
change master to master_host='1.1.1.1', master_user='repluser', aster_password='mypassword',master_log_file='mysql-bin.000006',master_log_pos=502185;
show slave status;
start slave;
show slave status;
從上面的
show slave status命令的輸出可以看到,
IO線程和SQL線程都開始工作了。過幾分鐘後比較一下slave和master上的日志文件及其位置,應該就是一樣的了。
注意事項
應用程序不要使用數據庫的root用戶,一定要創建普通用戶供應用程序使用,因為root用戶可以在slave上進行寫操作,容易導致數據不一致。