您好,登錄后才能下訂單哦!
MySQL主從復制(也稱A/B復制)的原理
(1) Master將數據改變記錄到二進制日志(binary log)中,也就是配置文件log-bin指定的文件,這些記錄叫做二進制日志事件(binary log events);
(2) Slave通過I/O線程讀取Master中的binary log events并寫入到它的中繼日志(relay log);
(3) Slave重做中繼日志中的事件,把中繼日志中的事件信息一條一條的在本地執行一次,完成數據在本地的存儲,從而實現將改變反映到它自己的數據(數據重放)。
主從配置需要注意的點
(1)主從服務器操作系統版本和位數一致;
(2) Master和Slave數據庫的版本要一致;
(3) Master和Slave數據庫中的數據要一致;
(4) Master開啟二進制日志,Master和Slave的server_id在局域網內必須唯一;
1. master服務器配置
1.1 在master 服務器授權一個賬戶,擁有slave權限
mysql > GRANT REPLICATION SLAVE ON *.* TO 'username'@'IP' IDENTIFIED BY 'password';
mysql > FLUSH PRIVILEGES;
★ 其中 IP 可以為模糊匹配,如192.168.1.% 或具體某個IP
1.2. 修改mysql配置文件,my.ini (windows)或 my.cnf(Linux)找到[mysqld] 標記,下方添加
// 如果server-id-0 則會拒絕所有從庫鏈接
server-id=1 // 一般用當前服務器ip的最后ip端標記
// binlog日志
log-bin=master-bin
// binlog的索引文件(此項不配置也可,mysql會自動根據上面配置,在后綴加上.index)
log-bin-index=master-bin.index
# 復制過濾:需要備份的數據庫,輸出binlog 多個數據庫,添加多條即可
binlog-do-db=test
# 復制過濾:不需要備份的數據庫,不輸出(mysql庫一般不同步,多個數據庫,添加多條即可)
binlog-ignore-db = mysql
binlog-ignore-db = test
binlog-ignore-db = information_schema
# 為每個session 分配的內存,在事務過程中用來存儲二進制日志的緩存(可不配)
binlog_cache_size=1M
# 主從復制的格式(mixed,statement,row,默認格式是statement)
binlog_format=mixed
# 二進制日志自動刪除/過期的天數。默認值為0,表示不自動刪除。
expire_logs_days=7
1.3 可以查看日志
mysql > SHOW MASTER STATUS;
+-------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| master-bin.000001 | 1285 | | |
+-------------------+----------+--------------+------------------+
1.4 重啟master 的mysql服務
2. 在另一個mysql上配置從服務器
2.1 找到my.ini (windows) 或 my.cnf (linux),找到[mysqld]標記,更改如下配置
// 一般同理,是當前及其的ip最后段
server-id=2
// 從庫日志索引
relay-log-index=slave-relay-bin.index
relay-log=slave-relay-bin
// 從庫要執行同步的數據庫,多個數據庫寫多個replicate_do_db
replicate-do-db=test
replicate-ignore-db=mysql
replicate-do-table
2.2 重啟mysql ?執行
start slave,
可以使用 show slave status查看運行狀態
2.3 執行從庫配置 每次重啟mysql均需要執行(如果沒有開啟自動啟動主從)
然后在每個從庫服務器上執行如下語句:
mysql> change master to master_host='192.168.1.205',master_user='username',master_password='password',master_port=3306,master_log_file='edu-mysql-bin.00000x',master_log_pos=xx,master_connect_retry=30;
解釋:
//?master的ip地址 mysql>?change?master?to?master_host='192.168.1.205', //?master授權的用戶 master_user='username', //?master的授權用戶密碼 master_password='password', //?master的訪問端口??不要帶引號,必須是整型,否則會報錯 master_port=3306, //?master的binlog日志名稱,這里使用上述“1.3”命令搜索出來的為準 master_log_file='edu-mysql-bin.00000x', //?master的日志位置?這里使用上述“1.3”命令搜索出來的為準,不能帶引號,必須是整型,否則會報錯 master_log_pos=xx, //?重試時間、單位秒 master_connect_retry=30;
2.4 啟動主從進程
mysql > start slave;
2.5 可以檢查從庫狀態
mysql > show slave status \G
只要出現如下兩個yes,即表示主從通信正常
主從同步可能遇到的問題
基于局域網的Master/Slave機制在通常情況下已經可以滿足“實時”備份的要求了。如果延遲比較大,可以從以下幾個因素進行排查:
(1) 網絡延遲;
(2) Master負載過高;
(3) Slave負載過高;
laravel項目中配置主從同步,官方文檔為:
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。