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

Mysql主從復制技術(親測)

編輯:MySQL綜合教程

Mysql主從復制技術(親測)   開始配置: www.2cto.com       第一步:創建復制帳號          每個slave使用標准的MySQL用戶名和密碼連接master。進行復制操作的用戶會授予
REPLICATIONSLAVE權限。       用戶名的密碼都會存儲在文本文件master.info中。假如,你想創建repl用戶,如下      mysql> GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO repl@'192.
168.1.%' IDENTIFIED BY '123456';      第二步:配置My.cnf      配置Master的My.cnf,該文件默認位置為/etc/my.cnf            接下來對master進行配置,包括打開二進制日志,指定唯一的servr ID。例如,在配置文件
加入如下值:          [mysqld]          server-id=1          log-bin=mysql-bin            重啟mysql,service mysql restart ,          登錄mysql -uroot -p          運行SHOW MASTER STATUS,輸出如下:  +------------------+----------+--------------+------------------+          | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |          +------------------+----------+--------------+------------------+          | mysql-bin.000002 |      106 |              |                  |          +------------------+----------+--------------+------------------+          1 row in set (0.00 sec)        配置Slave的My.cnf,該文件默認位置為/etc/my.cnf          Slave的配置與master類似,你同樣需要重啟slave的MySQL。如下:           server-id = 2          log-bin = mysql-bin          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上創建表的應用。          重啟mysql,service mysql restart ,          登錄mysql -uroot -p        第三步:啟動slave    www.2cto.com           接下來就是讓slave連接master,並開始重做master二進制日志中的事件。你不應該用配置
文件進行該操作,而應該使用CHANGE MASTER TO語句,該語句可以完全取代對配置文件的修改,
而且它可以為slave指定不同的master,而不需要停止服務器。如下:          mysql>CHANGE MASTER TO MASTER_HOST='192.168.60.73',MASTER_USER='repl',MASTER_PASSWORD='123456',MASTER
_LOG_FILE='mysql-bin.000002',MASTER_LOG_POS=0;          MASTER_LOG_POS的值為0,因為它是日志的開始位置。然後,你可以用SHOW SLAVE STATUS
語句查看slave的設置是否正確:          mysql> SHOW SLAVE STATUS\G  *************************** 1. row ***************************               Slave_IO_State:                  Master_Host: server1                  Master_User: repl                  Master_Port: 3306                Connect_Retry: 60               Master_Log_File: mysql-bin.000001               Read_Master_Log_Pos: 4               Relay_Log_File: mysql-relay-bin.000001                Relay_Log_Pos: 4               Relay_Master_Log_File: mysql-bin.000001              Slave_IO_Running: No              Slave_SQL_Running: No                               ...omitted...          Seconds_Behind_Master: NULL          Slave_IO_State, Slave_IO_Running, 和Slave_SQL_Running表明slave還沒有開始復制過程。
日志的位置為4而不是0,這是因為0只是日志文件的開始位置,並不是日志位置。實際上,MySQL知
道的第一個事件的位置是4。    為了開始復制,你可以運行:  mysql> START SLAVE;  mysql> SHOW SLAVE STATUS\G  運行SHOW SLAVE STATUS查看輸出結果:  *************************** 1. row ***************************          Slave_IO_State: Waiting for master to send event                  Master_Host: server1                  Master_User: repl                  Master_Port: 3306                 Connect_Retry: 60                 Master_Log_File: mysql-bin.000001                 Read_Master_Log_Pos: 164                Relay_Log_File: mysql-relay-bin.000001                Relay_Log_Pos: 164                Relay_Master_Log_File: mysql-bin.000001                Slave_IO_Running: Yes                Slave_SQL_Running: Yes                               ...omitted...        Seconds_Behind_Master: 0  注意,slave的I/O和SQL線程都已經開始運行,而且Seconds_Behind_Master不再是NULL。日志
的位置增加了,意味著一些事件被獲取並執行了。如果你在master上進行修改,你可以在slave上看
到各種日志文件的位置的變化,同樣,你也可以看到數據庫中數據的變化。    你可查看master和slave上線程的狀態。在master上,你可以看到slave的I/O線程創建的連接:    mysql> show processlist \G  *************************** 1. row ***************************       Id: 1     User: root     Host: localhost:2096       db: test  Command: Query     Time: 0   State: NULL     Info: show processlist  *************************** 2. row ***************************       Id: 2     User: repl     Host: localhost:2144       db: NULL  Command: Binlog Dump     Time: 1838   State: Has sent all binlog to slave; waiting for binlog to be updated     Info: NULL  2 rows in set (0.00 sec)  基本到這裡就完成,至於後期的加強操作,我會在另行添加。    www.2cto.com   Mysql復制的時候可以做到限制復制(主)  binlog-do-db=work      #只復制  binlog_ignore_db=mysql    #不允許復制     Replicate_Do_DB=mysql  replicate-ignore-db=mysql  另外還有幾條常用的命令  flush mater;  #清除垃圾  flush slave;  #清除垃圾  start slave;  #開始服務  reset slave;  #重設服務  stop slave;   #停止服務     上面復制方式是假設在新設Master和slave的情況下,實際環境並不十分實用,例如,你在一
組運行了很久的Master中加入一個新的slave呢?  這樣我們就需要優先進行數據處理。  1.現將Master的數據庫鎖定,以免數據復制的時候出現差異。  FLUSH TABLES WITH READ LOCK;  2. 在另一個連接用mysqldump創建一個你想進行復制的數據庫的轉儲:  shell> mysqldump --all-databases --lock-all-tables >dbdump.db  3. 對表釋放鎖。   mysql> UNLOCK TABLES;  上面方法中,第2部需要將數據庫復制到新slave中還原,這樣,Master和新Slave的數據源就一致。  其實第2部的方法有很多,也可以使用Mysql軟件進行同步,例如:Navicat for Mysql   方法不是唯一,只要結果一致即可。  4.完成舊數據同步後,Master中輸入   www.2cto.com   mysql> show master status;  ##得到:  +------------------+----------+--------------+---------------------------+  | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB          |  +------------------+----------+--------------+---------------------------+  | mysql-bin.000024 |    38113 |              | mysql,test |    1 row in set (0.00 sec)  5.然後在根據上表中內容輸入上文啟動Slave步驟的內容。  CHANGE MASTER TO MASTER_HOST='192.168.60.73',MASTER_USER='repl',MASTER_PASSWORD='123456',
MASTER_LOG_FILE='mysql-bin.000002',MASTER_LOG_POS=0;  6.啟動slave  START SLAVE;  7.啟動完成後進行檢查。  mysql> SHOW SLAVE STATUS\G                                                        ***************************
1. row ***************************                 Slave_IO_State: Waiting for master to send event                    Master_Host: 192.168.1.171                    Master_User: repl                    Master_Port: 3306                  Connect_Retry: 60                Master_Log_File: mysql-bin.000024                Read_Master_Log_Pos: 38255                 Relay_Log_File: mysql-relay-bin.000002                  Relay_Log_Pos: 393                Relay_Master_Log_File: mysql-bin.000024               Slave_IO_Running: Yes              Slave_SQL_Running: Yes                Replicate_Do_DB:            Replicate_Ignore_DB: mysql,wdcpdb,mysql,wdcpdb             Replicate_Do_Table:         Replicate_Ignore_Table:        Replicate_Wild_Do_Table:          Replicate_Wild_Ignore_Table:                     Last_Errno: 0                     Last_Error:                   Skip_Counter: 0            Exec_Master_Log_Pos: 38255                Relay_Log_Space: 548                Until_Condition: None                 Until_Log_File:                  Until_Log_Pos: 0             Master_SSL_Allowed: No             Master_SSL_CA_File:             Master_SSL_CA_Path:               Master_SSL_Cert:              Master_SSL_Cipher:                 Master_SSL_Key:          Seconds_Behind_Master: 0  Master_SSL_Verify_Server_Cert: No            Last_IO_Errno: 0                  Last_IO_Error:                 Last_SQL_Errno: 0                 Last_SQL_Error:  1 row in set (0.00 sec)  完成    www.2cto.com   測試過程要主要的問題:    1.請先配置好Mysql  2.開通復制前請將Mysql的庫和表的框架復制過去。 (在測試一下能不能連表都復制過去!)   

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