web-dev-qa-db-ja.com

xtrabackupを使用して、他のデータベースを変更せずにデータベースをインポートできますか?

コンテキスト:

デモブランチが構築されるたびに、製品データベースのコピーをダウンロードして、デモサーバーにセットアップしたいと思います。このようにして、MySQLの下にXデモに対応するXデータベースがあります。

私はmysql_importを使用してそれを達成しましたが、DBをインポートするときに3〜5分かかります。だからスピードアップするためにXtrabackupを使いたい。

問題:

問題は、完全バックアップ中に、xtrabackupが必要なすべてのファイルとib_logfilefilesもコピーすることです。

それでは、データベースをdemo_1874という名前のデータベースにインポートするとします。

  1. データベースの完全バックアップを実行してから、同じサーバーで--prepareを2回実行し、結果を圧縮します。
  2. 他のサーバーにダウンロードし、すべてのバックアップファイルを解凍します
  3. 他のファイルを上書きする/var/lib/mysqlの下に貼り付けます(ib_logfile
  4. フォルダの名前をoriginal_dbからdemo_1874に変更します

質問

  • ib_logfileのようなファイルをコピーすることにより、このMySQLサーバー上にある他のすべてのデータベースが破壊されますか?

  • Xtrabackupを使用して他のものを変更せずに他のものの間でデータベースをインポートする他のオプションは何ですか?

3
sf_tristanb

必要なのは、部分的なバックアップです。 innodb_file_per_table=ONは、機能させるための前提条件です。

あなたの場合の手順は次のようになります:

本番サーバーから部分バックアップを取得します

innobackupex --databases="mydatabase" /path/to/backup

移行先サーバーで、エクスポート用のバックアップコピーを準備します。

innobackupex --apply-log --export /path/to/backup

各テーブルについて、これらの手順を繰り返します。

同じ構造の新しいテーブルを作成します(mysqldump -t productionまたはSHOW CREATE TABLE tを使用して本番サーバーから取得します)

demo_1874> CREATE TABLE t (...) ENGINE=InnoDB;

InnoDBが持っているテーブルスペースを破棄する

demo_1874> ALTER TABLE mydatabase.mytable DISCARD TABLESPACE; created.

t.*ファイルを部分バックアップから/var/lib/mysql/demo_1874にコピーし、mysql:mysqlにコピーして、部分バックアップからテーブルスペースをインポートします

demo_1874> ALTER TABLE t IMPORT TABLESPACE;

詳細は http://www.percona.com/doc/percona-xtrabackup/2.2/innobackupex/partial_backups_innobackupex.html を参照してください。

3
akuzminsky