MySQLのバックアップとリストア †
phpMyAdminだと、大きいデータを扱えない場合があるので、MySQLのコマンドで行う。
mysqldumpコマンド †
MySQLには、「mysqldump」というバックアップ用のコマンド(命令)が用意されている。
- mysqldumpコマンドの基本的な使い方
- mysqldumpコマンドの詳細なオプション
シェルスクリプトで自動実行 †
手作業だと入力ミスもあるので、シェルスクリプトで自動的にバックアップするようにする。
作業例 †
WebサーバーのMySQLデータをバックアップして、ローカルPCのMySQL上でリストアしてみる。
(作業内容を理解するために、とりあえず手動で。)
(参考)MySQL のデータベースのバックアップを行う - make world
(1) SSHでデータベースサーバーにログイン †
(2) ホームディレクトリに移動 †
$ pwd (現在のディレクトリを確認。ログイン直後はホームディレクトリ) /home/username/ (ホームディレクトリは「$HOME」という変数で表せる=後で使う)
(3) バックアップ用のディレクトリを作成 †
$ mkdir mysql $ cd mysql $ mysqldump -u username -p -x --databases yourdatabase > $HOME/mysql/yourdatabase.sql Password: (MySQLに登録しているusernameユーザーのパスワードを入力)
ここまでの操作で、/home/username/mysql/ に「yourdatabase.sql」というダンプファイル(バックアップデータ)が作成されているはず。
(4) データをダウンロード †
WinSCP等のSSHクライアントで、サーバー上のダンプファイルをローカルPCにダウンロードする。
保存する場所は、どこでも良い。
(後で使う「mysql」コマンドのパスが通っている場所=コマンドが使える場所なら、どこでもOK?)
(5) MySQLにインポートする。 †
(例)Windowsに「Bitnami」(LAMPスタック)をインストールして、BitnamiでMySQLを動かしている場合
C:\Bitnami\wampstack\mysql\data_backup
というフォルダを作成して、その中にダンプファイル「yourdatabase.sql」を置く。
コマンドプロンプトを起動して、「data_backup」フォルダに移動する。
C:\Bitnami\wampstack\mysql\data_backup>mysql -u username -p < yourdatabase.sql Enter password: (ローカルPCのMySQLに登録しているusernameユーザーのパスワードを入力)
というコマンドを実行する。
ここまでの操作で、「yourdatabase.sql」のデータが反映されているはず。
エラー対策 †
他のデータベースを参照しているビュー等があった場合は、インポート時に何らかのエラーメッセージが出るかも?
ERROR 1146 (42S02) at line 345: Table 'some_database.some_table' doesn't exist
=「some_database.some_table」が無いから失敗した例。
これは、「yourdatabase」にある「some_view」が、「some_database」の「some_table」を参照する設定になっていて、「some_view」が復元できなかった、等という場合。
→先に「some_database」をインポートして、「some_table」が存在している状態にしておかなければならない。
(6) phpMyAdminで確認 †
ダンプファイルからデータをリストア(復元)したら、phpMyAdmin等でデータを確認してみる。
データが正常に復元されていればOK