如何使用一台服务器镜像MySQL数据库

时间:2009-05-08 10:44:49

标签: mysql replication

我需要经常将我的MySQL服务器上的一个数据库复制到同一个MySQL服务器上的镜像数据库。

我正在编写一个bash脚本,它在一个单独的子域中生成我的Web应用程序(PHP / MySQL)的镜像。用户可以使用此镜像尝试各种疯狂的事情,而不会影响生产环境。该脚本应该每晚自动运行。

复制源代码很容易。我只是使用rsync -a将所有内容从包含生产环境的目录复制到镜像目录,并应用补丁来更新一些配置文件。问题在于复制数据库,该数据库的大小已增加到近3 GB。

当我使用mysqldump live_db | mysql mirror_db时,复制数据库需要永远。此外,在此期间CPU使用率达到100%并且我的Web应用程序变得非常慢。

数据库复制似乎不是一个选项,因为我只有一个MySQL服务器。复制需要两台服务器。

复制生产数据库的最佳方法是什么?它不一定非常快,但它不应该过多地影响系统的性能。当镜像脚本在后台运行时,人们仍然可以使用我的Web应用程序。

2 个答案:

答案 0 :(得分:1)

我能想到的可能的解决方案:

1)购买更快的服务器

2)复制原始表。这不是理想的,但如果它只是为了测试可行。

我假设您正在使用MyISAM表,但以下是步骤:

  • 理想情况下,将表锁定在生产数据库中,如果不可能则忽略
  • 将二进制表数据/索引从/var/lib/mysql/production_schema(或类似)复制到/var/lib/mysql/development_schemarsync -a(以root身份运行)可以用这个来实现。
  • 重新启动MySQL服务器(这是整个过程中唯一的停机时间)
  • CHECK/REPAIR development_schema
  • 中的所有标签

值得补充的是,我不会使用此方法将数据从一个生产环境复制到另一个生产环境,而无需在制作副本之前停止服务器。

3)考虑您是否需要开发环境中的所有生产数据。你能聪明一点,只复制一部分数据吗?

答案 1 :(得分:0)

如果您有MyISAM表,则可以使用mysqlhotcopy