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

时间:2011-06-05 05:00:52

标签: php mysql

我的服务器上有一个数据库的基本数据集。当用户注册我的服务时,我希望能够将此数据库复制到另一个已创建的数据库。使用PHP / MySQL有一种简单有效的方法吗?纯MySQL更可取。

我考虑过循环遍历基础数据库中的所有表,但我不知道如何创建包含新数据库列的表。

运行PHP 5.1和MySQL 5.

感谢。

8 个答案:

答案 0 :(得分:9)

这篇文章有十种备份数据库并将其还原的方法。每种方法都使用不同的方法,其中大多数可能适用于您的情况,但有一些适用:

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

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

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

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

MySQL to MySQL clone with PHP

答案 1 :(得分:4)

如果您有权使用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

答案 2 :(得分:1)

有几个选择:

答案 3 :(得分:1)

这是另一个关于备份和恢复MySQL数据库数据(来自备份)的教程。

http://www.devshed.com/c/a/MySQL/Backing-up-and-restoring-your-MySQL-Database/

答案 4 :(得分:0)

我不认为为每次注册复制数据库是一个很好的选择。 您应该让每个签名用户共享基础数据库并根据需要查询所需数据,而不是进行如此多的重复。

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

您拥有的客户越多,您应该考虑共享而不是复制。 Althou数据库是为事务而设计的,你应该尽可能避免不必要的写入,因为它占用了太多的时间和资源。

答案 5 :(得分:0)

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

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

复制可能是实现所需结果的最佳方式,而且它允许您在不向主服务器添加负载的情况下对数据执行临时报告。

答案 6 :(得分:0)

步骤1.您需要编写SQL语句来创建每个数据库及其(空)表。你可以在php代码中执行此操作。如果有任何额外的东西,例如:index,triggers,sp等,你将不得不同样创建它们。

步骤2.仍在您的php代码中,连接到您的基础数据库以及新的数据库并执行您的SQL语句以将基础数据复制(select..insert)到新数据库中。

答案 7 :(得分:0)

我首选的方法是使用Migration Wizard中的MySQL Workbench。经过一些使用/练习后,使用起来非常简单快捷(一些用途后约5分钟)。

提示:最棘手的部分是“对象迁移” - > “手动编辑”。您应切换到“查看:所有对象”以调整新架构。

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

另一个相对好的工具是synchronization feature in phpMyAdmin。它有点hacky并且不那么直观,但如果你不能使用Workbench可能会有效。