MySQL Replication 資料庫同步機制,Client同步 Server上的資料(單向 master -> slaver)
master主機
1. 授權 replication slave 給slave主機
mysql> grant replication slave on *.* to [email protected] identified by '123456';
2. vi /etc/my.cnf
[mysqld]
log-bin
server-id=1
3. 為了避免新的資料再寫入,先stop mysql
service mysqld stop
4.
cd /var/lib/
tar jcvf mysql.bz2 mysql
scp mysql.bz2 [email protected]:/var/lib
5.
service mysqld start
查看狀態
mysql> show master statusG;
註: 為了避免新的資料再寫入,另一作法可用lock方式
mysql> flush tables with read lock;
之後再unlock
mysql> unlock tables;
slave主機
1.
service mysqld stop
cd /var/lib/
mv mysql mysql.org
tar jxvf mysql.bz2
2. vi /etc/my.cnf
[mysqld]
server-id=2
log-bin# master-host=192.168.1.1
# master-user=repluser
# master-password=123456
# replicate-do-db=dbname # 指定要備份的資料庫
# replicate-ignore-db=dbname # 指定要忽略的資料庫,其它都要
# replicate-do-table=dbname.tablename # 指定資料庫的table
# replicate-ignore-table=dbname.tablename
# master-port=3306
# master-connect-retry=60 # 與master連線中斷時,嘗試重新連線的時間間隔,預設為60秒
3.
service mysqld start
4.
mysql> change master to master_host='192.168.1.1',master_user='repl',master_password='123456';
5.
mysql> slave start;
6.
mysql> show slave statusG
註1:
看mysqld.log檔,有無 deny的字眼產生,如果有便可能是master沒有授權replication slave給slave。
註2
slave上會有兩個檔master.info與relay-log.info
如果slave 當機或stop時,重新啟動後,會去讀取這兩檔,繼續從上次中斷點開始未完成的備份
註3
如果資料還是沒有同步的話,可能是slave沒有設定成功,可刪掉相關設定檔,重新設定。
cd /var/lib/mysql
rm -f *-bin.*
rm -f master.info
註4
其它指令
mysql> show processlistG
mysql> show master logsG
mysql> purge master logs to 'xxxxx-bin.004' # 刪除xxxxx-bin.004之前的log檔資料
留言