前言

本文簡單說明如何設定兩台 MySQL server, 讓它們彼此互相備份資料 (Master-master 模式 )。 雖然這樣的設定通常是支援高可用性 (high availability) 平台的一部分 , 但本文不包含如何完成其他 HA 的工作 。 設定兩台 MySQL 伺服器互相備份 , 主要目的就是要確認資料的安全性 ; 同時也提高可用性 。

假設

底下假設兩台伺服器的名稱跟 IP,  分別為 host1(192.168.0.1) 跟 host2(192.168.0.2)。

  • OS: CentOS 6.2
  • MySQL 版本 : 5.1.61

步驟

按照底下小節所描述的步驟 , 逐一完成設定 。

在兩台機器完成 MySQL 軟體基本的安裝

在 CentOS/RHEL 下 , 只需要以 root 執行 :

# yum -y install mysql-server

修改 host1 的 /etc/my.cnf 內容

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
symbolic-links=0

log-bin=/var/log/mysql/mysql-bin.log
#binlog-do-db=<database name>  # input the database which should be replicated
binlog-ignore-db=mysql            # input the database that should be ignored for replication
binlog-ignore-db=test

server-id=1

auto_increment_increment=2
auto_increment_offset=1

[mysqld_safe]

log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

在 host1 建立 MySQL log 的專屬目錄

[email protected]# mkdir -p /var/log/mysql
[email protected]# chown mysql:mysql /var/log/mysql

重開 host1 上的 MySQL 伺服器

[email protected]# /etc/init.d/mysqld restart

建立給 host2 使用的 MySQL 帳戶

使用 MySQL 的命令列客戶端 , 執行下列指令 :

[email protected]#  mysql -u root
mysql> GRANT REPLICATION SLAVE ON *.* TO 'replica2'@'192.168.0.%' IDENTIFIED BY 'password';
mysql> FLUSH PRIVILEGES;
mysql> show master status;
+------------------+-----------+--------------+------------------+
| File             | Position  | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+-----------+--------------+------------------+
| mysql-bin.000004 | 106       |              | mysql,test       |
+------------------+-----------+--------------+------------------+
1 row in set (0.00 sec)
mysql> quit

修改 host2 的 /etc/my.cnf 內容

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
symbolic-links=0

log-bin=/var/log/mysql/mysql-bin.log
binlog-do-db=<database name>  # input the database which should be replicated
binlog-ignore-db=mysql            # input the database that should be ignored for replication
binlog-ignore-db=test

server-id=2

auto_increment_increment=2
auto_increment_offset=2

[mysqld_safe]

log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

在 host2 建立 MySQL log 的專屬目錄

[email protected]# mkdir -p /var/log/mysql
[email protected]# chown mysql:mysql /var/log/mysql

重啟 host2 上的 MySQL

[email protected]# /etc/init.d/mysqld restart

指定 host2 上的 MySQL 的 master 為 host1

注意 'mysql-bin.000004' 跟 106 是來自步驟 5。

[email protected]# mysql -u root
mysql> CHANGE MASTER TO MASTER_HOST='192.168.0.1', MASTER_USER='replica1', MASTER_PASSWORD='password', MASTER_LOG_FILE='mysql-bin.000004', MASTER_LOG_POS=106;

mysql> START SLAVE;
mysql> show master status;
+------------------+-----------+--------------+------------------+
| File             | Position  | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+-----------+--------------+------------------+
| mysql-bin.000001 | 106       |              | mysql,test       |
+------------------+-----------+--------------+------------------+
1 row in set (0.01 sec)

建立給 host1 使用的 MySQL 同步用帳戶

[email protected]#  mysql -u root
mysql> GRANT REPLICATION SLAVE ON *.* TO 'replica2'@'192.168.0.%' IDENTIFIED BY 'password';
mysql> FLUSH PRIVILEGES;
mysql> show master status;
+------------------+-----------+--------------+------------------+
| File             | Position  | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+-----------+--------------+------------------+
| mysql-bin.000001 | 106       |              | mysql,test       |
+------------------+-----------+--------------+------------------+
1 row in set (0.01 sec)
mysql> quit

指定 host1 上的 MySQL 的 master 為 host2

[email protected]# mysql -u root

mysql> CHANGE MASTER TO MASTER_HOST='192.168.0.2', MASTER_USER='replica2', MASTER_PASSWORD='password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=106;

mysql> START SLAVE;

結語

在線的生產環境 (production environment), 如果使用 MySQL 作為資料庫的服務軟體的話 , 常常會設定雙主 (master-master) 備援 。 同時會設置不定數量的 slave 伺服器作為像是遠端備份或者分析資料庫的目的 。


知識不會因為傳播而減少,喜歡這篇文章請幫忙分享。


本篇文章由 Sampot (山姆鍋) 發表,下面是有關他的連結:

評論

您的反饋是我寫作的最大動力,歡迎參與討論。P.S. 我會優先回答張貼在這裡的問題。

comments powered by Disqus