主從同步原理
master_slave.jpg
執(zhí)行過程如下:
1. master在每個事務(wù)更新數(shù)據(jù)完成之前闷哆,將該操作記錄串行化的寫入到`BinaryLog`文件中
2. slave開啟一個`I/O`線程呀伙,該線程會和主庫建立一個普通的客戶端連接颈娜,然后在主庫上啟動一個特殊的二進制轉(zhuǎn)儲(binlog dump)線程爬骤,這個二進制轉(zhuǎn)儲線程會讀取主庫上二進制日志文件中的 事件辐啄。并將這些事件寫入到從庫的中繼日志`RelayLog`中楣导。需要注意的是這個二進制轉(zhuǎn)儲線程讀取日志文件的進度如果趕上了主庫烦租,它將進入睡眠狀態(tài)豺鼻,知道主庫發(fā)送信號量通知其有新的事件產(chǎn)生才會被喚醒沫勿。
3. `SQL Thread`會讀取中繼日志挨约,并順序執(zhí)行該日志中的sql事件味混,從而保證和主庫的數(shù)據(jù)一致。
主庫配置:
修改主庫的my.cnf 在[mysqld]
下新增配置
#-------------------------master上配置主從-------------------
# server-id 唯一的服務(wù)辨識號,數(shù)值位于 1 到 2^32-1之間.
# 此值在master和slave上都需要設(shè)置.
# 如果 “master-host” 沒有被設(shè)置,則默認為1, 但是如果忽略此選項,MySQL不會作為master生效.
server-id = 1 #[必須]服務(wù)器唯一ID诫惭,默認是1
#log-bin 打開二進制日志功能.
#在復制(replication)配置中,作為MASTER主服務(wù)器必須打開此項
#如果你需要從你最后的備份中做基于時間點的恢復,你也同樣需要二進制日志.
log-bin = mysql-bin #[必須]啟用二進制日志
#需要開啟生成二進制日志記錄相關(guān)配置翁锡,配置在需要被復制的服務(wù)器上,即:master
binlog-do-db = my_test1 #指定對名稱為test_db的數(shù)據(jù)庫記錄二進制日志
# binlog-ignore-db = mysql #指定不對名稱為mysql的數(shù)據(jù)庫記錄二進制日志
# binlog-ignore-db = information_schema #指定不對名稱為information_schema的數(shù)據(jù)庫記錄二進制日志
binlog_format = mixed #binlog日志格式夕土,mysql默認采用馆衔,如果從服務(wù)器slave有別的slave要復制那么該slave也需要這一項
expire_logs_days = 7 #超過7天的binlog刪除
查看主庫配置狀態(tài)
show master status
出現(xiàn)如下狀態(tài)則配置成功
master.png
配置好后重啟mysql
在從庫中配置
修改從庫的my.cnf 在[mysqld]
下新增配置
# -----------------------slave上的主從配置-------------
# server-id 唯一的服務(wù)辨識號,數(shù)值位于 1 到 2^32-1之間.
# 此值在master和slave上都需要設(shè)置.
# 如果 “master-host” 沒有被設(shè)置,則默認為1, 但是如果忽略此選項,MySQL不會作為master生效.
server-id = 2 #[必須]服務(wù)器唯一ID,默認是1
# replicate-do-db 需要做復制的數(shù)據(jù)庫,如果復制多個數(shù)據(jù)庫怨绣,重復設(shè)置這選項即可master上不需要此項角溃,slave上需要
replicate-do-db = my_test1 #復制名稱為test_db的數(shù)據(jù)庫
# replicate-ignore-db 不需要復制的數(shù)據(jù)庫,如果要忽略復制多個數(shù)據(jù)庫篮撑,重復設(shè)置這個選項即可
# replicate-ignore-db = mysql #不需要(忽略)復制名稱為mysql的數(shù)據(jù)庫
執(zhí)行同步命令
在從庫的客戶端執(zhí)行命令
# 設(shè)置主服務(wù)器ip减细,同步賬號密碼,同步位置
change master to master_host='192.168.171.123' , master_port=3001,
master_user='root',master_password='123456',
master_log_file = 'mysql-bin.000002',master_log_pos=2170;
# 開啟同步功能
start slave;
查看從服務(wù)器狀態(tài):
show slave status
出現(xiàn)如下則表示成功
slave.png
配置好后就可以在主庫中建表咽扇,執(zhí)行插入邪财、修改、刪除操作來驗證主從是否配置成功