如何在同一台服务器上复制MySQL数据库
我有一个大型MySQL数据库,我们称之为如何在同一台服务器上复制MySQL数据库,mysql,database,sync,replicate,Mysql,Database,Sync,Replicate,我有一个大型MySQL数据库,我们称之为live\u db,我想在同一台机器上复制它,以提供一个测试系统来使用(test\u db),包括表结构和数据。 我想定期用live_db的内容更新test_db;如果可能,增量 MySQL中是否有一些内置机制可以做到这一点?我认为主从复制不是我想要的东西,因为它应该可以改变test_db中的数据。不过,这些更改不必保留 问候, CGDmysql命令行客户端将接受来自标准输入的SQL语句流。因此,您可以通过管道将mysqldump的输出直接导入命令行上的m
live\u db
,我想在同一台机器上复制它,以提供一个测试系统来使用(test\u db
),包括表结构和数据。
我想定期用live_db
的内容更新test_db
;如果可能,增量
MySQL中是否有一些内置机制可以做到这一点?我认为主从复制不是我想要的东西,因为它应该可以改变test_db
中的数据。不过,这些更改不必保留
问候,
CGDmysql命令行客户端将接受来自标准输入的SQL语句流。因此,您可以通过管道将
mysqldump
的输出直接导入命令行上的mysql
。作为cron作业执行此操作将定期使用更新的实时数据覆盖测试数据:
mysql--user=username--password=passwd-e'DROP DATABASE test_db;'
mysql--user=username--password=passwd-e'CREATE DATABASE test_db;'
mysqldump--user=username--password=passwd live_db | mysql--user=username--password=passwd test_db
请注意,由于您的数据很大,这将需要很长时间。如果您更喜欢MySQL迁移工具包,您可以在数据映射步骤中双击架构名称并更改目标架构名称。Michaels answer我们工作得很好,但不会复制事件、存储过程或触发器 要复制这些,mysqldump还需要几个开关:
--事件--触发器--例程
要补充已制作的副本,请执行以下操作:
mysqldump--user=username--password=passwd--no data--no create info--no create db--events--triggers--routines live|db | mysql--user=username--passwd test|db
此解决方案工作正常,但如果您使用PHPunit进行单元测试,它将无法完成任务
在命令行中使用密码会生成一个警告,该警告被PHPUnit捕获,并生成一个异常(是的,非常重要…)
解决这个问题的方法是使用配置文件
在我的例子中,我不想在配置文件和PHP代码中同时维护密码和用户,所以我从代码中生成配置文件,并检查它是否存在(否则,我直接在命令行中使用用户名和密码作为后备选项)
下面是一个例子,在PHP中,如何复制一个安装数据库以创建一个具有不同名称的新数据库(例如,如果您正在为每个客户管理一个具有不同子域/数据库的主域):
补充说明:
来自蒙特利尔的Jonathan Parent-Lévesque对于所有mac用户,使用sequel pro,您需要做的就是进入数据库(菜单)->复制数据库。完成了!我已经在不同的环境中使用中小型数据库(1克到100克)做了几年了.mysqldump的快速和脏
mysqldump
适用于较小的数据集;数据集越小,效果越好
当超过5-10GB时,根据MySQL负载的不同,快速和脏的将不再削减它
为什么mysqldump
可能还不够
MySQLdump的问题在于,当它转储时,实时数据库要么不可用,要么使用起来非常笨拙,要么备份将不一致。除非您有足够宽的时间窗口,此时实时数据库的不可用性并不重要,因为数据库无论如何都不需要使用(例如,深夜)
默认选项(关于原因的讨论)会使数据库在转储时几乎不可用,除非其用途只是读取数据,而很少读取数据。在繁忙的电子商务网站上,您看到的是客户端堆积崩溃
所以您使用InnoDB和modern选项(据我所知,不是默认选项)
这允许站点在转储期间运行,尽管比正常速度慢。根据使用情况,它可能会明显地慢一些
在进行此操作时,还可以转储其他可能很重要的数据:
--events --triggers --routines
(…哦,这仍然不会有转储的用户权限。要用作测试,可能它并不那么重要)
我发现有一个变通方法是“建议”(!)作为“伟大的黑客”“,它基本上禁用事务完整性,允许数据库在转储时全速运行。有点像从你的车上拆下刹车来减轻它的重量,让它跑得更快,是的,它会起作用,但会有一些副作用,你可能不会马上注意到。你几乎肯定迟早会注意到它们——就像刹车一样,它会在你最需要它们的时候出现,而且不会很漂亮
但是,对于测试数据库,它仍然可以工作
Xtrabackup
如果你有一个“严肃”的数据库,你为什么不拥有它
从复制
如果您有空闲空间的话,另一种可能性是使用辅助数据库,而现在,20GB并不是那么多
您可以在不同端口的同一台服务器上安装MySQL服务器的第二个副本,并将其作为从属服务器(从存储速度来看,服务器将受到性能影响)。然后您将有两个相同的数据
--single-transaction --skip-lock-tables
--events --triggers --routines