私のmysqlサーバーのバックアップソリューションを探しています。ダウンタイムをできるだけ少なくする必要があります。私は以下を持っています:
この数は増える可能性があるため、マスター/スレーブレプリケーションを設定することはお勧めできません。
私が見る最も簡単なバックアップ方法は、「automysqlbackup」などのソフトウェアでmysqldumpを使用することです。私の最も重要なデータはInnoDBを使用しています。私のInnoDBテーブルはかなり重いです。
問題は、サーバー内のすべてのデータベースに対してmysqldumpを実行すると、Innodbテーブルがロックされるのですか?
innoDBとMyISAMを組み合わせたmysqldumpは、相互に排他的なものとして扱われます。理由は次のとおりです。
Mysqldumpの進行中にmysqlにログインできる場合は、次のように表示されます。
_SELECT /* SQL_NO_CACHE */ * FROM tblname
_
デフォルトでは、mysqldumpは次のことを行います。
これは、他のデータベースアクティビティがないMySQLインスタンスには問題ありません。 InnoDBテーブルとMyISAMテーブルは互いに影響しません。
すべてのInnoDB MySQLインスタンスに対して_--single-transaction
_を使用すると、チェックポイントが作成され、すべてのテーブルが同じ時点からダンプされます。 MyISAMテーブルが見つかると、すべてのベットがオフになります。 MyISAM後のすべてのInnoDBテーブルが異なる時点からダンプされる可能性があります。
InnoDBとMyISAMの混合に対して一貫したポイントインタイムダンプを取得するには、オプションがあります
Mysqlを再起動して、他の誰もTCP/IPを介してログインできないようにしてから、mysqldump
_service mysql restart --skip-networking --skip-grant-tables
mysqldump --routines --triggers --all-databases > MySQLData.sql
service mysql restart
_
すべてのMyISAMテーブルが読み取り専用の場合は、mysqldumpで--single-transactionを使用します。
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>;
_を実行します
mysqldump --single-transaction
はテーブルをロックしませんが、MyISAMテーブルは、このオプションで一貫したダンプを持っていることが保証されていません。 mydumper
、mydumper
を使用することをお勧めします。MyISAMテーブルはロックされ、InnoDBはロックされないため、ダンプが一貫します。
mysqldumpは、ダンプ中にテーブルをロックします。 LVMスナップショットまたは Xtrabackup を使用します。