Last_Error: Error 'Duplicate entry '14772680-15' for key 'PRIMARY' ...
Query: 'UPDATE pre_forum_post SET position=position+14 WHERE tid IN('14772680','14773058')'
STOP SLAVE;
SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 2; -- 跳過 2 個事件(視具體事件數)
START SLAVE;
SHOW SLAVE STATUS\G; -- 確認 Slave_SQL_Running: Yes
注意:GTID 模式下不可用此法,需用「空交易跳過」法(見文章 179471)。
Slave_IO_Running: No
Last_IO_Error: Got fatal error 1236: 'Could not find first log file name in binary log index file' from master
expire_logs_days 過短或手動 PURGE BINARY LOGS)。
# 主庫查看現有最早 binlog
SHOW BINARY LOGS;
-- 或
SHOW MASTER STATUS\G;
# 從庫重新指定
STOP SLAVE;
CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.002323', MASTER_LOG_POS=121077462;
START SLAVE;
若主庫已無足夠 Binlog,需**重新做全量備份+建立複寫**。
service mysql start
Starting MySQL. ERROR! Manager of pid-file quit without updating file.
tail -f /var/log/mysqld.log(或 /data/mysql/mysql-error.log)。chown -R mysql:mysql /data/mysql)。innodb_log_file_size 修改後未刪除舊 ib_logfile*。mysqld --help --verbose 驗證)。df -h)。pkill -9 mysqld)。/usr/bin/mysqld_safe --user=mysql &
# 觀察是否正常啟動,正常則 Ctrl+C,再嘗試標準啟動
參考文章 179495 多維度優化方案。
#!/bin/bash
# check_slave.sh
STATUS=$(mysql -uroot -p'pass' -e "SHOW SLAVE STATUS\G" 2>/dev/null)
IO=$(echo "$STATUS" | grep 'Slave_IO_Running:' | awk '{print $2}')
SQL=$(echo "$STATUS" | grep 'Slave_SQL_Running:' | awk '{print $2}')
BEHIND=$(echo "$STATUS" | grep 'Seconds_Behind_Master:' | awk '{print $2}')
if [[ "$IO" != "Yes" || "$SQL" != "Yes" ]]; then
echo "ALERT: Slave IO/SQL not running!" | mail -s "MySQL Slave Down" admin@example.com
fi
if [[ "$BEHIND" -gt 300 ]]; then
echo "WARN: Slave lag $BEHIND seconds" | mail -s "MySQL Slave Lag" admin@example.com
fi