MyISAMと混合すると、mysqldump中にInnoDBテーブルがロックされますか?


9

私のmysqlサーバーのバックアップソリューションを探しています。ダウンタイムをできるだけ少なくする必要があります。私は以下を持っています:

  • MySQLサーバー
  • それらは複製されません
  • 各サーバーはそれ自体を表します

この数は増える可能性があるため、マスター/スレーブレプリケーションを設定することはお勧めできません。

私が見る最も簡単なバックアップ方法は、mysqldumpを「automysqlbackup」などのソフトウェアで使用することです。私の最も重要なデータはInnoDBを使用しています。私のInnoDBテーブルはかなり重いです。

問題は、サーバーのすべてのデータベースにmysqldumpを実行すると、Innodbテーブルがロックされるのでしょうか。

回答:


7

InnoDBとMyISAMを組み合わせたmysqldumpは、相互に排他的なものとして扱われます。理由は次のとおりです。

mysqldumpの進行中にmysqlにログインできる場合は、次のように表示されます。

SELECT /* SQL_NO_CACHE */ * FROM tblname

デフォルトでは、mysqldumpは次のことを行います。

  • すべてのデータベースはアルファベット順にダンプされます
  • データベースごとにダンプされるすべてのテーブルは、アルファベット順にダンプされます(ストレージエンジンに関係なく)。

これは、他のデータベースアクティビティがないMySQLインスタンスには問題ありません。InnoDBテーブルとMyISAMテーブルは互いに影響しません。

--single-transactionすべてInnoDB MySQLインスタンスに対して使用すると、チェックポイントが作成され、同じ時点からすべてのテーブルがダンプされます。MyISAMテーブルが見つかると、すべてのベットがオフになります。MyISAM後のすべてのInnoDBテーブルが異なる時点からダンプされる可能性があります。

InnoDBとMyISAMの混合に対して一貫したポイントインタイムダンプを取得するには、オプションがあります

オプション1

mysqlを再起動して、他の誰もTCP / IPを介してログインできないようにし、次にmysqldumpを実行します。

service mysql restart --skip-networking --skip-grant-tables
mysqldump --routines --triggers --all-databases > MySQLData.sql
service mysql restart 

オプション#2

すべてのMyISAMテーブルが読み取り専用の場合は、mysqldumpで--single-transactionを使用します

オプション#3

MyISAMテーブルが書き込まれている場合、-single-transactionでは不十分です

次のことを行う必要があります。

mysql -u... -p... -e"FLUSH TABLES WITH READ LOCK; SELECT SLEEP(86400)"
sleep 30
mysqldump --routines --triggers --all-databases > MySQLData.sql

mysqldumpが完了したらすぐに、mysqlにログインして実行しますshow processlist;。クエリSELECT SLEEP(86400)を探し、プロセスIDを見つけて実行しますKILL <procidnumn>;


5

mysqldump --single-transactionはテーブルをロックしませんが、MyISAMテーブルは、このオプションで一貫したダンプがあることは保証されません。これは、より有効に活用するのですmydumpermydumperMyISAMテーブルをロックし、ダンプが一致しているので、InnoDBのはロックされません。


うわー、この素晴らしいツールをありがとう!mydumperを使用して、毎日、毎週、毎月のバックアップを自動化できるツールに精通していますか?mydumperだけで "automysqlbackup"のようなもの?ありがとう。
tounano 2012

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