同じサーバー上に自分のウェブサイトの開発環境を作成したい。しかし、私は479のテーブルを含む7Gbのデータベースを持っているので、そのデータベースのコピーを新しいDBに作成したいと考えています。
私はPHPmyadmin >> Operations >> copy database to
機能の助けを借りてこれを試しました。しかし、失敗してエラーを返すたびに
Error in processing request Error code: 500 Error text: Internal Error.
このデータベースをcpanelから新しいデータベースにコピーする他の方法/ソリューションがあることを知らせてくださいアドバイス
注:コメントを読みました。理解できるので、コマンドラインにアクセスできません。チェックしてください 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のファイルで私に役立ちました。
$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 )。ファイルを選択し、必要に応じて「エラー時に続行」を選択して、最後に実行します。ネットワーク接続の速度とコンピュータのパフォーマンスによっては、時間がかかる場合があります。
データベースのエクスポートを作成します。これは、PhpMyAdminインターフェイスを介して簡単に実行できます。 DBエクスポートをダウンロードしたら、エクスポートしたデータを配置する新しいDBを作成する必要があります。これも、PhpMyAdminユーザーインターフェイスを使用して簡単に実行できます。
アップロードするために、Import -> Browse your computer
2MBの制限があるため。 1つの解決策は、Import -> Select from the web server upload directory /var/lib/phpMyAdmin/upload/
。エクスポートしたデータをこのディレクトリにアップロードします。その後、アップロードしたデータがその隣のドロップダウンにリストされます。
これも失敗した場合は、コマンドラインインポートを使用できます。
mysql -u user -p db_name < /path/to/file.sql
大きなデータセットはダンプしないでください(バックアップ用でない限り)、代わりにexportデータベースデータなしデータ、次に、一度に1つのテーブルをコピーします(DBからDBに直接)。
まず、phpMyAdminを介してデータベースschemaをエクスポートonlyします(チェックを解除data(エクスポートオプション)。次に、それを新しいデータベース名にインポートします。
あるいは、DBを作成したら、以下のようなものを使用して、以下のようなステートメントを生成できます。この方法の欠点は、制約やsprocなどが失われる可能性があることです。
CREATE TABLE [devDB].[table] LIKE [prodDB].[table]
適切なエディターを使用して、必要な470の挿入ステートメントを作成します。まず、テーブル名のリストから、古き良き検索と置換を使用します。
INSERT INTO [devDB].[table] SELECT * FROM [prodDB].[table];
これは可能性がありますチョーク、環境によって異なります。もしdoesした場合は、devデータベースをドロップして再作成します(またはphpMyAdminを介してすべてのテーブルを空にします)。次に、INSERT
コマンドを一度にいくつかのテーブルで実行します。
ここで直面している実際の問題は、コマンドラインインターフェイスにアクセスせずにデータベース管理を行おうとしていることです。大規模なデータセットを効率的に移行するには、非常に複雑な詳細事項があり、そのほとんどはmysqldumpなどのツールを使用しないと解決できません。
要件にはPHPMyAdminが含まれているため、私の提案は次のとおりです。
次に、生成されたファイルを新しいデータベースにインポートしてみます(十分なリソースがある場合-これは可能です)。
注:以前の経験では、圧縮を使用するとより大きなDBエクスポート/インポート操作が可能になるが、共有ホスティング環境の上限をテストしていません(これはcPanelのコメントで想定しています)。
編集:エクスポートファイルが作成されたら、新しいデータベースを選択し(既に作成されている場合)、[インポート]タブに移動し、エクスポートから作成されたファイルを選択してインポートプロセスを開始します。
ローカルサーバーにデータベースがある場合は、それをエクスポートし、BigDumpを使用してグローバルサーバーの新しいデータベースに挿入することができます BigDump
これが私が直面したときの問題の処理方法です。残念ながら、これはMac OSでのみ機能します。
これがお役に立てば幸いです。それは少しの回避策ですが、特にPMAが失敗した場合、私にとっては非常にうまくいきました。
次のように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データベースのバックアップのスケジュールに関する記事をすでに書いています。
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