程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> Mysql復制(Replication)的實現

Mysql復制(Replication)的實現

編輯:MySQL綜合教程

Mysql復制(Replication)的實現   個人需要做一個小工程,需要將3台Mysql服務器的數據進行同步操作,經過上網查資料,並進行了實際操作完成了基本構思。           首先准備了3台Centos6.2,搭配了Apache Mysql PHP 等基本Webserver配置           3台機分別是Master A:192.168.1.49  www.2cto.com                             Slave   B1:192.168.1.50                                      B2:192.168.1.51           我需要的環境是單向復制,從復制A的數據到B1和B2.令3台機的數據一致。   配置邏輯:       從高層來看,復制分成三步:     (1)    master將改變記錄到二進制日志(binary log)中(這些記錄叫做二進制日志事件,binary log events);     (2)    slave將master的binary log events拷貝到它的中繼日志(relay log);     (3)    slave重做中繼日志中的事件,將改變反映它自己的數據。   開始配置:  www.2cto.com         第一步:創建復制帳號           每個slave使用標准的MySQL用戶名和密碼連接master。進行復制操作的用戶會授予REPLICATIONSLAVE權限。      用戶名的密碼都會存儲在文本文件master.info中。假如,你想創建repl用戶,如下:           1 mysql> GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* 2 -> TO repl@'192.168.1.%' IDENTIFIED BY '123456';     第二步:配置My.cnf       配置Master的My.cnf,該文件默認位置為/etc/my.cnf           接下來對master進行配置,包括打開二進制日志,指定唯一的servr ID。例如,在配置文件加入如下值:         [mysqld]         log-bin=mysql-bin         server-id=10           重啟master,運行SHOW MASTER STATUS,輸出如下:                  配置Slave的My.cnf,該文件默認位置為/etc/my.cnf           Slave的配置與master類似,你同樣需要重啟slave的MySQL。如下:           log_bin = mysql-bin          server_id = 2   www.2cto.com           relay_log = mysql-relay-bin          log_slave_updates = 1          read_only = 1          server_id是必須的,而且唯一。slave沒有必要開啟二進制日志,但是在一些情況下,必須設置,例如,如果slave為其它slave的master,必須設置bin_log。在這裡,我們開啟了二進制日志,而且顯示的命名(默認名稱為hostname,但是,如果hostname改變則會出現問題)。  relay_log配置中繼日志,log_slave_updates表示slave將復制事件寫進自己的二進制日志(後面會看到它的用處)。 
  有些人開啟了slave的二進制日志,卻沒有設置log_slave_updates,然後查看slave的數據是否改變,這是一種錯誤的配置。所以,盡量使用read_only,它防止改變數據(除了特殊的線程)。但是,read_only並是很實用,特別是那些需要在slave上創建表的應用。       第三步:啟動slave           接下來就是讓slave連接master,並開始重做master二進制日志中的事件。你不應該用配置文件進行該操作,而應該使用CHANGE MASTER TO語句,該語句可以完全取代對配置文件的修改,而且它可以為slave指定不同的master,而不需要停止服務器。如下: 1 mysql> CHANGE MASTER TO MASTER_HOST='192.168.1.49', 2     -> MASTER_USER='repl', 3     -> MASTER_PASSWORD='123456', 4     -> MASTER_LOG_FILE='mysql-bin.000001', 5     -> MASTER_LOG_POS=0;         MASTER_LOG_POS的值為0,因為它是日志的開始位置。然後,你可以用SHOW SLAVE STATUS語句查看slave的設置是否正確:   01 mysql> SHOW SLAVE STATUS\G 02 *************************** 1. row *************************** 03  www.2cto.com                Slave_IO_State: 04                 Master_Host: server1 05                 Master_User: repl 06                 Master_Port: 3306 07               Connect_Retry: 60 08             Master_Log_File: mysql-bin.000001 09         Read_Master_Log_Pos: 4 10              Relay_Log_File: mysql-relay-bin.000001 11               Relay_Log_Pos: 4 12       Relay_Master_Log_File: mysql-bin.000001 13            Slave_IO_Running: No 14           Slave_SQL_Running: No 15                              ...omitted... 16       Seconds_Behind_Master: NULL         Slave_IO_State, Slave_IO_Running, 和Slave_SQL_Running表明slave還沒有開始復制過程。日志的位置為4而不是0,這是因為0只是日志文件的開始位置,並不是日志位置。實際上,MySQL知道的第一個事件的位置是4。   為了開始復制,你可以運行:   01 mysql> START SLAVE; 02 mysql> SHOW SLAVE STATUS\G 03 運行SHOW SLAVE STATUS查看輸出結果: 04 *************************** 1. row *************************** 05              Slave_IO_State: Waiting for master to send event 06  www.2cto.com                   Master_Host: server1 07                 Master_User: repl 08                 Master_Port: 3306 09               Connect_Retry: 60 10             Master_Log_File: mysql-bin.000001 11         Read_Master_Log_Pos: 164 12              Relay_Log_File: mysql-relay-bin.000001 13               Relay_Log_Pos: 164 14       Relay_Master_Log_File: mysql-bin.000001 15            Slave_IO_Running: Yes 16           Slave_SQL_Running: Yes 17                              ...omitted... 18       Seconds_Behind_Master: 0 注意,slave的I/O和SQL線程都已經開始運行,而且Seconds_Behind_Master不再是NULL。日志的位置增加了,意味著一些事件被獲取並執行了。如果你在master上進行修改,你可以在slave上看到各種日志文件的位置的變化,同樣,你也可以看到數據庫中數據的變化。   你可查看master和slave上線程的狀態。在master上,你可以看到slave的I/O線程創建的連接:   01 mysql> show processlist \G 02 *************************** 1. row *************************** 03      Id: 1 04    User: root 05    Host: localhost:2096 06      db: test  www.2cto.com   07 Command: Query 08    Time: 0 09  State: NULL 10    Info: show processlist 11 *************************** 2. row *************************** 12      Id: 2 13    User: repl 14    Host: localhost:2144 15      db: NULL 16 Command: Binlog Dump 17    Time: 1838  www.2cto.com   18  State: Has sent all binlog to slave; waiting for binlog to be updated 19    Info: NULL 20 2 rows in set (0.00 sec) 基本到這裡就完成,至於後期的加強操作,我會在另行添加。   測試過程要主要的問題: 1.請先配置好Mysql 2.開通復制前請將Mysql的庫和表的框架復制過去。(在測試一下能不能連表都復制過去!)       作者 Tingel

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved