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
★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配置文件
log-bin=mysql-bin 啓動二進制文件
#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
log-bin=mysql-bin 啓動二進制文件
#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、測試同步
在主服務器上創建一個表,查看備服務器,如果有說明同步成功!!!
———<完>—