【Linux】MySQLをgzipからインポートする方法【CORESERVER】

MySQLのデータをgzip形式でエクスポートした場合、今度は、逆にインポート処理が必要になる場合があります。

そこで、ここでは、gzip形式のバックアップファイルから、MySQLデータをリストアしてインポートする方法を覚書しておきます。

なお、使用サーバーは、CORESERVERです。また、お約束ですが、ご利用は、自己責任でお願いします。あと、もちろん、phpMyAdminからインポートする方法等もありますが、ここでは取り上げません。

■ SSHでコマンドラインから実行する方法

まず、SSHログインしていて、コマンドラインから実行するには次のコマンドでインポートが可能です。

zcat /virtual/yours/backup/sample.gz |
mysql -h localhost -u user --password=pass your_db

上記スクリプトは、実質1行です。また、赤字は、ユーザー依存のデータであり、適当な値に置き換えが必要です。

簡単に解説しておくと、zcatコマンドで、gzファイル(絶対パス)を開き読み込みます。その後、パイプ(|)でmysqlコマンドに渡し、読み込んだデータ(SQL)を処理します。

SSHでコマンドラインからインポートすると処理が軽いので短時間でインポートが済むメリットがあります。

■ CRONから自動実行する方法

次に、上記スクリプトを改良して、CRONから、実行できるようにしたスクリプトを紹介します。使い方としては、毎日バックアップしたデータから、日毎の最新データを毎日、自動的にインポートする処理等が考えられます。

なお、これもCORESERVERで実行する場合です。shファイルとして保存し、CRON設定画面で処理ができるようにしておきます。例えば、import.shと保存して、CRON設定画面でファイル等を指定します。

#!/bin/sh

DATE=`date -d '1 days ago' +'%Y%m%d'` 
EXT=.gz

zcat /virtual/yours/db_backup/$DATE$EXT | 
/usr/local/mysql/bin/mysql -h localhost
  -u user --password=pass your_db

exit

ピンクの文字は、bashの変数となっています。変数の前後にはスペースは入れません。また、gzファイルは、20140227.gzのように日付をファイル名にしておきます。

ここでは、1日前のデータを利用したいので、’1 days ago’を指定していますが、これを消せば、当日のデータがインポートされます。

最初のスクリプトと異なるのは、mysqlコマンドが絶対パスになっていることです。CORESERVERでは、CRONから実行する場合、絶対パスにしないと動作しませんでした。パスを解決できないからと思われます。

なお、コマンドのパスを調べるには、whichコマンドで確認することができます。

以上、MySQLをgzipからインポートする方法の覚書でした。

カテゴリー: UNIX/Linux, XREA/CORESERVER パーマリンク

コメントを残す

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