回答:
ストレージエンジンとしてInnoDBを使用していると思います。その場合は、bin-loggingをオンにする必要があります。現在オンになっていない場合は、my.cnfを変更した後にMySQLを再起動する必要があります。これは唯一のダウンタイムであり、その後、データベースをブロックせずに、binlog位置でデータベースのダンプを取得できます。
mysqldump --skip-lock-tables --single-transaction --flush-logs --hex-blob --master-data=2 -A
このバックアップに基づいて、スレーブでデータを復元します。この後、任意のMySQLレプリケーションチュートリアルに従って、スレーブがマスターと一緒に追いつく/実行できるようにします。
レプリケーションを開始するには、スレーブ上のデータベースの一貫したコピーが必要です
テーブルはmyisamまたはinnodbでサポートされていますか?問題を見つける
show table status
「エンジン」列を見てください
すべてのテーブルがinnodbの場合、mysqldump --single-transactionを使用してゼロダウンタイムのセットアップを行い、それをスレーブにインポートすることができます。
テーブルがmyisamの場合、コピー中にテーブルを書き込み用にロックする必要があるため、ダウンタイムが発生する必要があります。mysqlhotcopyはそのためのツールです。
または、LVM(論理ボリュームマネージャー)を使用している場合は、データベースを停止し、LVMスナップショットを数秒で取得して、データベースを再起動できます。その後、スナップショットから一貫したコピーを作成できます。
スレーブをセットアップするには、データのスナップショットを取り、バイナリログの位置を記録する必要があります。データベースをバックアップしてもダウンタイムは発生しませんが、パフォーマンスは低下しますが、すでにデータベースをバックアップしていますか?あなたはバックアップがいくつかのテーブルをロックする必要があることに気づくかもしれません、そしてこれはあなたのアプリケーションにロックアップを引き起こすかもしれません、それが実際にそれがどのように実装されるかを見る必要があります。
ディスクをスナップショットできますか?ホットバックアップを実行できれば、ダウンタイムが大幅に短縮されます。