我想在同一台服务器上创建我的网站的开发环境。但我有一个7Gb的数据库,其中包含479个表,我想将该数据库的副本复制到新数据库。
我在PHPmyadmin >> Operations >> copy database to
功能的帮助下尝试了这一点。但每次失败并返回错误
Error in processing request Error code: 500 Error text: Internal Error.
请告诉我有任何其他方法/解决方案将此数据库从cpanel复制到新数据库请告知
答案 0 :(得分:2)
注意:我刚刚阅读了您的评论,据我所知,您无法访问命令行。请检查Solution Two
,这肯定有用。
唯一适合您的解决方案(适用于12GB数据库)直接来自命令行:
解决方案一
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"
解决方案二
此外,还有另一个选项非常适合那些共享主机并且没有命令行访问权限的人。这个解决方案适用于4-5GB文件:
$linespersession = 3000;
更改为$linespersession = 30000;
)解决方案三:
这个解决方案肯定有效,但速度慢但有效。
下载(32或64位)的试用版:Navicat MySQL Version 12
安装 - >和RUN作为试验。
之后将您的计算机IP(Internet IP,而不是本地IP)添加到cPanel(新数据库/主机)中的MySQL Remote。您可以在cPanel中使用通配符IP从任何IP访问MySQL。
转到Navicat MySQL:点击连接输入连接名称。
在下一个“主机名/ IP”中添加“主机IP地址”(不要使用localhost)。 保持端口不变(如果你的主机定义了一个不同的端口放在那里)。
添加数据库用户名和密码
点击测试连接,如果成功,请点击“确定”
现在,在主屏幕上,您将看到所有数据库都与左侧列中的用户名相关联。
双击要导入SQL文件的数据库:
数据库的图标颜色将会改变,您将看到“Tables / views / function etc.”。
现在右键单击数据库上的,然后选择“执行SQL文件”(http://prntscr.com/gs6ef1)。 选择文件,如果你愿意,选择“继续出错”并最终运行它。它需要一些时间,具体取决于您的网络连接速度和计算机性能。
答案 1 :(得分:1)
创建数据库的导出。这应该通过PhpMyAdmin接口轻松完成。下载数据库导出后,您需要创建一个新数据库,您可以在其中放置导出的数据。这也应该通过PhpMyAdmin用户界面轻松完成。
要上传它,我们无法使用Import -> Browse your computer
,因为它的限制为2MB。一种解决方案是使用Import -> Select from the web server upload directory /var/lib/phpMyAdmin/upload/
。将导出的数据上传到此目录中。之后,您上传的数据应列在其旁边的下拉列表中。
如果此操作失败,您可以使用命令行导入。
mysql -u user -p db_name < /path/to/file.sql
答案 2 :(得分:1)
最简单的方法是尝试从phpmyadmin 导出数据。它将创建数据备份。
但有时,通过导入/导出传输大量数据会导致错误。
您也可以尝试 mysqldump 来备份数据。
这是mysqldump数据库备份documentation。
希望它有所帮助。 :d
答案 3 :(得分:1)
我怀疑PHPMyAdmin将处理该大小的数据库(PHP上传/下载限制,内存限制,脚本执行时间)。 如果您已经访问控制台,我建议您通过mysql命令行进行导出/导入:
导出:
$ mysqldump -u <user> -p<pass> <liveDatabase> | gzip > export.sql.gz
导入:
$ gunzip < export.sql.gz | mysql -u <user> -p<pass> <devDatabase>
在例如创建新的dev数据库之后PHPMyAdmin或通过命令行。
否则,如果您只能访问Apache / PHP环境,我会寻找一个导出工具,以较小的块分割导出。 MySQLDumper浮现在脑海中,但它已经存在了几年,AFAIK不再主动维护,与PHP 7+不兼容。 但我认为至少有一个pull request可以使它与PHP7一起使用(未经测试)。
根据您的评论进行修改:
如果导出已存在且导入时发生错误,您可以尝试通过.htaccess
中的条目,更改php.ini
或ini_set
来增加PHP环境的限制,您环境中可用的任何内容。相关设置例如是通过.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设置 - 通常在config.default.php
中找到,用于PHPMyAdmin安装:
取代
$cfg['ExecTimeLimit'] = 300;
带
$cfg['ExecTimeLimit'] = 0;
最后,您可能需要调整MySQL配置以允许更大的数据包并摆脱“丢失的连接”。错误: my.ini中的[mysqld]部分:
max_allowed_packet=256M
答案 4 :(得分:1)
您可以使用mysqldump
,如下所示
mysqldump —user= —password= --default-character-set=utf8
你也可以使用我的shell脚本,它实际上是用cron job定期编写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
我已经写了一篇关于 Schedule MySQL Database backup on CPanel or Linux 的文章。
答案 5 :(得分:1)
以下是我在遇到问题时如何处理该问题...不幸的是,这仅适用于Mac OS。
我希望这会有所帮助。这是一个小小的工作,但它对我来说非常好,特别是当PMA失败时。
答案 6 :(得分:1)
由于要求包括PHPMyAdmin,我的建议是:
然后尝试在您拥有的新数据库中导入生成的文件(如果您有足够的资源 - 这应该是可能的。)
注意:我之前的经验表明,使用压缩允许更大的数据库导出/导入操作,但尚未测试共享托管环境中的上限(假设您对cPanel的评论)。
编辑:创建导出文件时,选择新数据库(假设它已经创建),转到&#34;导入&#34;选项卡,选择从导出创建的文件并开始导入过程。
答案 7 :(得分:1)
不应转储大型数据集(除非是用于备份),而是导出数据库而不用数据,然后一次复制一个表(直接DB到DB。
首先,通过phpMyAdmin导出仅数据库架构(在导出选项中取消选中 data )。然后将其导入新的数据库名称。
或者,一旦您创建了数据库,就可以使用类似下面的内容生成如下所示的语句。使用此方法的方法是,您可能会丢失约束,sprocs等。
CREATE TABLE [devDB].[table] LIKE [prodDB].[table]
使用一个好的编辑器来创建所需的470个插入语句。从表名列表开始,并使用旧的查找和替换。
INSERT INTO [devDB].[table] SELECT * FROM [prodDB].[table];
此可能会阻塞,具体取决于您的环境。如果它 ,则删除并重新创建dev数据库(或通过phpMyAdmin清空所有表)。然后,一次运行几个表的INSERT
命令。
您在这里遇到的真正问题是,您正在尝试进行数据库管理而无需访问命令行界面。有效地迁移大量数据有很多复杂的细节,其中大部分只能使用像mysqldump这样的工具来解决。
答案 8 :(得分:1)
如果您的本地服务器中有数据库,则可以将其导出并使用BigDump插入全局服务器上的新数据库BigDump