2010年5月9日 星期日

MySQL Replication

這邊要做的是簡易版的 db replication. 單純只是想取代傳統用 mysqldump 方式來備份 db.
如果你是想用強大的功能,請參考 MySQL Cluster.
設定非常簡單,目前mysql 版本為 5.1.46, 作業系統是 FreeBSD 7.3-STABLE / 8.0-STABLE
預設先採用 /usr/local/share/mysql/my-large.cnf

# cp /usr/local/share/mysql/my-large.cnf /etc/my.cnf

環境設定目標為,一台 sql master, 一台 slave, master 即時更新資料到 slave.

在此不限定是一台 master, 一台 slave, 可以是一台 master 對多台 slave, 或是多階層架構。

Step1. Master 環境設定
主要在 my.cnf 設定,告訴 SQL server 此次扮演的角色是甚麼,順便設定 replicate 哪個 database

確認底下幾行設定存在於 my.cnf (最低需求)
# cat /etc/my.cnf
log-bin=mysql-bin # mysql 藉由 log 記錄,來進行 replication 工作。
binlog-do-db = 100mountain # 指定要 replication 的資料庫。
server-id = 1 # 指定此機器的角色。

Step2. 建立同步需要的使用者及權限。

mysql> CREATE USER 'db_syncuser'@'%' IDENTIFIED BY 'syncuser_password';
mysql> GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'db_syncuser'@'%';
mysql> FLUSH PRIVILEGES;
mysql> SHOW MASTER STATUS;

Step3. restart mysql master server

# /usr/local/etc/rc.d/mysql-server restart

Step4. Slave 環境設定

# cat /etc/my.cnf (最低需求)
replicate-do-db = 100mountain # 指定 replication 的資料庫。
server-id = 2 # 必須要與 master 不同。

master-host = db_master_ip
master-user = db_syncuser
master-password = syncuser_password

Step5. restart mysql slave server

# /usr/local/etc/rc.d/mysql-server restart

Step6. 測試

確認兩邊皆有 100mountain 這個資料庫
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| 100mountain |
| mysql |
| test |
+--------------------+
4 rows in set (0.00 sec)

確認 master 及 slave 都有正常啟動
mysql> SHOW MASTER STATUS;
mysql> SHOW SLAVE STATUS;

mysql> use 100moutain; # at master
Database changed
mysql> create table dbtest (col1 INT);
Query OK, 0 rows affected (0.01 sec)

mysql> use 100moutain; # at slave
Database changed
mysql> show tables;
+-----------------------+
| Tables_in_100mountain |
+-----------------------+
| dbtest |
+-----------------------+
1 row in set (0.01 sec)

沒有留言:

張貼留言