如何从phpmyadmin制作大型数据库的副本?

时间:2017-09-28 07:15:12

标签: php mysql database phpmyadmin cpanel

我想在同一台服务器上创建我的网站的开发环境。但我有一个7Gb的数据库,其中包含479个表,我想将该数据库的副本复制到新数据库。

我在PHPmyadmin >> Operations >> copy database to功能的帮助下尝试了这一点。但每次失败并返回错误

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

请告诉我有任何其他方法/解决方案将此数据库从cpanel复制到新数据库请告知

9 个答案:

答案 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"

Source

解决方案二

此外,还有另一个选项非常适合那些共享主机并且没有命令行访问权限的人。这个解决方案适用于4-5GB文件:

  1. MySQL Dumper:Download(您可以直接从“MySQL Dumper”备份/恢复SQL文件,不再需要phpmyadmin了。)
  2. 大转储:Download(只需从Compress文件和SQL文件恢复,需要BIGDUMP PHP文件编辑才能进行大导入$linespersession = 3000;更改为$linespersession = 30000;
  3. 解决方案三:

    这个解决方案肯定有效,但速度慢但有效。

    下载(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/。将导出的数据上传到此目录中。之后,您上传的数据应列在其旁边的下拉列表中。

enter image description here

如果此操作失败,您可以使用命令行导入。

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

答案 2 :(得分:1)

最简单的方法是尝试从phpmyadmin 导出数据。它将创建数据备份。

但有时,通过导入/导出传输大量数据会导致错误。

您也可以尝试 mysqldump 来备份数据。

我找到了一些链接herehere

这是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.iniini_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。

  • 下载Sequel Pro - 完全免费,一年多来我的工作效果非常好。
  • 远程连接到服务器的数据库。您可能需要将您的IP地址添加到CPANEL中的“Remote MYSQL”部分。如果您没有凭据,则可以从网站的配置文件中获取凭据。
  • 进入服务器后,您可以选择所有表格,辅助点击,然后选择导出&gt;作为SQL转储。您可能不需要编辑任何设置。点击“导出”。
  • 登录本地服务器数据库,然后从顶部菜单中选择“查询”。
  • 拖放从导出下载的文件,它将自动从sql转储设置数据库。

我希望这会有所帮助。这是一个小小的工作,但它对我来说非常好,特别是当PMA失败时。

答案 6 :(得分:1)

由于要求包括PHPMyAdmin,我的建议是:

  1. 选择您需要的数据库
  2. 转到&#34;导出&#34;标签
  3. 点击&#34;自定义 - 显示所有可能的选项&#34;单选按钮
  4. 在&#34;保存输出到文件&#34;单选按钮选项,选择&#34; gzipped&#34;对于&#34;压缩:&#34;
  5. 删除&#34;显示评论&#34;勾选(以节省一些空间)
  6. 完成导出
  7. 然后尝试在您拥有的新数据库中导入生成的文件(如果您有足够的资源 - 这应该是可能的。)

    注意:我之前的经验表明,使用压缩允许更大的数据库导出/导入操作,但尚未测试共享托管环境中的上限(假设您对cPanel的评论)。

    编辑:创建导出文件时,选择新数据库(假设它已经创建),转到&#34;导入&#34;选项卡,选择从导出创建的文件并开始导入过程。

答案 7 :(得分:1)

仅限于phpMyAdmin?不要一次性完成

不应转储大型数据集(除非是用于备份),而是导出数据库而不用数据,然后一次复制一个表(直接DB到DB。

导出/导入架构

首先,通过phpMyAdmin导出数据库架构(在导出选项中取消选中 data )。然后将其导入新的数据库名称。

或者,一旦您创建了数据库,就可以使用类似下面的内容生成如下所示的语句。使用此方法的方法是,您可能会丢失约束,sprocs等。

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

一次复制数据,一个表。

使用一个好的编辑器来创建所需的470个插入语句。从表名列表开始,并使用旧的查找和替换。

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

可能会阻塞,具体取决于您的环境。如果它 ,则删除并重新创建dev数据库(或通过phpMyAdmin清空所有表)。然后,一次运行几个表的INSERT命令。

数据库管理需要CLI

您在这里遇到的真正问题是,您正在尝试进行数据库管理而无需访问命令行界面。有效地迁移大量数据有很多复杂的细节,其中大部分只能使用像mysqldump这样的工具来解决。

答案 8 :(得分:1)

如果您的本地服务器中有数据库,则可以将其导出并使用BigDump插入全局服务器上的新数据库BigDump