總網頁瀏覽量

2013年2月4日 星期一

Mysql資料複寫

複寫:當一個資料庫(master)更動資料,另一個資料庫(slave)也會跟著更動資料,達到兩邊資料同步。

步驟
1. 在 Master 伺服器建立資料複寫的專用帳號。
GRANT REPLICATION SLAVE ON *.* TO repl IDENTIFIED BY '密碼';
讓repl可以針對所有資料,進行複寫
並且設定密碼。

2. 啟用 Master 伺服器的 binary log 功能。為 Master 與 Slave 伺服器設定唯一的伺服器編號。
Master 的 my.ini 設定檔:
[mysqld]
log-bin=mysql-bin    (複寫靠這個運作)
server-id=1  (靠id 識別主機)
Slave 的 my.ini 設定檔:
[mysqld]
server-id=2

3.重新啟動 兩個MySQL 服務。
4. 記錄 Master 伺服器 binary log 的位置序號。
//FLUSH TABLES WITH READ LOCK;

//如果有做資料更新,或者master要做備份,則可以打上上面指令將資料庫lock住,如此一來master不能create  database,其他人也無法更動資料。

SHOW MASTER STATUS;
結果如下:
File             | Position |
-----------------+----------+
mysql-bin.000001 |      106 |

如果slave的資料是由master 複製貼上,則可以跳過5,6點。前面有打上readlock指令務必要Unlock tables;

5. 備份 Master 伺服器的資料庫。
C:\>mysqldump -u root -pPa$$w0rd -P 3306 --all-databases --lock-all-tables > c:\Lab\dbdump.sql
如果上面有執行read lock指令務必記得
UNLOCK TABLES;

6. 將備份檔複製到 Slave 伺服器並且回存到 Slave 伺服器。
source c:\Lab\dbdump.sql

7. 在 Slave 伺服器設定他的master,並啟用資料複寫,例如:
CHANGE MASTER TO
  MASTER_HOST='主機名稱' 或 'IP:port',
  MASTER_USER='repl',//登入master主機的帳號
  MASTER_PASSWORD='密碼',
  MASTER_LOG_FILE='mysql-bin.000001',
  MASTER_LOG_POS=106;
START SLAVE;

沒有留言:

張貼留言