【MySQL】LOAD DATA INFILEでバックアップデータを高速リストアする

やりたいこと

MySQLでは、LOAD DATA INFILEを用いることで、レコード登録のオーバーヘッドが減り、mysqldumpを用いるより処理が20倍早くなる。

https://dev.mysql.com/doc/refman/5.6/ja/load-data.html

https://dev.mysql.com/doc/refman/5.6/ja/insert-speed.html

LOAD DATA INFILEではTSVを読み込めるので、データベースからTSVのバックアップファイルを作成し、レコードをリストアできるようにする。

環境

OS:Red Hat Enterprise Linux 4

MySQL:5.6

手順

バックアップ

コンソールにて、レコードをTSVとして出力するコマンドを実行する。

mysql -u {ユーザ名} -p {データベース名} -e 'SELECT * FROM {テーブル名};' > {ファイル名}

テーブルの数だけ繰り返し実行が必要なので、クエリはあらかじめEXCELなど別のツールで生成しておくと楽。

mysql

主にmysqlへの接続を行うためのコマンド。

オプションを指定することで、ログインの設定を行う。

-u

サーバへ接続するMySQL内のユーザ名を指定する。

-p

パスワードを利用してログインすることをMySQLに明示する。

-e ‘SELECT * FROM {テーブル名};’

コマンドからMySQLのクエリを実行する。

条件を指定すれば、必要なデータを選んでバックアップできる。

今回は検索のSELECTだが、その他のクエリも実行できる。

> {ファイル名}

クエリの実行結果をファイルに出力する。

レコードはTSVとして出力され、1行目にはヘッダ行としてカラムの名称が設定される。

圧縮

出力したTSVは、データ量によってはGBを超える。

もしディスク容量が気になる場合は圧縮する。

tar -zcvf {好きなファイル名} {圧縮したいディレクトリ}

tar

複数のファイルがまとまっている、アーカイブを操作するコマンド。

オプションを指定することで、アーカイブの操作を指定できる。

-z

アーカイブファイルをgzip形式で圧縮し、ファイル容量を小さくする。

-c

新しくアーカイブファイルを作成するときに指定する。

-v

処理の対象となったファイルを表示する。

-f

生成するアーカイブの名前を指定する。

展開

gzip形式で圧縮したアーカイブを展開するときは以下コマンドを使用する。

tar -zxvf {圧縮したアーカイブファイル}

-z

gzip形式で圧縮されたアーカイブファイルを指定した場合、解凍する。

-x

アーカイブからファイルを展開する。

-f

展開するアーカイブの名前を指定する。

初期化

TRUNCATE {テーブル名};

テーブルにデータを投入し直すため、TRUNCATEでテーブルを空にする。

TRUNCATEはトランザクションが始まらずそのままレコードが削除される。

実行する前に必ず問題がないか確認する。

リストア

TSVファイルからデータを復元する。

BEGIN;
LOAD DATA INFILE {TSVファイル} INTO TABLE {テーブル名} IGNORE 1 LINES;
COMMIT;

LOAD DATA INFILE

読み込むTSVファイルと登録先のテーブルを指定する。

トランザクション

AUTOCOMMITがOFFの場合はBEGINとCOMMITしないと、データが登録されなくなるので注意。

IGNORE 1 LINES

1行目を取り込まないようにする。

TSVファイルにはヘッダ行があるので、除外しないと不要なデータが登録されるので注意。

コメントを残す

メールアドレスが公開されることはありません。