mysql主從複製

1、mysql主從複製原理

對於主服務器來講,會不停的吧當前數據庫中產生的信息記錄進二進制日誌中,如果服務器端接收到客戶端一個需要改變數據的語句之後,這個數據如果採用的是InnoDB的話,這些數據本身首先被記錄進事務日誌,這些會影響數據的語句會被記錄進二進制日誌中,而複製講的是,另外一個從服務器上,被動的接受數據,本身並不接受客戶端鏈接進來做任何寫操作,複製是單向的,只能從主服務器到從服務器,因此,從服務器中的數據都是來自於主服務器,主服務是監聽在3306端口上,從服務器啓動了一個客戶端進程,這個進程會向服務器點提供數據服務的端口發起請求,請求讀取二進制日誌中的事件,在主服務器點上,mysql主要提供認證服務,同時會啓動一個sqldump線程,這個線程在接收到用戶的請求後,並確保這個用戶具有權限之後,會去讀取二進制日誌中的事件,如果客戶端是第一次來請求,那麼這個進程就讀取日誌中的第一個事件,讀一個就發送給客戶端一個,從服務的進程在接收到主服務器發行過來的數據之後,會保存在本地的中繼日誌,然後再啓動一個具有特殊功能的線程,去中繼之日中讀取事件,讀一行,在本地執行一下,以此類推,最終生成本地的數據庫。mysql的複製時異步的,因此在接收到用戶的請求之後,將結果返回給用戶。並將信息存放在內存中,之後再記錄進二進制文件中,這樣會造成從服務器落後與主服務器,但是這樣也是有好處的,如果你有一個錯誤操作,在這個時間內,立即去從服務器上備份數據就OK,這需要mysql管理員把握。

2、mysql主從複製的實現

   [1]首先確保主從服務器上的Mysql版本相同
   [2]在主服務器上操作
       (1)設置一個從數據庫的賬戶,使用REPLICATION SLAVE賦予權限,如:   

mysql> GRANT REPLICATION SLAVE ON *.* TO 'slave001'@'192.168.0.99' IDENTIFIED BY '123456';
mysql> FLUSH PRIVILEGES; 
      (2)修改主數據庫的配置文件my.cnf,開啓BINLOG,並設置server-id的值,修改之後必須重啓Mysql服務 

log-bin = mysql-bin
server-id=10
      (3)之後可以得到主服務器當前二進制日誌名和偏移量,這個操作的目的是爲了在從數據庫啓動後,從這個點開始進行數據的恢復

mysql> show master status\G;
      (4)將主數據庫數據導入到從服務器,可以將數據庫原始文件拷貝過去,也可以通過導出腳本,然後倒入到從服務器中,導出腳本前,爲確保數據一致,需要對主數據庫進行READ LOCK

mysql> flush tables with read lock;
然後進行數據庫導出

mysqldump -h127.0.0.1 -p3306 -uroot -p test > /home/ceshi/test.sql
數據備份好之後,需要對主服務器恢復寫錯做

mysql> unlock tables;

   [3]在從服務器上操作
        (1)將導出的test.sql導入到從數據庫上。
        (2)修改從數據庫的配置文件my.cnf,指定主數據庫的基本信息

server-id      = 20                
read-only = 1  //開啓只讀模式 
        (3)配置從服務器連接主服務器

mysql> CHANGE MASTER TO MASTER_HOST='192.168.0.98', MASTER_USER='slave001', MASTER_PASSWORD='123456', MASTER_LOG_FILE='mysql-bin.000003', MASTER_LOG_POS=107;
mysql> START SLAVE;
         (4)在從服務器進行show salve status驗證

mysql> SHOW SLAVE STATUS\G
如果Slave_IO_Running或者Slave_SQL_Running表示yes,就代表正常
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章