SSH接続でMySQLをエクスポート、インポートする
- 公開日:2021/4/8
データベースの容量が大きくてphpMyAdminでエクスポートが正常終了できずにエラーになってしまったのでSSH接続してコマンドでエクスポートとインポートをしました。
私が、phpMyAdminで正常終了できなかったときに表示されたエラーメッセージはこれです。
Your export is incomplete, due to a low execution time limit at the PHP level.
直訳:PHPレベルでの実行時間制限が低いため、エクスポートは不完全です。
hetemlのphpMyAdminでエクスポートしようとしたときに発生しました。hetemlはSSHが無料で使えるよう用意されているので、迷わずphpMyAdminはあきらめてSSHでエクスポートします。
SSH接続する
SSH接続の方法は複数ありますが、各接続方法については割愛します。
hetemlの場合マニュアルが便利です。
SSHのご利用方法 | hetemlマニュアル
私はターミナルで接続したのでそれですすめます。
ターミナル(Mac)| SSHソフト設定 | hetemlマニュアル
$ ssh -p 2222 [SSHアカウント名]@[SSHホスト名]
SSH接続が成功すると以下のような表示になります。
[hoge@server ~]$
hoge@server
はサーバ固有でアカウント名等が入っています。意識する必要があるのは現在位置です。エクスポートしたファイルがどこに保存されるか、どこにファイルを配置すればインポートできるかに関係してきます。
現在位置は以下で確認できます。
[hoge@server ~]$pwd
/home/users/2/hoge/
この結果もサーバ固有になりますが、たいていはユーザ領域の最上位階層にいると思います。FTP接続時の一番上の階層です。
必要に応じて、cd
コマンドでディレクトリ移動してください。
エクスポートする
以下のコマンドを実行するとエクスポートできます。
[hoge@server ~]$mysqldump --single-transaction -u [ユーザー名] -p[パスワード] -h [ホスト名] [データベース名] > [保存するファイル名].sql
注意すべきは-p
と[パスワード]
の間は半角スペース不要という点です。
エクスポートするテーブルを指定する
データベース名の後ろにテーブル名を指定すると任意のテーブルのみエクスポートできます。
[hoge@server ~]$mysqldump --single-transaction -u [ユーザー名] -p[パスワード] -h [ホスト名] [データベース名] [テーブル名1] [テーブル名2] > [保存するファイル名].sql
エクスポートファイルは実行したときにいた階層に保存されるので、FTP接続して確認し、必要に応じてダウンロードします。
インポートする
今回のようにphpMyAdminでエクスポートできなかった場合はインポートも正常にできない可能性が高いのでインポートもSSH接続で行います。
インポートしたいファイルをサーバ上に設置して、その階層に移動してから以下を実行するだけです。
[hoge@server ~]$mysql -u [ユーザー名] -p[パスワード] -h [ホスト名] [データベース名] < [ファイル名]
エクスポート時と同様に、注意すべきは-p
と[パスワード]
の間は半角スペース不要という点です。
これで大容量のMySQLをSSH接続でエクスポート、インポートできました。
必要な作業が完了したら、SSHはログアウトしておきます。
[hoge@server ~]$exit
参考サイト
SSH接続からデータベースをエクスポートしバックアップを行う方法 | ブリュの公式ブログ.net(for IT)
大容量のMySQLをエクスポート/インポートする方法| 総合サービス WEB開発備忘録