「HOW-TO」
好了廢話不多說,我們現在就直接進行實做好了...
pre-condition : 為了減少麻煩,master & Slave 最好版本是一致的
1. 建立Replication的帳號
因為Slave 要跟Master 要資料所以他需要具有 Access master 的權限
mysql>Grant replication slave on *.*
mysql>to 'urID'@'oo.xx.yy.zz' IDENTIFIED BY 'urpasswd';
註:
urID:就是replication 要使用的帳號
oo.xx.yy.zz :指的就是Slave ip 建議採用IP
==>注意這裡,也是可以用 FQDN or Host name 但是 不要用好了因為速度會快一點點,
而且減少錯誤機會
urpasswd : 這個我就不想說了,如果不知道.. 就表示你不會用MySQL 教了也沒有用唷
2. 更改MySQL 的設定檔(因為版本眾多,反正就是 my.cnf 我的例子是在gentoo的Portage裝的所以他會是/etc/mysql/my.cnf。)
分為兩個部份 Master( 目標的Server ) && Slave( 複製或說備份的Server )
Master MySQL 上的設定 ,這個設定完請restart Master MySQL
***************
[mysqld]
#Replication Setting
log-bin
server-id = 1 #編號啦
***************
Master 上的設定比較簡單
複雜的是Slave 上的設定就比較複雜
slave MySQL 上的設定
***************
[mysqld]
#Slave MySQL Setting
server-id = 2
master-host= skypedb #建議打IP 要不就是你需要在Hosts 上增加這一筆Entry
master-user= urID #見步驟一
master-password=urpasswd #見步驟一
master-port=3306
replicate-do-db=targetDB #準備要複製或備份的DB
replicate-ignore-db = mysql #複製時要略過的DB,為什麼不複製Mylsq 這一個DB
#原因是,MySQL的管理資料都是存放在這一個地方
#如USER權限,可以從什麼地方Access..等,所以我們忽略不Replicat
***************
3. 開始作業(以下作法,有部份異於MySQL的官方作法,可以參考MySQL 的Reference)
a. 鎖定資料庫, 因為這樣一來,Binary Log 就不會因為新增刪除修改而長大(因為只能讀,binary就不會增加)
FLUSH TABLES WITH READ LOCK;
b. 把datafile copy 和打包 搬到Salve 上去然後解包<不知道大陸是怎麼說解壓縮的咧..呵呵>(targetDB 為目標資料庫)
tar -cjvf targetDB.bz2 /var/lib/mysql/targetDB
然後搬到Slave 上去 ,隨便你用 scp 或是用 rsync 最好是你的Server 上還有開FTP啦
(這是反諷法唷,不要真的開FTP,開了就暈了)
解開放到 /var/lib/mysql 下面
解開語法 tar -jxvf targetDB.bz2
註:請確定 /var/lib/mysql/targetDB 的owner 一定要是 mysql:mysql ,
so 我的作法是 chown -R mysql:mysql /var/lib/mysql/targetDB
C. 這個時候請 Restart Slave
MySQL -u root -e"start Salve"
這個時候如果設定沒有錯誤的話
這一組Replication 就會完成了
d. 在Master & Slave上 分別在MySQL
MySQL>SHOW MASTER STATUS
MySQL>SHOW SLAVE STATUS
如果都正常 的話
e. 在master 上unlock tables
MySQL>UNLOCK TABLES;
Mysql Master 已經可以正程讀寫
好了廢話不多說,我們現在就直接進行實做好了...
pre-condition : 為了減少麻煩,master & Slave 最好版本是一致的
1. 建立Replication的帳號
因為Slave 要跟Master 要資料所以他需要具有 Access master 的權限
mysql>Grant replication slave on *.*
mysql>to 'urID'@'oo.xx.yy.zz' IDENTIFIED BY 'urpasswd';
註:
urID:就是replication 要使用的帳號
oo.xx.yy.zz :指的就是Slave ip 建議採用IP
==>注意這裡,也是可以用 FQDN or Host name 但是 不要用好了因為速度會快一點點,
而且減少錯誤機會
urpasswd : 這個我就不想說了,如果不知道.. 就表示你不會用MySQL 教了也沒有用唷
2. 更改MySQL 的設定檔(因為版本眾多,反正就是 my.cnf 我的例子是在gentoo的Portage裝的所以他會是/etc/mysql/my.cnf。)
分為兩個部份 Master( 目標的Server ) && Slave( 複製或說備份的Server )
Master MySQL 上的設定 ,這個設定完請restart Master MySQL
***************
[mysqld]
#Replication Setting
log-bin
server-id = 1 #編號啦
***************
Master 上的設定比較簡單
複雜的是Slave 上的設定就比較複雜
slave MySQL 上的設定
***************
[mysqld]
#Slave MySQL Setting
server-id = 2
master-host= skypedb #建議打IP 要不就是你需要在Hosts 上增加這一筆Entry
master-user= urID #見步驟一
master-password=urpasswd #見步驟一
master-port=3306
replicate-do-db=targetDB #準備要複製或備份的DB
replicate-ignore-db = mysql #複製時要略過的DB,為什麼不複製Mylsq 這一個DB
#原因是,MySQL的管理資料都是存放在這一個地方
#如USER權限,可以從什麼地方Access..等,所以我們忽略不Replicat
***************
3. 開始作業(以下作法,有部份異於MySQL的官方作法,可以參考MySQL 的Reference)
a. 鎖定資料庫, 因為這樣一來,Binary Log 就不會因為新增刪除修改而長大(因為只能讀,binary就不會增加)
FLUSH TABLES WITH READ LOCK;
b. 把datafile copy 和打包 搬到Salve 上去然後解包<不知道大陸是怎麼說解壓縮的咧..呵呵>(targetDB 為目標資料庫)
tar -cjvf targetDB.bz2 /var/lib/mysql/targetDB
然後搬到Slave 上去 ,隨便你用 scp 或是用 rsync 最好是你的Server 上還有開FTP啦
(這是反諷法唷,不要真的開FTP,開了就暈了)
解開放到 /var/lib/mysql 下面
解開語法 tar -jxvf targetDB.bz2
註:請確定 /var/lib/mysql/targetDB 的owner 一定要是 mysql:mysql ,
so 我的作法是 chown -R mysql:mysql /var/lib/mysql/targetDB
C. 這個時候請 Restart Slave
MySQL -u root -e"start Salve"
這個時候如果設定沒有錯誤的話
這一組Replication 就會完成了
d. 在Master & Slave上 分別在MySQL
MySQL>SHOW MASTER STATUS
MySQL>SHOW SLAVE STATUS
如果都正常 的話
e. 在master 上unlock tables
MySQL>UNLOCK TABLES;
Mysql Master 已經可以正程讀寫
請先 登入 以發表留言。