web-dev-qa-db-ja.com

MySQLレプリケーション:purge_logsでエラーが発生する

MySQLレプリケーションインスタンスでは、次のエラーメッセージが表示されます。

[ERROR] MYSQL_BIN_LOG :: purge_logs Was called Expired with file / db-space-no-connected-cpa / DBMS / dxnc6sla / Arch / not listed in the index .

解決策について教えてください。前もって感謝します

4
DANI

分析

log-bin が有効な場合、MySQLは完了したSQLトランザクションをバイナリログに記録します。

バイナリログは、名前がバイナリログと同じになるが、ファイル拡張子が.indexのテキストファイルで管理されます。

たとえば、log-bin=/mysqllogs/mysql-binがあり、mysqldを起動したとします。

/mysqllogsにファイルが配置されます

mysql-bin.000001
mysql-bin.index

インデックスファイルには、すべてのバイナリログの名前が含まれます。

この例では、mysql-bin.000001が含まれます

時間の経過とともに、バイナリログが蓄積され、/mysqllogsにこのようなものが表示されます

mysql-bin.000001
mysql-bin.000002
mysql-bin.000003
mysql-bin.000004
mysql-bin.index

mysql-bin.indexにはこれが含まれます

mysql-bin.000001
mysql-bin.000002
mysql-bin.000003
mysql-bin.000004

変数 expire_logs_days (0より大きい場合)と max_binlog_size に基づいて、mysqldは独自のローテーションとバイナリログの期限切れを行います。

次の場合

cd /mysqllogs
rm -f mysql-bin.000001
rm -f mysql-bin.000002

これにより、mysqldのログローテーションメカニズムが無効になります。どうして ?

/mysqllogsフォルダには

mysql-bin.000003
mysql-bin.000004
mysql-bin.index

ただし、mysql-bin.indexにはこれが含まれます

mysql-bin.000001
mysql-bin.000002
mysql-bin.000003
mysql-bin.000004

mysqldはインデックスファイルをアクティブに使用して、ローテーションまたは期限切れを行う前に、/mysqlvarにリストされているmysql-bin.index内のすべてのファイルが存在することを確認します。

したがって、OSにバイナリログを削除させないでください。 mysqldに実行させます。

以前にこれについて書いた

解決

Mysqldをシャットダウンし、内容がディスク上の既存のバイナリログと一致するように.indexファイルを編集して、mysqldを起動します。私はこれを以前に提案しました( Mysql binlogsが存在し、バイナリログが空であることを示します

試してみる !!!

1
RolandoMySQLDBA