目次
やりたいこと
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ファイルにはヘッダ行があるので、除外しないと不要なデータが登録されるので注意。