最小限のダウンタイムでMySQLレプリケーションをセットアップする方法


12

基本的に、大規模なMySQLデータベースがあり、スレーブ(マスタースレーブセットアップ)へのレプリケーションを実行しようとしています。データベースで最小ダウンタイムを使用してこれを行う方法について、順を追ったガイドはありますか?データベースのバックアップとスレーブサーバーへのバックアップの転送(プライベートネットワーク経由でも)には、40分程度かかります。かなり長いダウンタイム。

回答:


15

ストレージエンジンとしてInnoDBを使用していると思います。その場合は、bin-loggingをオンにする必要があります。現在オンになっていない場合は、my.cnfを変更した後にMySQLを再起動する必要があります。これは唯一のダウンタイムであり、その後、データベースをブロックせずに、binlog位置でデータベースのダンプを取得できます。

mysqldump --skip-lock-tables --single-transaction --flush-logs --hex-blob --master-data=2 -A

このバックアップに基づいて、スレーブでデータを復元します。この後、任意のMySQLレプリケーションチュートリアルに従って、スレーブがマスターと一緒に追いつく/実行できるようにします


一部のテーブルがinnodbを使用していない場合はどうなりますか?また、-Aの代わりに--databasesを使用してデータベースのサブセットをダンプしても、上記のバックアップは引き続き有効ですか?
mathieu 2013

一部のテーブルがinnodbを使用しない場合、バックアップに一貫性がない可能性があります。こちらをご覧ください:stackoverflow.com/a/7461466/104398 ; バックアップには、スキップされたデータベースは含まれません。このようなバックアップに基づいてレプリケーションを設定し、レプリケートされたものをフィルタリングしない場合-省略されたデータベースで何らかの操作が行われるとすぐにレプリケーションが中断します。
pQd 2013

さて、残りのmyisamテーブルをinnodbに変換し、必要なデータベースだけが複製/バックアップされるようにしました。
mathieu 2013

3

レプリケーションを開始するには、スレーブ上のデータベースの一貫したコピーが必要です

テーブルはmyisamまたはinnodbでサポートされていますか?問題を見つける

show table status

「エンジン」列を見てください

すべてのテーブルがinnodbの場合、mysqldump --single-transactionを使用してゼロダウンタイムのセットアップを行い、それをスレーブにインポートすることができます。

テーブルがmyisamの場合、コピー中にテーブルを書き込み用にロックする必要があるため、ダウンタイムが発生する必要があります。mysqlhotcopyはそのためのツールです。

または、LVM(論理ボリュームマネージャー)を使用している場合は、データベースを停止し、LVMスナップショットを数秒で取得して、データベースを再起動できます。その後、スナップショットから一貫したコピーを作成できます。


1

スレーブをセットアップするには、データのスナップショットを取り、バイナリログの位置を記録する必要があります。データベースをバックアップしてもダウンタイムは発生しませんが、パフォーマンスは低下しますが、すでにデータベースをバックアップしていますか?あなたはバックアップがいくつかのテーブルをロックする必要があることに気づくかもしれません、そしてこれはあなたのアプリケーションにロックアップを引き起こすかもしれません、それが実際にそれがどのように実装されるかを見る必要があります。

ディスクをスナップショットできますか?ホットバックアップを実行できれば、ダウンタイムが大幅に短縮されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.