MySQL Replication 資料庫同步機制,Client同步 Server上的資料(單向 master -> slaver)

master主機
1. 授權 replication slave 給slave主機
mysql> grant replication slave on *.* to repluser@192.168.1.2 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 root@192.168.1.2:/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檔資料
 

ref: http://www.study-area.org/tips/mysql_replication.htm

最後修改日期: 2006 年 11 月 14 日

作者

留言

撰寫回覆或留言

發佈留言必須填寫的電子郵件地址不會公開。