sql >> データベース >  >> RDS >> Mysql

MySQLAmazonRDSのバックアップ

    RDSでは、マスターユーザーでさえSUPERを許可していません 特権。これは、FLUSH TABLES WITH READ LOCKを実行するために必要です。 。 (これはRDSの残念な制限です。)

    失敗したステートメントは、--master-dataによって生成されています もちろん、これは、バックアップが開始される正確なbinlog座標を学習できるようにする場合に必要です。 FLUSH TABLES WITH READ LOCK すべてのテーブルのグローバル読み取りロックを取得します。これにより、mysqldumpはSTART TRANSACTION WITH CONSISTENT SNAPSHOT--single-transactionの場合と同様 )次にSHOW MASTER STATUS バイナリログ座標を取得します。その後、表示データをそのログ位置と一致する状態に保つトランザクションがあるため、グローバル読み取りロックを解放します。

    RDSは、SUPERを拒否することで、このメカニズムを破ります 特権があり、明らかな回避策はありません。

    これを適切に回避するために利用できるハッキーなオプションがいくつかありますが、どれも特に魅力的ではない可能性があります:

    • トラフィックが少ない時間帯にバックアップを実行します。バックアップを開始してからバックアップが出力ファイルまたは宛先サーバーへのデータの書き込みを開始した後までにbinlog座標が変更されていない場合(--single-transactionを使用したと仮定) )プロセスの実行中に座標が変更されなかったことがわかっているため、これは機能します。

    • バックアップを開始する直前にマスターのbinlogの位置を確認し、これらの座標をCHANGE MASTER TOで使用します 。マスターのbinlog_formatの場合 ROWに設定されています そうすれば、これは機能するはずですが、いくつかの初期エラーをスキップする必要がありますが、その後エラーが発生する必要はありません。これが機能するのは、行ベースのレプリケーションが非常に決定論的であり、すでに存在するものを挿入しようとしたり、すでになくなったものを削除しようとしたりすると停止するためです。エラーを過ぎると、一貫性のあるスナップショットが実際に開始された真のbinlog座標になります。

    • 前の項目と同じですが、バックアップを復元した後、mysqlbinlog --base64-output=decode-rows --verboseを使用して正しい位置を特定してください。 取得した座標でマスターのbinlogを読み取り、スナップショットが実際に開始される前にどのイベントがすでに実行されている必要があるかを新しいスレーブで確認し、この方法で決定された座標を使用してCHANGE MASTER TO

    • 外部プロセスを使用して、サーバー上のすべてのテーブルの読み取りロックを取得します。これにより、すべての書き込みが停止します。 SHOW MASTER STATUSからのbinlogの位置を確認します はインクリメントを停止し、バックアップを開始して、それらのロックを解放します。

    おそらく最後のアプローチ以外のこれらのアプローチのいずれかを使用する場合は、テーブルの比較を行って、実行後にスレーブがマスターと同一であることを確認することが特に重要です。その後のレプリケーションエラーが発生した場合は、そうではありませんでした。

    おそらく最も安全なオプションですが、おそらく最も厄介なオプションです 必要ではないように思われるので、RDSマスターのRDSリードレプリカを作成することから始めます。起動してマスターに同期されたら、RDSが提供するストアドプロシージャCALL mysql.rds_stop_replicationを実行することで、RDSリードレプリカでのレプリケーションを停止できます。 RDS5.6.13および5.5.33で導入されました> SUPERは必要ありません 特権。

    RDSレプリカスレーブを停止した状態で、mysqldumpを取得します RDS読み取りレプリカから。これにより、特定のマスター座標のセットの時点で不変のデータセットが設定されます。このバックアップをオフサイトスレーブに復元してから、SHOW SLAVE STATUSからRDS読み取りレプリカのマスター座標を使用します Exec_Master_Log_Pos およびRelay_Master_Log_File CHANGE MASTER TOとして 座標。

    Exec_Master_Log_Posに表示される値 スレーブでは、次のトランザクションの開始または処理されるイベント 、そしてそれはまさにあなたの新しいスレーブがマスターで読み始める必要がある場所です。

    次に、外部スレーブが稼働し始めたら、RDSリードレプリカを廃止できます。



    1. MySQLでSUM()で注文するにはどうすればよいですか?

    2. #1214-使用されるテーブルタイプはFULLTEXTインデックスをサポートしていません

    3. Postgresql再帰的自己結合

    4. MySQLで最も一致する行を見つける(InnoDB)