web-dev-qa-db-ja.com

phpmyadminから大規模なデータベースのコピーを作成する方法は?

同じサーバー上に自分のウェブサイトの開発環境を作成したい。しかし、私は479のテーブルを含む7Gbのデータベースを持っているので、そのデータベースのコピーを新しいDBに作成したいと考えています。

私はPHPmyadmin >> Operations >> copy database to機能の助けを借りてこれを試しました。しかし、失敗してエラーを返すたびに

Error in processing request Error code: 500 Error text: Internal Error. 

このデータベースをcpanelから新しいデータベースにコピーする他の方法/ソリューションがあることを知らせてくださいアドバイス

13
Narayan

注:コメントを読みました。理解できるので、コマンドラインにアクセスできません。チェックしてください Solution Two、これは間違いなく動作します。

あなたのために働く唯一の解決策(私のために12GBデータベースで働く)はコマンドラインから直接です:

Solution One

mysql -u root -p

set global net_buffer_length=1000000; --Set network buffer length to a large byte number

set global max_allowed_packet=1000000000; --Set maximum allowed packet size to a large byte number

SET foreign_key_checks = 0; --Disable foreign key checking to avoid delays, errors and unwanted behavior

source file.sql --Import your sql dump file

SET foreign_key_checks = 1; --Remember to enable foreign key checks when the procedure is complete!

Rootアクセス権がある場合は、bashスクリプトを作成できます。

#!/bin/sh 

# store start date to a variable
imeron=`date`

echo "Import started: OK"
dumpfile="/home/bob/bobiras.sql"

ddl="set names utf8; "
ddl="$ddl set global net_buffer_length=1000000;"
ddl="$ddl set global max_allowed_packet=1000000000; "
ddl="$ddl SET foreign_key_checks = 0; "
ddl="$ddl SET UNIQUE_CHECKS = 0; "
ddl="$ddl SET AUTOCOMMIT = 0; "
# if your dump file does not create a database, select one
ddl="$ddl USE jetdb; "
ddl="$ddl source $dumpfile; "
ddl="$ddl SET foreign_key_checks = 1; "
ddl="$ddl SET UNIQUE_CHECKS = 1; "
ddl="$ddl SET AUTOCOMMIT = 1; "
ddl="$ddl COMMIT ; "

echo "Import started: OK"

time mysql -h 127.0.0.1 -u root -proot -e "$ddl"

# store end date to a variable
imeron2=`date`

echo "Start import:$imeron"
echo "End import:$imeron2"

ソース

ソリューション2

また、共有ホスティングを使用していて、コマンドラインアクセスがないユーザーに非常に適した別のオプションもあります。このソリューションは、4〜5 GBのファイルで私に役立ちました。

  1. MySQLダンパー: ダウンロード (「MySQLダンパー」から直接SQLファイルをバックアップ/復元できるようになり、phpmyadminは不要になります)。
  2. ビッグダンプ: ダウンロード (圧縮ファイルとSQLファイルから復元するだけで、ビッグインポートが必要PHP大きなインポートのためのファイル編集$linespersession = 3000; への変更 $linespersession = 30000;

ソリューション3:

このソリューションは確実に機能しますが、遅いですが機能します。

(32ビットまたは64ビット)の試用版をダウンロード: Navicat MySQLバージョン12

インストール->そして試用として実行します。

その後、コンピューターIP(ローカルIPではなくインターネットIP)をcPanel(新しいデータベース/ホスティング)のMySQLリモートに追加します。 cPanelでワイルドカードIPを使用して、任意のIPからMySQLにアクセスできます。

Navicat MySQLに移動:Connectionをクリックして接続名を入力します。

次の「ホスト名/ IP」に「ホスティングIPアドレス」を追加します(localhostは使用しないでください)。ポートをそのままにします(ホスティングで別のポートが定義されている場合は、そのポートをここに配置します)。

データベースユーザー名パスワードを追加します

Test Connectionをクリックします。成功した場合は、[OK]をクリックします。

メイン画面で、左側の列にユーザー名で接続されているすべてのデータベースが表示されます。

SQLファイルをインポートするデータベースをダブルクリックします。

データベースのアイコンの色が変わり、「テーブル/ビュー/関数など」と表示されます。

右クリックデータベースを右クリックして、「SQLファイルを実行します "( http://prntscr.com/gs6ef1 )。ファイルを選択し、必要に応じて「エラー時に続行」を選択して、最後に実行します。ネットワーク接続の速度とコンピュータのパフォーマンスによっては、時間がかかる場合があります。

2

データベースのエクスポートを作成します。これは、PhpMyAdminインターフェイスを介して簡単に実行できます。 DBエクスポートをダウンロードしたら、エクスポートしたデータを配置する新しいDBを作成する必要があります。これも、PhpMyAdminユーザーインターフェイスを使用して簡単に実行できます。

アップロードするために、Import -> Browse your computer 2MBの制限があるため。 1つの解決策は、Import -> Select from the web server upload directory /var/lib/phpMyAdmin/upload/。エクスポートしたデータをこのディレクトリにアップロードします。その後、アップロードしたデータがその隣のドロップダウンにリストされます。

enter image description here

これも失敗した場合は、コマンドラインインポートを使用できます。

mysql -u user -p db_name < /path/to/file.sql
1
user1506104

PhpMyAdminに限定?一度に全部やってはいけません

大きなデータセットはダンプしないでください(バックアップ用でない限り)、代わりにexportデータベースデータなしデータ、次に、一度に1つのテーブルをコピーします(DBからDBに直接)。

スキーマのエクスポート/インポート

まず、phpMyAdminを介してデータベースschemaをエクスポートonlyします(チェックを解除data(エクスポートオプション)。次に、それを新しいデータベース名にインポートします。

あるいは、DBを作成したら、以下のようなものを使用して、以下のようなステートメントを生成できます。この方法の欠点は、制約やsprocなどが失われる可能性があることです。

CREATE TABLE [devDB].[table] LIKE [prodDB].[table]

一度に1つのテーブルのデータをコピーします。

適切なエディターを使用して、必要な470の挿入ステートメントを作成します。まず、テーブル名のリストから、古き良き検索と置換を使用します。

INSERT INTO [devDB].[table] SELECT * FROM [prodDB].[table];

これは可能性がありますチョーク、環境によって異なります。もしdoesした場合は、devデータベースをドロップして再作成します(またはphpMyAdminを介してすべてのテーブルを空にします)。次に、INSERTコマンドを一度にいくつかのテーブルで実行します。

データベース管理にはCLIが必要

ここで直面している実際の問題は、コマンドラインインターフェイスにアクセスせずにデータベース管理を行おうとしていることです。大規模なデータセットを効率的に移行するには、非常に複雑な詳細事項があり、そのほとんどはmysqldumpなどのツールを使用しないと解決できません。

1
Tony Chiboucas

要件にはPHPMyAdminが含まれているため、私の提案は次のとおりです。

  1. 必要なデータベースを選択します
  2. [エクスポート]タブに移動します
  3. 「カスタム-可能なすべてのオプションを表示する」ラジオボタンをクリックします
  4. [出力をファイルに保存]ラジオボタンオプションで、[圧縮:]に[gzip圧縮]を選択します。
  5. 「コメントを表示」チェックを外します(スペースを節約するため)。
  6. エクスポートを完了する

次に、生成されたファイルを新しいデータベースにインポートしてみます(十分なリソースがある場合-これは可能です)。

注:以前の経験では、圧縮を使用するとより大きなDBエクスポート/インポート操作が可能になるが、共有ホスティング環境の上限をテストしていません(これはcPanelのコメントで想定しています)。

編集:エクスポートファイルが作成されたら、新しいデータベースを選択し(既に作成されている場合)、[インポート]タブに移動し、エクスポートから作成されたファイルを選択してインポートプロセスを開始します。

1
Berckoff

ローカルサーバーにデータベースがある場合は、それをエクスポートし、BigDumpを使用してグローバルサーバーの新しいデータベースに挿入することができます BigDump

1
John

これが私が直面したときの問題の処理方法です。残念ながら、これはMac OSでのみ機能します。

  • ダウンロード Sequel Pro -完全に無料で、1年以上、私にとっては非常にうまく機能しています。
  • サーバーのデータベースにリモート接続します。おそらく、CPANELの「リモートMYSQL」セクションにIPアドレスを追加する必要があります。資格情報がない場合は、おそらくWebサイトの構成ファイルから取得できます。
  • サーバーに入ったら、すべてのテーブルを選択し、セカンダリクリックして、[エクスポート]> [SQLダンプとして]を選択します。おそらく、設定を編集する必要はありません。 「エクスポート」をクリックします。
  • ローカルサーバーデータベースにログインし、トップメニューから[クエリ]を選択します。
  • エクスポートからダウンロードされたファイルをドラッグアンドドロップすると、SQLダンプからデータベースが自動的にセットアップされます。

これがお役に立てば幸いです。それは少しの回避策ですが、特にPMAが失敗した場合、私にとっては非常にうまくいきました。

1
Blaise

最も簡単な方法は、phpmyadminからデータをエクスポートすることです。それはあなたのデータのバックアップを作成します。

しかし、インポート/エクスポートを介して大量のデータを転送すると、エラーが発生することがあります。

mysqldumpを試してデータをバックアップすることもできます。

herehere のリンクをいくつか見つけました。

これは、mysqldumpデータベースのバックアップ ドキュメント です。

それが役に立てば幸い。 :D

1
Shachi

次のようにmysqldumpを使用できます

mysqldump —user= —password= --default-character-set=utf8

また、実際にはcronジョブを使用してMySQLデータベースのバックアップを定期的に作成するために長い時間を書き込んだ私のシェルスクリプトを使用することもできます。

#!/bin/sh
now="$(date +'%d_%m_%Y_%H_%M_%S')"
filename="db_backup_$now".gz
backupfolder=“"
fullpathbackupfile="$backupfolder/$filename"
logfile="$backupfolder/"backup_log_"$(date +'%Y_%m')".txt
echo "mysqldump started at $(date +'%d-%m-%Y %H:%M:%S')" >> "$logfile"
mysqldump —user= —password= --default-character-set=utf8  | gzip > "$fullpathbackupfile"
echo "mysqldump finished at $(date +'%d-%m-%Y %H:%M:%S')" >> "$logfile"
chown  "$fullpathbackupfile"
chown  "$logfile"
echo "file permission changed" >> "$logfile"
find "$backupfolder" -name db_backup_* -mtime +2 -exec rm {} \;
echo "old files deleted" >> "$logfile"
echo "operation finished at $(date +'%d-%m-%Y %H:%M:%S')" >> "$logfile"
echo "*****************" >> "$logfile"
exit 0

CPanelまたはLinuxでのMySQLデータベースのバックアップのスケジュールに関する記事をすでに書いています。

1
Ravi

PHPMyAdminがそのサイズのデータ​​ベース(PHPのアップロード/ダウンロードの制限、メモリの制約、スクリプトの実行時間)を処理するのではないかと思います。コンソールにアクセスできる場合は、mysqlコマンドラインからエクスポート/インポートを実行することをお勧めします。

書き出す:

    $ mysqldump -u <user> -p<pass> <liveDatabase> | gzip > export.sql.gz

そしてインポート:

    $ gunzip < export.sql.gz | mysql -u <user> -p<pass> <devDatabase>

たとえば、新しい開発データベースを作成した後。 PHPMyAdminまたはコマンドライン経由。

そうでなければ、Apache/PHP環境にしかアクセスできない場合は、エクスポートを小さなチャンクに分割するエクスポートユーティリティを探します。 MySQLDumper が思い浮かびますが、数年前のものであり、AFAIKは積極的に保守されておらず、PHP 7+と互換性がありません。しかし、少なくとも プルリクエスト があり、PHP7(テストされていません)で動作します。

コメントに基づいて編集:

エクスポートがすでに存在し、インポート時にエラーが発生する場合は、.htaccessのエントリを使用してPHP環境の制限を増やし、php.iniを変更するか、 ini_set、環境で利用できるものは何でも構いません。関連する設定は、たとえば.htaccessを介した設定です(これはmod_phpを使用するApache環境でのみ機能し、ホスティング事業者も制御できます):

      php_value max_execution_time 3600
      php_value post_max_size 8000M
      php_value upload_max_filesize 8000M
      php_value max_input_time 3600

これは、x32/x64の問題やホスティング事業者の制限に応じて、機能する場合と機能しない場合があります。さらに、ExecTimeLimitのPHPmyadmin設定を調整する必要があります-通常、PHPMyAdminインストールのconfig.default.phpにあります。

      $cfg['ExecTimeLimit'] = 300;

      $cfg['ExecTimeLimit'] = 0;

そして最後に、おそらく、より大きなパケットを許可し、「接続が失われた」エラーを取り除くために、MySQL構成を調整する必要があります。my.iniの[mysqld]セクション:

      max_allowed_packet=256M
1
Morphine