建立一個MySQL伺服器的備援(M/S Replication)

如果目前服務的MySQL只有一台,卻沒有備援機制,是一件非常危險的事。哪天主機壞了,硬碟壞了,所有資料都付之一炬。因此就必需要建立一個能備援資料的機制。
這次建立的環境為內網一台主要(Master)跟次要(Slave)的MySQL,次要機器為養機千日用在一時的備用。
要建立的步驟大約為以下幾點:
在Master要做的事

  • 建立同步資料用的帳號
  • 於my.cnf設定master該有的設定參數
  • 重啟MySQL以啟用設定

在Slave要做的事

  • 於my.cnf設定slave該有的設定參數
  • 將同步帳號輸入進slave中
  • 重啟MySQL以啟用設定

Master主機資訊: FreeBSD 9 , Mysql 50 server , if : 192.168.101.141
Slave 主機資訊: FreeBSD 9 , Mysql 50 server , if : 192.168.101.142

in Master
進入Master修改my.cnf,如果找不到my.cnf,就到/usr/local/share/mysql/my-large.cnf給它cp一份到/etc/my.cnf。
一般來說,你複製過來的設定檔已經是完整的了,只要查詢以下的設定是否有打開或是參數是否有正確。
[cc lang=”bash”]
[mysqld]
server-id=1
log-bin=mysql-bin
innodb_flush_log_at_trx_commit=1
[/cc]
重啟MySQL
[cc lang=”bash”]
$ /usr/local/etc/rc.d/mysql-server restart
[/cc]
然後進入msql的命令列新增同步用的使用者帳號
[cc lang=”bash”]
mysql>create user syncer@192.168.101.142;
mysql>grant replication slave on *.* to syncer@192.168.101.142 identified by ‘abc123’;
[/cc]
先鎖定主機,以查詢二進制的相關資料
[cc lang=”bash”]
mysql>flush tables with read lock;
mysal>show master status;
[/cc]
大概會出現像這樣的資訊

一定要記住File跟Position
然後釋放主機鎖定功能
[cc lang=”bash”]
mysql>unlock tables;
[/cc]

in Slave
修改Slave的my.cnf,其中的server-id不可以跟Master一樣,盡量小點的數字,不用太多。
[cc lang=”bash”]
server-id=2
relay-log-index=slave-relay-bin.index
relay-log=slave-relay-bin
[/cc]
完成之後,重啟MySQL,並進入命令列。
[cc lang=”bash”]
mysql>slave stop;
mysql>change master to master_host=’192.168.1.141′,
->master_user=’syncer’,
->master_password=’abc123′,
->master_log_file=’mysql-bin.000006′,
->master_log_pos=1951;
[/cc]
記得master_log_file與master_log_pos都是剛才在Master的show master status所得的資訊。
然後,開啟slave機制。
[cc lang=”bash”]
mysql>start slave;
[/cc]
重看slave的狀態
[cc lang=”bash”]
mysql>show slave status\G
[/cc]
只要看到Slave_IO_Running: Yes 跟 Slave_SQL_Running: Yes 都表示皆在運作中。所以你就可以在Master試一下編修資料。照理來說,你的Slave就會即時吸取你所修改的資料進來了,因此你就得到一台一模一樣的第二台Mysql,並為你的資料做備援的準備以便未來保障你的資訊。
如果你在Slave做change master時輸入錯了相關的資訊,可以使用
[cc lang=”bash”]
STOP SLAVE;
RESET SLAVE;
[/cc]
將Slave的資訊重新設定。