MyISAMとInnoDBの両方を使用するMySQLデータベースの論理バックアップについて質問があります。
mysqldump
ユーティリティは、次の2つのオプションをサポートしています。
-single-transaction-単一のトランザクションですべてのテーブルをダンプすることにより、一貫したスナップショットを作成します。マルチバージョンをサポートするストレージエンジンに格納されているテーブルでのみ機能します(現在はInnoDBのみがサポートします)[...]オプションは--lock-tablesを自動的にオフにします。
-x、--lock-all-tables-すべてのデータベースのすべてのテーブルをロックします。これは、ダンプ全体の期間中、グローバルな読み取りロックを取得することによって実現されます。 --single-transactionと--lock-tablesを自動的にオフにします。
InnoDBの場合、--single-transaction
が必要です
myISAMには、lock-tablesまたはlock-all-tablesが必要です(データベース間の整合性が必要な場合)。
それでは、hybridデータベース(MyISAMエンジンとInnoDBエンジンの両方を使用するデータベース)はどのようにバックアップされることになっていますか?
編集:
明確にするために、質問は次のように再定式化できます。
Lock- [all-] tablesオプションはInnoDBテーブルの一貫したバックアップを保証しますか?
Mysqldumpでは、すべてのテーブルがInnoDBである場合にのみ--single-transaction
を安全に使用できます。それ以外の場合は、バックアップに一貫性がありません。
ハイブリッドバックアップが必要な場合は、バックアップ内のすべてのテーブルにlock-tables
が必要です(デフォルト)。これは、すべてのエンジンにとって安全です。また、デフォルトのオプションによりバックアップが安全であることを確認できます。特別なフラグをオンにする必要はありません。
注:ハイブリッドミックスがある場合は、xtrabackupを参照してください。バックアップのMyISAMフェーズでのみロックされます。
状況の追加のアイデアとして、バックアップがスレーブから行われるマスタースレーブセットアップのセットアップにいくつかの考えを費やすことが役立つかもしれません。
InnoDBとMyISAMが混在するMySQL dbは、常に(すべての構成とすべてのバックアップツールで知っている限り)MyISAMテーブルをMyISAMバックアップフェーズでロックします。
このロックを回避するには、次の設定を使用します。
書き込みと読み取りはすべてサーバーA(マスター)に送信されます。サーバーB(スレーブ)はバックアップにのみ使用されます。スレーブに、選択したバックアップツールまたはスクリプトをインストールします。 MySQL管理者。
バックアップを構成します。夜間に毎日。ロックはスレーブ上にあるため、スレーブがロックしている間は遅れが生じますが、この遅れはバックアップが終了してロックが開かれるとすぐに追いつきます。