主從機制實現原理
(1) master將改變記錄到二進制日誌(binary log)中(這些記錄叫作二進制日誌事件,binary log events); (2) slave將master的binary log events拷貝到它的中繼日誌(relay log); (3) slave重作中繼日誌中的事件,將改變反映它本身的數據。
主庫配置
修改[mysqld]mysql
[mysqld] server-id=1 -- 給數據庫服務的惟一標識,通常爲你們設置服務器Ip的末尾號 log-bin=mysql-bin -- 啓動二進制日誌名稱
查看日誌,File是二進制日誌文件名,Position 是日誌開始的位置。這兩個參數後面要用的到sql
SHOW MASTER STATUS; show master status;
重啓mysql服務數據庫
主庫中添加帳號使從庫使用服務器
-- 設置賦值權限 grant replication slave on *.* to 'chaoge'@'192.168.178.130'; --檢查受權帳號的權限 show grants for chaoge@'192.168.178.130';
從庫配置
[mysqld] server-id=3
重啓數據庫測試
systemctl restart mariadb 或者 systemctl restart mysql
檢查Slava從數據庫中的參數spa
show variables like 'log_bin'; --OFF show variables like 'server_id';
配置賦值參數, Slave從數據庫鏈接Master主庫的配置rest
change master to master_host='192.168.178.129', -- 主庫ip master_user='chaoge', -- 主庫用戶 master_password='redhat', -- 主庫密碼 master_log_file='mysql-bin.000001', -- 上面主庫查出來的那個File master_log_pos=575; -- -- 上面主庫查出來的那個Position
啓動從庫同步開關日誌
start slave;
查看複製狀態code
show slave status\G;
檢查Slave_IO_Running和Slave_SQL_Running兩個參數, 都是yes說明能夠了server
錯誤排查
按照順序通常是遇不到問題的, 我本身在測試中遇到了一個問題是主庫防火牆沒有關, Slave_IO_Running總顯示Connecting