MySQL的主從複製

                           MySQL主從複製

環境:系統內核版本:Linux version 2.6.18-308.el5

Mysql版本: mysql-5.5.28

主服務器IP:172.16.7.1

從服務器IP:172.16.7.2

注意事項:

1.爲了避免循環複製,在主從模型中,任何一臺服務器彼此間都需要一個ID號標識,而且彼此間絕對不能相同。

2.在主服務器上,並不是每個節點都可以到主服務器上面進行同步複製數據的,因此需要在主機上建立密碼帳號,只有持有帳號密碼的用戶纔可以訪問複製數據。

3.從服務器開啓中繼日誌

搭建一個簡單的主從服務器需要如下基本要求:

對主服務器:

1.每個server-id = 要唯一

2.開啓二進制日誌

3.創建一個具有複製權限的用戶帳號

4.設定二進制日誌緩衝區刷寫,每當有二進制日誌更新,就立即同步

對從服務器:

1.每個server-id = 要唯一

2.開啓中繼日誌

3.以中繼用戶連接到主服務器就可以

4.設置爲只讀

如果主服務器已經運行很久了,在主服務器上要創建一個完全備份,而後在從服務器應用此備份,並在連接至主服務器指定二進制日誌文件和其事件位置

操作步驟如下:

主服務器配置:

  1. vim /etc/my.cnf 
  2. datadir = /data/mydata  #數據所在目錄 
  3. server-id = 1   #用於唯一標示自己 
  4. log-bin=/binlog/mysql-bin #二進制日誌所在目錄,將其和數據分開存放 
  5. sync_binlog=1   #同步二進制日誌 

啓動mysqld

  1. service mysqld start 

進入數據庫,給從服務器複製權限

  1. mysql>GRANT REPLICATION CLIENT,REPLICATION SLAVE ON *.* TO rpuser@'172.16.%.%' IDENTIFIED BY 'redhat'
  2. mysql>FLUSH PRIVILEGES; 
  3. mysql>SHOW MASTER STATUS;   //指定從哪兒開始複製 
  4. msql>SHOW BINLOG EVENTS IN 'mysql-bin.000001';  //查看以前的事件 
  5. +------------------+----------+--------------+------------------+ 
  6. | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | 
  7. +------------------+----------+--------------+------------------+ 
  8. | mysql-bin.000001 |      354 |              |                  | 
  9. +------------------+----------+--------------+------------------+ 
  10. 1 row in set (0.00 sec)  //記錄二進制日誌事件發生所在位置 

在從服務器上

安裝mysql,添加系統帳號

修改配置文件

  1. vim /etc/my.cnf 
  2. datadir = /data/mydata 
  3. #log-bin=mysql-bin   //二進制日誌開啓功能註釋掉 
  4. server-id       = 10     //自己的ID號 
  5. relay-log = /relaylog/mysql-relay   //開啓中繼日誌 
  6. relay-log-index = mysql-relay.index //中繼日誌索引 
  7. read-only=1  //從服務器只提供讀的功能,設定爲只讀 

啓動服務

  1. [root@lab ~]#service mysqld start 

進入數據庫,設定主服務器

  1. mysql>CHANGE MASTER TO  master_host='172.16.7.1', master_user='reuser', master_password='redhat', master_port=3306, master_log_file='mysql-bin.000001', master_log_pos=354; 
  2. ###################################### 
  3. master_log_file='mysql-bin.000001' //指定從哪個二進制日誌文件開始複製 
  4. master_log_pos=354    //從二進制日誌複製的位置 

以上的這兩項參數可以通過主服務器中mysql>SHOW MASTER STATUS中獲取

啓動從服務器

  1. mysql>START SLAVE; //默認是兩個線程都啓動的,如果想要啓動一個線程,可以手動指定 
  2. mysql>SHOW SLAVE STATUS\G;//查看從服務器是否啓動成功;查看各服務器中變量是否成功啓用 

驗證:

主服務器:在主服務器上創建數據庫查看從服務器是否正常

查看主服務器狀態

從服務器是否同步

以上是主服務器中沒有數據的情況,假如說從服務器同步主服務器中數據時主服務器中已經存在有數據:

則在同步之前要將主服務器中之前的數據導入到從服務器

Master服務器:

  1. mysqldump --all-databases --lock-all-tables --flush-logs --master-data=2 >/tmp/data.sql 
  2. scp /tmp/data.sql lab1:/tmp 
  3. 並記錄下主服務器現在的二進制日誌及所在位置 
  4. mysql> FLUSH TABLES READ LOCK; 
  5. Query OK, 0 rows affected (0.06 sec) 
  6. mysql> SHOW MASTER STATUS; 
  7. +------------------+----------+--------------+------------------+ 
  8. | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | 
  9. +------------------+----------+--------------+------------------+ 
  10. | mysql-bin.000003 |      107 |              |                  | 
  11. +------------------+----------+--------------+------------------+ 
  12. 1 row in set (0.00 sec) 
  13. mysql> UNLOCK TABLES; 
  14. Query OK, 0 rows affected (0.00 sec) 

Slave服務器:

導入主服務器中原有數據

  1. mysql < /tmp/data.sql  
  2. mysql>CHANGE MASTER TO  master_host='172.16.7.1', master_user='reuser', master_password='redhat', master_port=3306, master_log_file='mysql-bin.000003', master_log_pos=107; 

啓動從服務器即可

mysql>START SLAVE;

以上爲實驗的簡單步驟,僅供各位參考。。

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