MySQL主從復制(日志核心)完整教程(適合新手操作)
下面為你整理了MySQL 主從復制(日志核心)完整教程,聚焦 binlog(主庫日志)、relay log(從庫日志)的配置與管理,適配 MySQL 5.7/8.0 版本,新手可直接跟著操作。
一、核心日志概念(先理解再配置)
主從復制的核心是日志同步,先搞懂 2 個關鍵日志:
| 日志類型 | 作用 | 存儲位置(默認) |
|---|---|---|
| 二進制日志(binlog) | 主庫記錄所有數(shù)據(jù)修改操作(增刪改、DDL),是主從同步的數(shù)據(jù)源 | /var/lib/mysql/mysql-bin.* |
| 中繼日志(relay log) | 從庫讀取主庫 binlog 后,本地保存的日志文件,從庫執(zhí)行該日志完成數(shù)據(jù)同步 | /var/lib/mysql/relay-log.* |
二、環(huán)境準備(必做)
| 角色 | IP | MySQL版本 | 核心要求 |
|---|---|---|---|
| 主庫(Master) | 192.168.1.10 | 5.7/8.0 | 開啟 binlog、唯一 server-id |
| 從庫(Slave) | 192.168.1.11 | 5.7/8.0 | 唯一 server-id、開啟 relay log |
前置條件:
- 主從服務器網絡互通(ping 通、3306 端口開放);
- 主從 MySQL 版本盡量一致;
- 主從服務器時間同步(
ntpdate ntp.aliyun.com)。
三、主庫配置(核心:開啟 binlog)
步驟 1:修改主庫配置文件
編輯 MySQL 配置文件(不同系統(tǒng)路徑不同):
# CentOS/RHEL:/etc/my.cnf # Ubuntu/Debian:/etc/mysql/mysql.conf.d/mysqld.cnf sudo nano /etc/my.cnf
添加/修改以下配置(重點開啟 binlog):
[mysqld] # 1. 必須:唯一server-id(主從不能重復,建議用IP最后一段) server-id = 10 # 2. 必須:開啟binlog,指定日志前綴 log-bin = mysql-bin # 3. 可選:binlog格式(推薦ROW,最安全) binlog_format = ROW # 4. 可選:同步的數(shù)據(jù)庫(僅同步db_test,不寫則同步所有) # binlog-do-db = db_test # 5. 可選:忽略同步的數(shù)據(jù)庫 # binlog-ignore-db = mysql # 6. 可選:binlog過期時間(自動清理,避免日志占滿磁盤) expire_logs_days = 7
步驟 2:重啟主庫 MySQL 生效
# CentOS 7+ sudo systemctl restart mysqld # Ubuntu/Debian sudo systemctl restart mysql
步驟 3:主庫創(chuàng)建復制專用用戶
登錄主庫 MySQL,創(chuàng)建僅用于主從復制的用戶(最小權限原則):
-- 登錄主庫 mysql -uroot -p -- 創(chuàng)建用戶(MySQL 5.7/8.0 通用,指定從庫IP訪問) CREATE USER 'repl'@'192.168.1.11' IDENTIFIED BY 'Repl@123456'; -- 授權復制權限(僅需REPLICATION SLAVE) GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.1.11'; -- MySQL 8.0 需刷新權限(5.7可選) FLUSH PRIVILEGES;
步驟 4:查看主庫 binlog 狀態(tài)(關鍵?。?/h3>
-- 主庫執(zhí)行,記錄2個值:File、Position
SHOW MASTER STATUS;
-- 主庫執(zhí)行,記錄2個值:File、Position SHOW MASTER STATUS;
輸出示例(后續(xù)從庫配置需要這兩個值):
+------------------+----------+--------------+------------------+-------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +------------------+----------+--------------+------------------+-------------------+ | mysql-bin.000001 | 154 | db_test | mysql | | +------------------+----------+--------------+------------------+-------------------+
四、從庫配置(核心:同步主庫 binlog 到 relay log)
步驟 1:修改從庫配置文件
sudo nano /etc/my.cnf # 同主庫路徑規(guī)則
添加/修改配置:
[mysqld] # 1. 必須:唯一server-id(不能和主庫重復) server-id = 11 # 2. 可選(默認開啟):指定relay log前綴 relay-log = mysql-relay-bin # 3. 必須:關閉從庫binlog(如果從庫不做其他從庫的主庫) # log-bin = mysql-bin # 注釋掉或刪除 # 4. 可選:從庫只讀(避免直接修改從庫數(shù)據(jù)) read_only = 1 # 5. 可選:超級用戶也只讀(MySQL 5.7+) super_read_only = 1
步驟 2:重啟從庫 MySQL
sudo systemctl restart mysqld # 同主庫命令
步驟 3:配置從庫連接主庫(核心命令)
登錄從庫 MySQL,執(zhí)行以下命令(替換括號內的主庫信息):
-- 登錄從庫 mysql -uroot -p -- 停止從庫復制(首次配置先停止) STOP SLAVE; -- 配置主從連接(關鍵!替換以下參數(shù)) CHANGE MASTER TO MASTER_HOST='192.168.1.10', -- 主庫IP MASTER_USER='repl', -- 主庫創(chuàng)建的復制用戶 MASTER_PASSWORD='Repl@123456', -- 復制用戶密碼 MASTER_LOG_FILE='mysql-bin.000001', -- 主庫SHOW MASTER STATUS的File值 MASTER_LOG_POS=154; -- 主庫SHOW MASTER STATUS的Position值 -- 啟動從庫復制 START SLAVE;
MySQL 8.0 注意:如果主庫默認認證插件是 caching_sha2_password,需在 CHANGE MASTER TO 后追加:
MASTER_AUTH_PLUGIN='mysql_native_password';
五、驗證主從復制(日志同步狀態(tài))
1. 從庫查看復制狀態(tài)(核心命令)
SHOW SLAVE STATUS\G;
重點看 2 個參數(shù)(均為 Yes 則正常):
Slave_IO_Running: Yes→ 從庫 IO 線程正常(讀取主庫 binlog 到 relay log)Slave_SQL_Running: Yes→ 從庫 SQL 線程正常(執(zhí)行 relay log 中的操作)
2. 日志同步測試
- 主庫創(chuàng)建數(shù)據(jù)庫/表/插入數(shù)據(jù):
CREATE DATABASE test_db; USE test_db; CREATE TABLE t1 (id INT); INSERT INTO t1 VALUES (1);
- 從庫查看是否同步:
SHOW DATABASES; -- 能看到test_db USE test_db; SELECT * FROM t1; -- 能查到id=1
六、日志管理(日常維護)
1. 查看 binlog(主庫)
-- 查看所有binlog文件 SHOW BINARY LOGS; -- 查看binlog內容(指定文件) SHOW BINLOG EVENTS IN 'mysql-bin.000001';
2. 查看 relay log(從庫)
-- 查看relay log文件 SHOW RELAYLOG EVENTS IN 'mysql-relay-bin.000001';
3. 清理過期日志(避免磁盤滿)
-- 主庫清理binlog(保留7天) PURGE BINARY LOGS BEFORE DATE_SUB(NOW(), INTERVAL 7 DAY); -- 從庫清理relay log PURGE RELAY LOGS BEFORE DATE_SUB(NOW(), INTERVAL 7 DAY);
七、常見日志相關故障排查
| 故障現(xiàn)象 | 原因及解決方案 |
|---|---|
| Slave_IO_Running: No | 1. 主庫IP/端口/賬號密碼錯誤; 2. 主庫binlog文件/位置錯誤; 3. 主從server-id重復; 4. 主庫3306端口未開放。 |
| Slave_SQL_Running: No | 1. 從庫數(shù)據(jù)與主庫不一致; 2. relay log 損壞(刪除損壞的relay log,重新同步); 3. 從庫執(zhí)行了主庫沒有的操作。 |
| binlog 不生成 | 主庫未開啟 log-bin 或 server-id 未設置;重啟主庫后檢查。 |
| relay log 持續(xù)增長 | 從庫 SQL 線程卡住,先修復 Slave_SQL_Running,再清理過期relay log。 |
到此這篇關于MySQL主從復制(日志核心)完整教程的文章就介紹到這了,更多相關MySQL主從復制日志核心內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
MySQL?8.0新特性之集合操作符INTERSECT和EXCEPT
MySQL8.0.31版本開始支持了INTERSECT(交集)和EXCEPT(差集)運算,INTERSECT返回兩個結果集中都包含的行,EXCEPT返回左側結果集存在,右側不存在的行,這篇文章主要給大家介紹了關于MySQL?8.0新特性之集合操作符INTERSECT和EXCEPT的相關資料,需要的朋友可以參考下2022-10-10
linux系統(tǒng)ubuntu18.04安裝mysql 5.7
這篇文章主要為大家詳細介紹了linux系統(tǒng)ubuntu18.04安裝mysql 5.7,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-09-09

