Mysql主從複製

mysql主從複製原理:

mysql的主從複製是一個異步複製的過程,從一個主(master)的複製到另一個備(salve)的。在主備之間實現複製過程的主要有三個線程來完成,其中兩個線程(sql線程和IO線程)在備端,另一個線程(IO線程)在主端。

要實現主備之間的複製,首先要打開master端的二進制日誌(mysql.bin.xxxxxx)功能。因爲整個複製過程實際上就是slave從master端獲取該日誌然後在自己身上按照順序vde執行日誌中所記錄的各種操作。

打開mysql的二進制日誌可以通過在啓動mysql server的過程中使用“-log-bin”參數選項,或者在my.cnf配置文件中的mysqld參數組([mysqld]標識後的參數部分)增加“log-bin”參數項。如:log-bin=mysql-bin

1、mysql的複製過程

★slave上的IO線程連接上master,並要求從指定日誌文件的指定位置之後的日誌內容;

★master接收到來自slave的IO線程的請求後,通過負責複製的IO線程根據請求信息,返回給slave端的IO線程。返回信息中除了日誌包含的信息之外,還包括本次返回的信息在master端的二進制日誌文件的名稱以及在二進制日誌中的位置;
★slave的IO線程接收到信息後,將接收到的日誌內容依次寫入到slave端的relaylog文件(mysql-relar-bin.xxxxxx)的最末端,並讀取到master端的bin-log的文件名和位置記錄到master-info文件中,以便在下一次讀取的時候能夠清楚的告訴master需要將某個bin-log的哪個位置開始之後的日誌內容;
★slave的sql線程檢測到relay log中新增加了內容後,會馬上解析該log日誌文件的內容成爲master端真實執行時候的那些可執行的Query語句,並在自身執行這些Query語句。這樣就是在master和slave執行同樣的Query,所以兩端的數據完全一樣。
2、mysql主從複製實現過程
環境介紹:
服務器名 IP地址 數據庫版本 Data目錄
master 192.168.2.98 msyql5.5.24 /darren/app/mysql/data/
slave 192.168.2.133 mysql5.5.24 /darren/app/mysql/data/
3、master端設置
★修改my.cnf配置文件
[mysqld]

log-bin=mysql-bin 啓動二進制文件

server-id=1 服務器ID

#binlog-do-db=test需要同步的二進制數據庫名

#binlog-ignore-db=mysql不需要同步的二進制數據庫,如果不需要可註釋掉
★重啓mysql
/etc/init.d/mysqld restart
★建立slave複製所需要的帳號,並授權給slave服務器
mysql> grant replication slave on *.* to 'backup'@'192.168.2.133'  identified by 'backup';
★設置讀鎖,清除寫入操作
mysql>flush tables with read lock;
★獲得二進制日誌文件名和偏移量
mysql> show master status;

★備份數據庫

mysqldump  test >  test.sql

★解鎖

mysql>unlock tables;

4、slave端設置

還原master端備份的數據庫

★修改my.cnf配置文件

[mysqld]

log-bin=mysql-bin 啓動二進制文件

server-id=2 服務器ID

#binlog-do-db=test需要同步的二進制數據庫名

#binlog-ignore-db=mysql不需要同步的二進制數據庫,如果不需要可註釋掉
★執行同步
mysql> change master to master_host='192.168.2.98',  master_user='backup', master_password='backup' ,master_log_file='mysql-bin.000165' ,master_log_pos=6170;
★啓動備服務器的slave線程
mysql> start slave;
★驗證
mysql> show slave status\G;
看到上面2個yes說明同步成功
5、測試同步
在主服務器上創建一個表,查看備服務器,如果有說明同步成功!!!
———<完>—

 

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