使用 mysqldump --master-data 進行備份時,若伺服器未啟用二進位日誌,會報錯 mysqldump: Error: Binlogging on server not active。本文說明原因與一鍵修正步驟。
--master-data 參數要求在備份檔案中記錄當前 Binlog 位置 (CHANGE MASTER TO 陳述式),以便從庫同步。若 Master 未開啟 log_bin,無法獲取位置,故報錯。
/etc/my.cnf (或 /etc/mysql/my.cnf):[mysqld]
# 啟用二進位日誌
log_bin = mysql-bin
# 必須設定唯一 server-id (主從複寫必要)
server_id = 1
# 可選:日誌保留天數、單檔大小
expire_logs_days = 7
max_binlog_size = 100M
systemctl restart mysqld
# 或 service mysqld restart
mysql -u root -p -e "SHOW BINARY LOGS;"
# 或
mysql -u root -p -e "SHOW VARIABLES LIKE 'log_bin';"
# 完整備份 (含主從同步資訊、交易一致性、存儲程序、觸發器)
mysqldump -u root -p \
--single-transaction \
--master-data=2 \
--routines \
--triggers \
--events \
--hex-blob \
--databases db1 db2 > full_backup_$(date +%F).sql
# 僅結構
mysqldump -u root -p --no-data --databases db1 > schema_only.sql
# 僅資料 (無建表語句)
mysqldump -u root -p --no-create-info --databases db1 > data_only.sql
Warning: Using a password on the command line interface can be insecure.
解決:使用 --defaults-extra-file=/path/.my.cnf 指定密碼檔案,檔案權限 600。
[client]
user=root
password=YourPassword
最佳實踐: 生產環境**務必啟用 Binlog** (支援 PITR 時間點恢復、主從複寫、審計),並配置 expire_logs_days 防止磁碟寫滿。