web-dev-qa-db-ja.com

MySQLサーバーがシャットダウンしている場合、InnoDBデータベースでrsyncを使用しても大丈夫ですか?

MySQLサーバーがシャットダウンしている場合、InnoDBデータベースでrsyncを使用しても大丈夫ですか?

例えば ​​:

/etc/init.d/mysql stop
rsync -av /home/mysql/mydb/ [email protected]:/home/mysql
6
lepix

これは、実際には/ home/mysql/mydbの下のディレクトリ構造に依存します。それが1つのデータベースのデータファイルだけの場合は、範囲を拡張する必要があります。

Rsyncを使用する場合(または一般にファイルベースのバックアップを取る場合)は、少なくとも次のものが含まれていることを確認する必要があります。

  • あなたのinnodbログファイル(ib_logfile *
  • メインのinnodbデータファイル(ibdata *
  • 追加のすべてのinnodbデータファイル(*。ibd)(innodb_file_per_table = 1を使用している場合)
  • InnoDBテーブルのすべてのテーブル定義ファイル(*。frm

明らかにこれはInnoDBのみをカバーしています-おそらく、他のすべてのデータベースファイル(MyISAM、アーカイブ、CSVなど)も取得したいと思うでしょう。

トピックに関するMySQLのドキュメント は、サーバーをシャットダウンする前にset global innodb_fast_shutdown = 0を発行することも推奨しています-これは必要ではありませんが、理にかなっています。この設定により、サーバーはログファイルをデータファイルにフラッシュし、バックアップから復元する必要がある場合は、回復時間を大幅に短縮します。

(厳密に言えば、遅いシャットダウンを行うと、ログファイルをバックアップせずに問題を回避できるはずですが、何らかの理由でサーバーが正常にシャットダウンしないことが判明した場合に備えて、それは良いアイデアです。 )

私はバックアップ用の Percona Xtrabackup の大ファンです。これは、必要なすべてのファイルをコピーし、バックアップをオンラインにできることを確認しますが、rsyncの方が多い場合がありますあなたの要件に適しています。

Update:MySQL 5.6を使用している場合は、 InnoDB Transportable Tablespaces をチェックアウトできます。この機能はおそらく役に立たないでしょう。テーブルがたくさんある場合は少しスクリプトを書く必要がありますが、innodb_file_per_tableそして、他のすべてのInnoDB手荷物をコピーすることを回避しようとしています。

7
Nathan Jolly

短い答え:はい、それで結構です。

それほど長くは答えません:99%やユーザーのように、すべてが「datadir」ディレクトリの下にあり、innodbテーブルスペースファイル、innodbログファイルなどの場所ごとの特別な設定はないと想定しています。

実際、rsyncing(またはNFSを介した古いコピーなど)は、おそらくデータベースをバックアップする最も安全な方法です。これが実際にバックアップを作成する方法だと言っていたGoogleエンジニアを思い出します。もちろん、サーバーをシャットダウンする必要がある場合の欠点。

3
Shlomi Noach