使用MySQL中的数据复制数据库


Copy a database with data in MySQL

我在服务器上的数据库中保存了一组基本数据。当用户注册我的服务时,我希望能够将此数据库复制到已创建的另一个数据库。有没有一种简单有效的方法可以使用PHP/MMySQL来做到这一点?最好是纯MySQL。

我曾想过循环遍历基础数据库中的所有表,但我不知道如何创建带有列的表到新数据库。

运行PHP 5.1和MySQL 5。

谢谢。

以下是一篇文章,介绍了备份和恢复数据库的十种方法。每种方法都使用不同的方法,其中大多数方法可能适用于您的情况,但也有少数方法适用:

http://www.noupe.com/how-tos/10-ways-to-automatically-manually-backup-mysql-database.html

第六部分讨论了创建一个转储文件,然后再次恢复它。您可以使用它来转储数据,然后将其恢复到新的数据库中。

这里的另一个选择是制作数据库的物理副本。如果您将数据库存储在不同的位置,这可能是一个选项。它不会这么简单,但应该可以正常工作。

最后,您可以从PHP运行一个脚本,为您执行MySql转储命令。这将允许您复制整个数据库,并将其设置在新的位置,这样您甚至不必有一个数据库来完成这一任务:

使用PHP 从MySQL到MySQL的克隆

如果您有使用make"exec"系统调用的权限,您可以执行以下

exec("mysql -u".$DB_USER." --password='".$DB_PASS."' -e 'DROP DATABASE IF EXISTS `".$NEW_DB."`; CREATE DATABASE `".$NEW_DB."`;'");
exec("mysqldump -u".$DB_USER." -p'".$DB_PASS."' ".$EXISTING_DB." | mysql -u ".$DB_USER." --password='".$DB_PASS."' ".$NEW_DB);

这将删除$NEW_DB(如果存在),并重新创建它,然后将$EXISTING_DB中的所有表和数据转储到$NEW_DB中

免责声明:在命令行中传递mysql密码通常不是一个好主意。我不确定,但我想这可能会被拥有root访问权限的人查看,他有能力查看所有进程和启动它们的命令行选项。

此外,关于如何在新数据库中创建列与另一个列匹配的表的其他问题,您可以使用以下SQL

CREATE TABLE new_database.new_table LIKE old_database.old_table

如果我理解正确,您希望在每次用户注册时执行某种类型的快照。这不是一个可以很好地扩展的东西。我的建议;

MySQL:使用触发器。MySQL:使用MySQL复制PHP:将同一条语句写到两个不同的地方。

复制可能是实现所需结果的最佳方式,此外,它还允许您在不增加主服务器负载的情况下对数据执行即席报告。

步骤1。您将需要编写SQL语句来创建每个数据库及其(空)表。您可以在php代码中执行此操作。如果有任何额外的东西,例如:索引、触发器、sp等,您也必须创建它们。

步骤2。仍然在php代码中,连接到基础数据库和新数据库,并执行SQL语句将基础数据复制(选择..插入)到新数据库中。

我不认为为每次注册复制一个数据库是一个好方法。您应该让每个签名的用户共享基本数据库,并根据需要查询所需的数据,而不是重复太多。

如果您知道基本数据库的模式,我不明白为什么您在创建相应的表时会遇到问题。

你的客户越多,你就越应该考虑分享而不是复制。虽然数据库是为事务而设计的,但您应该尽可能避免不必要的写入,因为这会占用太多的时间和资源。

我的首选方法是使用MySQL工作台中的迁移向导。经过一些使用/练习后,它真的很容易使用,也很快(一些使用后约5分钟)。

提示:最棘手的部分是"对象迁移"->"手动编辑"。您应该切换到"View:AllObjects"来调整您的新架构。

提示2:您还可以同时迁移/复制和备份。旧数据库当然会保留下来。

另一个相对不错的工具是phpMyAdmin中的同步功能。它有点粗糙,不太直观,但如果你不能使用Workbench,它可能会起作用。