SSH接続でMySQLをエクスポート、インポートする

  • 公開日:2021/4/8
この記事は最終更新日から2年以上が経過しています。

データベースの容量が大きくて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開発備忘録