SSHでSQLをインシテミル

この記事はだいぶ前に書かれたものなので情報が古いかもしれません

SSH経由でファイルサイズの大きいsqlファイルなんかをインポートする方法です。やり方は簡単。たったの4行。

ssh ユーザー名@ホスト名
mysql -h ホスト名 -u ユーザー名 -p
use データベース名
source インポートするsqlファイルのパス

こっから先は補足という名の蛇足なので、別にそんなのいらねーやって人は、ここで作業に戻ることをオススメシテミル。




MySQLなんかを使っていると、ファイルをエクスポートすることって、あるじゃないですか。バックアップ取ったりとか、バックアップ取ったりとか、あとはバックアップ取ったりとか。

そのバックアップ用に取っといたファイルをひょんなことからインポートする事態が発生したとき、まあ、簡単お手軽なのはphpMyAdminとかのインポート機能を使うことですよね。

でも、ファイルのサイズが大きいとそれが上手くできない場合がある。

phpMyAdminのインポートできるファイルサイズには限りがあるんですね。あれは確か、php.iniだか何だかの設定に影響を受けてたような気がするんですが……何だっけ。すいません、ど忘れしちゃいました。てへぺろ。


まあ、とにかくですね。あまりにも大きいファイルを上げようと思うと、phpMyAdminでは厳しいこともある。php.iniだかhttpd_confの設定をいじって限界を上げたところで、サイズがでかいファイルはアップロードするのに膨大な時間がかかってしまいますよね。下手したらデスゲームに参加して一人くらい殺って帰って来てもまだインポートが終わってないなんてことも……ないね。それはない。

何にせよ、テスト環境とかリリースしたばかりのサービスでもない限り、バックアップファイルってのはサイズが大きいのが相場です。世の中タイムイズマネーですから、膨大な時間の消費はぜひ避けたいところ。世の中には時給11万2000円なんて仕事(ゲーム?)もあるくらいだし、時間は決してお安くないのだよ。

それに、一刻も早くデータを復旧させなきゃ、みたいなときにそんなことしてたら、どんなクレームが来るか分からないですからね。少しでも早く作業が終えられる方法を取るに越したことはないわけで……。

で、どうするか。

WindowsのTeraTermとかマックのターミナルとか使って、SSHでサーバーに接続してそこからインポート作業を行ってしまうというやり方があります。

これだと早い。カール・ルイスの全力疾走とアイルトン・セナの乗ったF1カーの最高時速くらいの差がある。100MBくらいのsqlファイルでも数秒で終わる……かな?

とりあえず、タメシテミル?



SSHに接続シテミル

やり方は簡単。マックのターミナルだったら、起動して以下のコマンドを打つ。

ssh ユーザー名@ホスト名

例えばさくらサーバーなんかだと、「hoge@hoge.sakura.ne.jp」みたいな感じで接続できる。ようはサーバーにログインできるユーザーですね。FTPソフトを使って接続したりするときのユーザーで良いです。

上のコマンドを実行するとパスワードを求められるので、パスワードを入力しましょう。

TeraTermの場合でも基本は一緒だね。上みたいにコマンドを打つんじゃなくて、最初に接続先を登録しておくんだっけね。そんでその登録された接続先を選んでパスワードを入力すれば、サーバーに接続できるはず。



MySQLに接続シテミル

ログインできたら、MySQLにアクセスします。

mysql -h ホスト名 -u ユーザー名 -p

この場合のホストとかユーザーってのはあれね。サーバーに接続するやつじゃなくて、データベースにアクセスするときとかのやつね。ホストだったらlocalhostとか、さくらサーバーだとmysql***db.sakura.ne.jpみたいなあれ。ユーザーも同じ。

ここでもパスワードを求められるはずなので、パスワードを入力する。



データベースに接続シテミル

データベースを複数管理している場合も多いと思うので、インポートしたいデータベースをここで選びます。

use データベース名

まあ、これだけですね。



インシテミル

じゃあそろそろ時給11万2000円のデスゲームに……いや、sqlファイルのインポートと参りましょう。

source インポートするsqlファイルのパス

パスは絶対パスです。

これまたさくらサーバーでの話になりんすが、wwwの直下にsample.sqlみたいなファイルを置くと、打つべきコマンドは以下のようになるはず。

source /home/hogehoge/www/sample.sql

こんな感じですかねー。

useってコマンドでデータベースに接続した時点で、まさに言葉の通りデータベースに接続した状態になっているので、そのままターミナルなどの画面上でSQLを実行することもできます。SELECT文を投げたりね。

ターミナルとかでSQLの実行結果を見たりすると「おおっ、何かプログラマっぽい」ってなりません? なりませんかそうですか。



phpMyAdminを使わないとSQLのインポートができないよーって方は、SSHで接続できる環境にあるのであれば、今後はこれを実行シテミルと、良い感じになるよとオススメシテミル。

まだコメントはいただけてないみたい……
もしかしたら何か関連しているかも?