mysql replication 互爲主從的安裝及配置,以及數據同步

一,mysql replication是什麼,幹什麼用的

MySQL replication提供了數據庫複製的功能,可以實現多個數據庫實時同步,具體如果下圖:

mysql replication 數據同步

mysql replication 數據同步

我們爲什麼要用mysql replication呢,當你的網站一天的獨立IP流量能達到100W時,全部流量能達到1000W時,單個服務器,根本無法滿足現有需要,100W,1000W就是舉個例子。儘管你做了許多的技術上面的措施,比如內存緩存(如memcache),文件緩存啊,對於大數據量表進行分表啊等等,還是網站還是挺慢的(這可能有多方面原因),在這兒只是以MYSQL爲例。

二,mysql replication 的安裝和配置


1)在192.168.1.91上修改my.ini(主機/master)

日誌文件必須設置

a,在192.168.1.91上修改mysql的配置文件my.ini,master是windows系統

  1. server-id=1  
  2. binlog-do-db=test1  
  3. auto_increment_offset= 2  
  4. log-bin=d:/wamp/mysql/master-bin.log  
  5. log-bin-index = d:/wamp/mysql/master-log-bin.index  
  6. log-error = d:/wamp/mysql/master-error.log  
  7. relay-log = d:/wamp/mysql/slave-relay.log  
  8. relay-log-info-file = d:/wamp/mysql/slave-relay-log.info  
  9. relay-log-index = d:/wamp/mysql/slave-relay-log.index  
  10. set-variable=max_connections=500  

b, 其次仍然在該區域修改, 配置爲以該機爲slave

  1. master-host=192.168.1.5  
  2. master-user=xtajmd  
  3. master-password=xtajmd  
  4. master-port=3306  
  5. master-connect-retry=60  
  6. replicate-do-db=test1  
  7. log-slave-updates  

解釋:

server-id=1表示是本機的序號爲1,一般來講就是master的意思.

binlog-do-db=test1表示需要備份的數據庫是test這個數據庫,

replicate-do-db=test1 表示同步test數據庫;

如果需要備份多個數據庫,那麼應該寫多行,如下所示:

binlog-do-db=test1

binlog-do-db=test2

binlog-do-db=test3

log-bin表示打開binlog,打開該選項纔可以通過I/O寫到Slave的relay-log,也是可以進行replication的前提;

auto_increment_increment定義下一次AUTO_INCREMENT的步長

auto_increment_offset= 1定義AUTO_INCREMENT的起點值

這兩個參數用於避免多master情況下,多個master同時存取字段類型爲AUTO_INCREMENT的衝突。其它幾個字段爲日誌文件配置信息

set-variable=max_connections=500 設定數據庫最大連接數爲500

master-host=192.168.1.91 表示本機做slave時的master爲192.168.1.91;

master-user=xtajmd 這裏表示master(192.168.1.91)上開放的一個有權限的用戶,使其可以從slave連接到master並進行復制; 建議兩臺主機的授權用戶和密碼完全相同。

master-password=xtajmd 表示授權用戶的密碼;

master-port=3306 表示master(192.168.1.91)上MySQL服務Listen3306端口;

master-connect-retry=60 同步間隔時間;

log-slave-updates:從master讀到的更新操作都記錄到slave二進制日誌中

3)在192.168.1.5上修改my.cnf(slove/從)

vi my.cnf

找到

# The MySQL server
[mysqld]

在mysqld裏面加上以下部分

  1. server-id=2                                     #表示本機序號,不要和主機相同  
  2. binlog-do-db=test1  
  3. log-bin=/usr/local/mysql/master-bin.log  
  4. log-bin-index = /usr/local/mysql/master-log-bin.index  
  5. log-error = /usr/local/mysql/master-error.log  
  6. relay-log = /usr/local/mysql/slave-relay.log  
  7. relay-log-info-file = /usr/local/mysql/slave-relay-log.info  
  8. relay-log-index = /usr/local/mysql/slave-relay-log.index  
  9. set-variable=max_connections=500  
  10. master-host=192.168.1.91  
  11. master-user=xtajmd  
  12. master-password=xtajmd  
  13. master-port=3306  
  14. master-connect-retry=60  
  15. replicate-do-db=test1  
  16. log-slave-updates  

4),準備二個一樣的數據庫


5) 建立賬戶,分配權限

在192.168.1.91和192.168.1.5上使用mysql登陸,分別操作如下操作:

GRANT FILE,SELECT,REPLICATION SLAVE ON *.* TO  xtajmd@'%' IDENTIFIED BY 'xtajmd';

flush

在192.168.1.91和192.168.1.5上分別測試所添加用戶能否正常登陸另外一臺服務器。

在192.168.1.5上:mysql -u xtajmd -p -h 192.168.1.91

在192.168.1.91上:mysql -u xtajmd -p -h 192.168.1.5


注意:

如果二臺linux系統間的數據同步的話,請確認兩臺服務器上iptables的3306端口已經開通,以保證通信正常。

如果是windows和linux系統間的數據同步的話,確保linux服務器上iptables的3306端口已經開通,windows下面防火牆,殺毒軟件是不是允許外界通過3306來連接本地數據庫

6) 二臺服務器都重起mysql,查master,slave狀態,以及注意問題

在192.168.1.91上

mysql> show master status;
+-------------------+----------+--------------+------------------+
| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
master-bin.000072 |       98 | test1        |                  |
+-------------------+----------+--------------+------------------+
1 row in set (0.00 sec)


在192.168.1.5上

mysql> show slave status\G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.1.91
Master_User: xtajmd
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: master-bin.000072
Read_Master_Log_Pos: 98
Relay_Log_File: slave-relay.000330
Relay_Log_Pos: 244
Relay_Master_Log_File: master-bin.000072
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB: test1
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:


老實說,我在本地配置成功成功以後, show master status的結果都是空。反而在兩臺服務器上都能使用show slave status\G;命令都能成功。



注意:在這裏Slave_IO_State:後面有可能沒有任何參數,或者是Waitting to connect

我們一定要確保,master裏面File和Master_Log_File內容是一樣的,position和Read_Log_File_Pos要一樣的。

反過來也要一樣。如果不一樣怎麼辦呢?如下

解決步驟:
重啓master庫:
mysql> show master status;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000072 |       98 |      test1        |                  |
+------------------+----------+--------------+------------------+
mysql> slave stop;
mysql> change master to Master_Log_File='mysql-bin.000072',Master_Log_Pos=98;
mysql> slave start;
mysql> show slave status\G

到這裏基本上算是配置好了,現在測試一下吧

轉自(海底蒼鷹的博客,http://blog.51yip.com/mysql/357.html)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章