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上進行寫操作,容易導致資料不一致。