2つのサーバー間でマスター/スレーブレプリケーションを設定できるように、バイナリロギングを有効にしようとしています。大量のデータが存在する既存のサーバーを使用していて、次のコマンドでデータをダンプしようとしています。
mysqldump -u root -p --all-databases --master-data > masterdump.sql
しかし、エラーが発生します:mysqldump: Error: Binlogging on server not active
。
バイナリロギングを有効にする方法については、あらゆる種類のチュートリアルに従ってきましたが、何も機能しませんでした。 my.cnfに次のパラメーターを追加したことを確認しました。
server-id = 1
log_bin = /var/log/mysql/mysql-bin.log
sync_binlog = 1
MySQLを再起動すると、約60秒(データベースの巨大なサイズが原因であると想定)時間がかかりますが、最終的には起動します。しかし、/var/log/mysql/error.log
を確認すると、次のエラーが見つかりました(何百回も複製されています)。
InnoDB: Unable to lock ./ibdata1, error: 11
InnoDB: Check that you do not already have another mysqld process
そのため、pstree
を実行してすべてのmysqldプロセスを探したところ、次のことがわかりました。
root@my_server:~# pstree
init---some stuff
|--
|--mysqld---10*[{mysqld}]
|--
|--Sudo---mysqld---23*[{mysqld}]
これは私が行き詰まっているところです。 mysqld
とSudo mysqld
の両方が実行されているのが正常かどうかはわかりません。サーバーは ServerPilot によって管理されています。
この証拠のいずれかが、バイナリログが有効にならない理由を示していますか?
複数のmysqldプロセスが問題を引き起こしていたようです。 この質問からのいくつかのヒントのおかげでSudo mysqld
の下でプロセスツリーを強制終了でき、バイナリログがすぐに開始されました。 この素晴らしいチュートリアル のおかげで、マスタースレーブレプリケーションの残りの作業はその後かなり速くなりました。