web-dev-qa-db-ja.com

mysqldumpを使用してマスターマスタークラスターをバックアップおよび復元しても安全ですか?

詳細が重要かどうかはわかりませんが、XtraDB(MariaDB)上のGaleraクラスターについて話をしているだけです。

マスターとマスターのセットアップがあり、必要に応じてデータベースのバックアップと復元に興味があります。 MySQLの単一インスタンスで、ミルの実行を行います

 mysqldump -u USER -p DB_NAME > DB-DATE.sql

 -and to restore-

 mysql -u USER -p < /path/to/dump.sql

これらのコマンドがクラスター環境でどのように機能するかはわかりません。これを2つの部分に分け、それぞれにコメントを付けます。

バックアップ

バックアップに関する限り、私が考えることができる唯一の問題は、バックアッププロセス中に一部のデータがクラスターに書き込まれる可能性があり、クエリが発生し、バックアップが実行され、次に別の関連クエリが発生してデータが不整合な状態のままになることです。 2つのテーブルuserscountsがあるとします。ユーザーがフォームを送信すると、PHPスクリプトはusersのユーザーのお気に入りの色を更新し、countstimes_color_changedというフィールドをインクリメントします。この単純なスクリプトは次のようになります。

<?
    //Yes, these are vulnerable to SQL injection but this is to demonstrate a point.
    $query1 = "UPDATE `users` SET `favorite_color` = ".$_POST['color']." WHERE id = $user_id";
    $query2 = "UPDATE `counts` SET `times_color_changed`  = `times_color_changed` + 1 WHERE id = $user_id";
    mysql_query($query1);
    mysql_query($query2);
?>

私の心配は、mysqldumpを並行して実行しているときに、クエリが次のように実行されることです。

 QUERY_1 runs
 MySQL_DUMP
 Query_2 runs

 -or-

 Query1 from remote server commits on local server
 MySQL_DUMP
 Query2 from remote server commits on local server

これらのいずれかが不定状態につながる可能性があります。 SQLサーバーはいつでも停止できますが、MySQLダンプを実行できません。

xtrabackupコマンドはありますが、よくわかりません。私は常にmysqldumpを通じてダンプを行ってきました

復元中

ダンプを復元するときに、これがリモートサーバーに複製されることをどのように確認できますか?クラスターは私のダンプが「古い」データであり、それを複製しないと考えますか?

1
wannabeedba

PerconaのXtraBackup を使用することを強くお勧めします。あなたはすでにストレージエンジンを使用しています-時間をかけてこのツールを理解してください! mysqldumpを使用しない正当な理由は here です。データのテキストファイルSQLダンプを実際に取得する必要がある場合は、 mydumper を確認してください。理由は here および here を参照してください(免責事項-ありません) t使用済み)。

1
Vérace