web-dev-qa-db-ja.com

MySQL(MariaDB)レプリケーションセットの最適なバックアップ戦略

私の主な懸念は、一時的な停止よりも適切なバックアップを取得することです。データはゴールデンです。私はドキュメントを読んでいますが、バックアップ戦略の多くはそうであるようです。

  • マスター/スレーブレプリカセットをセットアップします。
  • バックアップする場合は、スレーブでレプリケーションを停止して、基本的に「フリーズ」します。
  • mysqldumpまたは選択したw\eを実行します。
  • レプリケーションを再開すると、スレーブは最終的に追いつきます。

これで問題はありませんが、スレーブが破損する可能性があるという理論的なチャンスはありますか(おそらくレプリケーションが正しく行われなかったか、スレーブがレプリカセットから切断されました)。もしそうなら、私は無意識のうちに破損した、または古いバックアップを取ります。これを回避するための最良の戦略は何ですか?私が考え得る唯一のことは:

  • マスターとスレーブでデータベースサービスを完全に停止します。レプリカセットからそれらを引き出します。
  • PHP設定ファイルを編集してスレーブサーバーを指すようにします。
  • バックアップ中のダウンタイムを回避するために、スレーブ(基本的には新しいマスター)を起動します。
  • 分離された古いマスターを起動し、mysqldumpを実行します
  • 両方のサーバーを停止し、何らかの方法でそれらを同期して一貫した状態に戻します(古いマスターがバックアップしているときに古いスレーブで書き込みが発生した場合)
  • Confファイルを修正し、古いマスターをマスターとして、古いスレーブをスレーブとして起動します。

これは非常に複雑なようですが、より良い解決策はありますか?マルチマスターは必要ありません。読み取りと書き込みは1台のサーバーで行われます。スレーブはフェイルオーバー専用です。

3
wannabeedba

レプリケーションのステータスとラグは、注意すべき重要なモニターです。バックアップを開始する前に、スレーブが正常に動作するかどうかを確認する必要があります。

シンプルな show slave statusは必要な情報をすべて表示します。

mysql> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 172.30.40.61
                  Master_User: replica
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.021934
          Read_Master_Log_Pos: 205924047
               Relay_Log_File: relay-bin.004199
                Relay_Log_Pos: 205924192
        Relay_Master_Log_File: mysql-bin.021934
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: 
          Replicate_Ignore_DB: 
           Replicate_Do_Table: 
       Replicate_Ignore_Table: 
      Replicate_Wild_Do_Table: 
  Replicate_Wild_Ignore_Table: 
                   Last_Errno: 0
                   Last_Error: 
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 205924047
              Relay_Log_Space: 205924384
              Until_Condition: None
               Until_Log_File: 
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File: 
           Master_SSL_CA_Path: 
              Master_SSL_Cert: 
            Master_SSL_Cipher: 
               Master_SSL_Key: 
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error: 
               Last_SQL_Errno: 0
               Last_SQL_Error: 
1 row in set (0.00 sec)

メインの「カウンター」はSlave_IO_RunningおよびSlave_SQL_Runningはレプリケーションステータス、Seconds_Behind_Masterラグ(理想的には0秒)。

バックアップ専用のslaveがある場合(これは良い方法です)、mysqldumpの代わりに(またはさらに)datadirのバイナリコピーを作成することをお勧めします。復元ははるかに簡単かつ迅速になります。ただし、部分的なバックアップ(特にInnoDBテーブル)を復元する場合、またはクリーンな圧縮されたデータセットを復元する場合は、mysqldumpが適しています。

マスターとスレーブの間の破損またはデルタを恐れている場合は、Perconaツールpt-table-checksumPercona Toolkitで利用可能)を使用して、「MySQLレプリケーションの整合性を検証できます。 「簡単に。

マックス。

2