大きなSQLファイルphpmyadminのインポート


12

このSQLファイルをphpmyadminにインポートしようとしていますが、このメッセージが表示されます

#1064 - You have an error in your SQL syntax; 
check the manual that corresponds to your MySQL server version 
for the right syntax to use near 
'<br /> <b>Fatal error</b>: Allowed memory size of 134217728 bytes exhausted (tr' at line 1

このインポートを行うにはどうすればよいですか?

回答:


12

メモリサイズをさらに増やすことができないと仮定すると、いくつかのオプションがあります。

  • コマンドラインに精通しておらず、本当にGUIスタイルのインポートに固執したい場合は、BigDump(http://www.ozerov.de/bigdump/)を使用できます。一度使ったことがありますが、しばらく経ちました。私が覚えていることから、bigdump.phpという名前のファイル(いくつかの指示付き)をダウンロードし、PHPMYADMIN経由でインポートするには大きすぎるMySQL DBダンプファイルがあるディレクトリのWebサーバーに配置します。次に、ブラウザを使用して、http://your-website.com/bigdump.phpのような場所に移動します。

  • コマンドラインに精通しており、Linuxベースのシステムを使用している場合は、次のようなコードを使用できます。

    mysql -u USERNAME -p DATABASENAME <FILENAME.sql

ただし、このコマンドを実行する前に、データベースとユーザー(データベースに対する特権を持つ)が存在する必要があります。注上記のコマンドを別のソースからコピーしました。私はいつも次のようにダンプと復元を行います:DUMP:mysqldump -u DB_USER -h DB_HOST -pDB_PASSWORD DB_NAME | gzip -9 > DB_NAME.sql.gz RESTORE:gunzip < PATH_TO_DUMP/DB_NAME.sql.gz | mysql -u DB_USER -pDB_PASSWORD DB_NAME

  • 最後に、最も痛いのは、個々のテーブルまたはテーブルのグループを十分に小さなダンプにダンプすることです。次に、PHPMYADMINを使用して、これらの個々のダンプを1つずつ復元します。

FTPおよび復元手順:

ここからFileZillaをダウンロードしてください:http : //filezilla-project.org/download.php?type=client

通常、SSH(コマンドラインログイン)と同じログインとパスワードを使用して、サーバー(特に共有ホスト)にFTPで接続できます。FileZillaでサーバーへの接続を適切に設定してください。

接続すると、デフォルトのパスはおそらく$ HOMEフォルダー(nixマシン上)になります。多くのFTPを実行する予定がない場合は、そこに必要なものをダンプするだけです。コマンドラインからいつでも移動できます。

MySQLダンプを$ HOMEフォルダーにFTP転送した場合、mydbという名前のDBおよびmydb.sql.gzという名前のdbダンプファイル($ HOMEフォルダー内)のRESTOREコマンドは次のようになります。

gunzip < $HOME/mydb.sql.gz | mysql -u DB_USER -pDB_PASSWORD mydb

DB_USERとDB_PASSWORDの値を、DB用にセットアップしたユーザーとパスワードに変更する必要があることは明らかです。

覚えておいてください:

  • RESTOREコマンドを実行する前に、DBがすでに存在している必要があります(ただし空である必要があります)
  • DBのDB_USERおよびDB_PASSWORDは、RESTOREコマンドの前にDBに対してセットアップする必要があります(PHPMYADMIN-Privilegesタブからこれを行うことができます)
  • PHPMYADMINからDB_USERを設定すると、デフォルトでDB_USERがローカルホスト(DBがホストされているサーバー)からDBにアクセスすることのみが許可されます。私は、これがあなたの状況の助成に適していると思っています。より高度なDUMPおよびRESTOREを使用する場合は、完全に別のマシンから実行することをお勧めします。これは難しくはありませんが、適切な特権を持つDB_USERとさらにいくつかの情報が必要です。

DBをFTPして復元する...ステップバイステップ

  1. デスクトップで圧縮されたMySQLダンプファイルを見つけます(例:C:\ Web \ DB \ Dumps \ mydb.sql.zip)
  2. FileZillaをダウンロードしてインストールする
  3. FileZillaで[ファイル]-> [サイトマネージャー]に移動し、[新しいサイト]ボタン(GUIの左下の四分円)をクリックします。ホストをDESTINATIONサーバーにあるドメイン(例:dest.com)に設定します。プロトコルをFTPまたはSFTPに設定します(これはホスティングに依存しますので、お尋ねください)。ユーザーとパスワードを設定します(例:ユーザー=許可、パスワード=許可のパスワード)-FTPプロトコルがSFTPの場合、有効なSSHログイン資格情報のセットが機能するはずです。
  4. (FileZillaで)[接続]をクリックします(左下のボタン)
  5. (FileZillaの場合)リモートサーバー(DESTINATIONサーバー)に接続したら、FileZillaの左側を使用して、手順1で見つけたダンプファイルがあるディレクトリに移動します。(ローカルマシンのパスは左端の約半分にあり、ローカルサイト:というラベルが付いています。この例では、ローカルサイト:の横のテキストボックスはC:\ Web \ DB \ Dumpsになります。)
  6. (FileZillaの場合)リモートサイトを見つけます:Local Site:の右側にあるラベル。
  7. (FileZillaの場合)FileDillaが開くフォルダーにDB DUMPを配置できない技術的な理由はありません。おそらくデフォルトで$ HOMEディレクトリになります。DBダンプを特定のディレクトリに配置する理由がない場合(組織の目的など)、リモートサイトのパスはそのままにしておきます。そのパスを書き留めます(Linuxの例:/ usr / grant)。
  8. (FileZillaの場合)ローカルサイトの下のツリーの下にあるFileZillaの左半分で、ローカルマシン上のファイルを見つけます。ステップ5で見つけたラベル。そのファイルをダブルクリックすると、FileZillaがリモートサイトにFTPします。
  9. DESTINATIONサーバーのPHPMYADMIN内で、新しいデータベースを作成します([新しいデータベースの作成]テキストボックスに「mydb」と入力し、[作成]ボタンをクリックします)。
  10. (PHPMYADMINの場合)左側のメニューからmydbを選択します。
  11. (PHPMYADMINの場合)[特権]タブ(右上)をクリックします。そのページで[新しいユーザーの追加]をクリックします。
  12. (PHPMYADMIN-> Privileges-> Add New Userで)ユーザー名(例:mydb_grant)とパスワード(例:mydb_password)を入力します。[ホスト]ドロップダウンで[ローカル]を選択します。[データベースのすべての権限を付与する]の横のラジオボタンが選択されていることを確認します。次に、[Go](画面の右下)をクリックします。
  13. DESTINATIONサーバーにSSHで接続します。
  14. (SSHターミナルで)手順7で書き留めたディレクトリに移動します。- cd $HOMEやなどのコマンドを使用しcd /usr/grantます。(Linuxマシンでは、$ HOMEは/ usr / grantのような環境変数です。)
  15. (SSHターミナルで)次のコマンドを実行しますgunzip < /usr/grant/mydb.sql.gz | mysql -u mydb_grant -pmydb_password mydb(-pとパスワードの間にスペースはありません。これが必要な方法であり、タイプミスではないためです)。

最後のコマンドが完了すると、データベースが復元されます。私が提供したDBユーザーとパスワードを使用することはお勧めしません。単に、より安全な独自の選択肢に置き換えてください。

FTPを使用しない異なるサーバーでのダンプと復元

FTPの内容をスキップして、DUMPのやり直しを気にしない場合は、次の方法で実行できます。

  1. DESTINATIONサーバーにログインします(DBが存在する場所-destination.comと呼びます)
  2. DESTINATIONサーバーで上記のようにDB、ユーザー、および適切な権限を作成します
  3. SOURCEサーバーの権限でSOURCE_DB_USERがDBにリモートでアクセスできることを確認します-dest.comまたは%(%-正しいユーザー名とパスワードを持っている場合はすべての人とどこからでも)からのアクセスを許可します
  4. DESTINATIONサーバーで実行:mysqldump -u SOURCE_DB_USER -h source.com -pSOURCE_DB_PASSWORD mydb| gzip -9 > $HOME/mydb.sql.gzsource.comはSOURCEサーバー(DBが現在存在する場所)
  5. 次に(DESTINATIONサーバーで)実行します: gunzip < $HOME/mydb.sql.gz | mysql -u DEST_DB_USER -pDEST_DB_PASSWORD mydb

DBをあるサーバーから別のサーバーに移動するために必要な作業はこれだけです。警告は、専用のUbuntu(標準のLAMPを使用)とDreamhostのVPSサーバー(これはCentOSを実行していると思われますが、間違っている可能性があります)でのみこれを行ったことです。


3

あなたはできる:

  • 増加する memory_limit
  • 増加する post_max_size
  • 増加する max_execution_time
  • これをすべて行った後、Apacheを再起動する必要があります。
  • またはビッグダンプを使用

1

SQLファイルは圧縮されていますか?6MBの圧縮sqlファイルでこの問題が発生しました。53MBの非圧縮sqlファイルに解凍し、機能しました。インプロセスでダンプファイルを解凍すると、すべてのメモリが消費されます。


0

mysqlを使用してサーバーにsshアクセスできる場合は、mysqlダンプを含むファイルをある場所に配置するよりも、mysqlコンソールを入力します。

mysql -u myUser myDatabase

または、mysqlサーバーがlocalhost以外の場所にあり、localhostからの接続だけでなく以下を許可する場合:

mysql -u myUser -h mysql.example.com myDatabase

それより、mysqlユーザーのパスワードが求められます。これで、mysqlコンソールが表示されます。ここに入力できます

source ~/mydump.sql;

ダンプのコマンドがどのように実行されるかがわかります。

この方法では、PHPのメモリ制限は気にしません。


0

データベースのサイズが128 MBを超える場合、データベースを部分的に分割します。

SQL Dump Splitterソフトウェアを使用する

SQL Dump Splitterは、巨大なデータベースを小さなSQLファイルに簡単に分割することを完全に制御できる430 KBのアプリケーションです。SQL Dump Splitterを使用すると、次のことができます。

  • 各チャンクのサイズを選択します
  • コメントをスキップすることもできます(DBのサイズを小さくすることもできます)
  • アクティビティを自動化します。

アクティビティをどのように自動化しますか?私はスプリッターを使用していますが、それがどのように機能するのかわかりません...ファイルをどのチャンクに分割するかを教えずに分割を完了しましたが、今では使用するのに役立つヘルプやFAQはありません。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.