XAMPPのMySQLでテーブルをリストアする方法
XAMPPのMySQLの使い方をメモ。
WebサーバーのMySQLをバックアップして、XAMPPのMySQLにリストアしたいです。
データベースを丸ごとバックアップ&リストアする方法は以下にまとめました。
データ量が大きくて一発でリストアするのがキツイ場合は、テーブル毎に分割してリストアしてみます。
今回は、テーブルをリストアする方法をメモ。
テーブルのバックアップ
(2) MySQLのテーブルをバックアップする。
・「db_name」というデータベース
・「table_name」というテーブル
・「user_name」というユーザー
・「/home/your_directory/」というディレクトリーに保存する
・「table_name.dump」というファイル名で保存する
という場合、以下のコマンドを打つ。
user_nameのパスワードを入力して、エンターキーを押す。
(説明)
・「-t」オプションを付けると、テーブルをDROP、CREATEするSQL文は省略されます。
=XAMPPのMySQLでは、すでに「db_name」というデータベースがあり、その中に「table_name」という空のテーブルも用意されていて、データだけ流し込みたい場合を想定してます。
=ダンプファイルのSQLは、INSERT文の塊になります。
(参考)
「/home/your_directory/」フォルダーの中に「table_name.dump」というファイルが出来ていればバックアップOK。
(テーブルのデータが大き過ぎて、テーブル丸ごとのバックアップがキツイ場合、エクスポートする行数を指定して、テーブルを分割してエクスポートする等の対処が必要でしょう。)
(3) ダンプファイルをダウンロード
ローカルPC(Windows)に上記で作成したダンプファイルをダウンロードする。
テーブルのリストア
ダウンロードしたダンプファイルを使って、XAMPPのMySQLでテーブルを復元してみます。
(4) XAMPPを起動して、MySQLを起動させておく。
(以下の説明で、パスは適宜自分の環境に合わせて読み替えてください)
・XAMPPは、Cドライブの直下にインストールしたものとする。
・「mysql.exe」や「mysqldump.exe」は、「C:\xampp\mysql\bin」の中にあるものとする。
・「table_name.dump」は「C:\backup」の中にコピーしたとする。
(5) XAMPPのphpMyAdminで「db_name」というデータベースを用意しておく。
(6) XAMPPのphpMyAdminで「db_name」の中に「table_name」というテーブルを用意しておく。
(7) バッチファイルを作る。
操作を間違えるといけないので、あらかじめコマンドをバッチファイルに書いておく。
・Cドライブの「backup」フォルダの中に「test.bat」というファイルを作成する。
・test.batをテキストエディタで開いて、以下の内容をコピペする。
(説明)
・XAMPPのMySQLのユーザーは「root」を使用している。→別のユーザー名でもOK
・「root」のパスワードが「1234」だった場合、-pの後に続けて書く。
(「-p1234」みたいに「mysql -u root -p1234 ~~~」と書く。)
(参考)
(8) バッチファイルを実行する。
・test.batをダブルクリックする。
・以下のような画面が出たら、エンターキーを押す。
・実行が終わると「続行するには何かキーを押してください」というメッセージが表示されるので、エンターキーなどを適当に押しておけばOK。
phpMyAdminでテーブルの中身を見て、復元されていることを確認しておきます。
これでテーブル毎のリストア(復元)ができました。
max_allowed_packetサイズの変更
データをインポートするとき、
ERROR 2006 (HY000) at line ***: MySQL server has gone away
というようなエラーメッセージが出たら、MySQLの設定を変更してみます。
(参考)
漢(オトコ)のコンピュータ道: 限界までMySQLを使い尽くす!!
SQL文の最大長
MySQLサーバーが実行出来るSQL文の最大長は、max_allowed_packetシステム変数で表される。max_allowed_packetの最大値は1GBである。max_allowed_packetの値はセッションごとにも設定可能なので、デフォルトではそこそこの値(16MBなど)に設定しておいて、必要に応じて大きな対を使うと良いだろう。
MySQLトラブルシューティング - ERROR 2006 (HY000) at line ***: MySQL server has gone away - 長生村本郷Engineers'Blog
対策
- my.cnf に設定 (恒久的)
my.cnf に [mysqld] に属する様に設定します。
10MBに設定してみます。
[mysqld]
max_allowed_packet=10MB以上設定して再起動で設定反映完了です。
XAMPPの場合、C:\xampp\mysql\bin\my.ini に max_allowed_packet の設定がありました。
この数字を適当に大きくして、MySQLを再起動すればOKです。
これでデータの大きいSQL文を実行してもエラーが出なくなりました。
実行中の確認
※インポートの実行にすごい時間がかかって、処理に失敗していないか?心配なときはWindowsタスクマネージャーで「プロセス」→「mysqld.exe」の動きを見てみます。
=インポートの実行中は、mysqld.exeがモリモリ動いて、止まっていないことが確認できます。