#norelated
#contents
[[MySQL]]
* MySQLのバックアップとリストア [#t9fe2df0]
phpMyAdminだと、大きいデータを扱えない場合があるので、MySQLのコマンドで行う。
* mysqldumpコマンド [#h5774757]
MySQLには、「mysqldump」というバックアップ用のコマンド(命令)が用意されている。
- mysqldumpコマンドの基本的な使い方
-- [[mysqldumpでバックアップ&復元 - phpspot>http://phpspot.net/php/pgmysqldump%E3%81%A7%E3%83%90%E3%83%83%E3%82%AF%E3%82%A2%E3%83%83%E3%83%97%EF%BC%86%E5%BE%A9%E5%85%83.html]]
-- [[MySQLのバックアップ/復元(ダンプ/インポート/dump/import) 基本コマンド メモ - Qiita>http://qiita.com/morizyun/items/f45dc580bac0ebba79ab]]
- mysqldumpコマンドの詳細なオプション
-- [[MySQL :: MySQL 5.6 リファレンスマニュアル :: 4.5.4 mysqldump — データベースバックアッププログラム>https://dev.mysql.com/doc/refman/5.6/ja/mysqldump.html]]
* シェルスクリプトで自動実行 [#hfd08982]
手作業だと入力ミスもあるので、シェルスクリプトで自動的にバックアップするようにする。
- [[MySQLデータベース自動バックアップ運用(mysqldump) - CentOSで自宅サーバー構築>https://centossrv.com/mysql-backup.shtml]]
* 作業例 [#x0b64f5f]
WebサーバーのMySQLデータをバックアップして、ローカルPCのMySQL上でリストアしてみる。
(作業内容を理解するために、とりあえず手動で。)
(参考)[[MySQL のデータベースのバックアップを行う - make world>http://d.hatena.ne.jp/littlebuddha/20090325/1237951258]]
** (1) SSHでデータベースサーバーにログイン [#ncaad489]
→ [[SSHクライアント]]
** (2) ホームディレクトリに移動 [#bd3bdda8]
$ pwd (現在のディレクトリを確認。ログイン直後はホームディレクトリ)
/home/username/ (ホームディレクトリは「$HOME」という変数で表せる=後で使う)
** (3) バックアップ用のディレクトリを作成 [#n6516895]
$ mkdir mysql
$ cd mysql
$ mysqldump -u username -p -x --databases yourdatabase > $HOME/mysql/yourdatabase.sql
Password: (MySQLに登録しているusernameユーザーのパスワードを入力)
ここまでの操作で、/home/username/mysql/ に「yourdatabase.sql」というダンプファイル(バックアップデータ)が作成されているはず。
** (4) データをダウンロード [#ae03add5]
WinSCP等の[[SSHクライアント]]で、サーバー上のダンプファイルをローカルPCにダウンロードする。
保存する場所は、どこでも良い。
(後で使う「mysql」コマンドのパスが通っている場所=コマンドが使える場所なら、どこでもOK?)
** (5) MySQLにインポートする。 [#jfb61688]
(例)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」のデータが反映されているはず。
*** エラー対策 [#u105356d]
他のデータベースを参照しているビュー等があった場合は、インポート時に何らかのエラーメッセージが出るかも?
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で確認 [#k5b8c4ec]
ダンプファイルからデータをリストア(復元)したら、phpMyAdmin等でデータを確認してみる。
データが正常に復元されていればOK