如何在两个远程数据库之间同步MySQL数据库(没有MySQL数据库复制技术)

时间:2012-09-07 05:59:33

标签: python mysql sql django

我有两个共享服务器(服务器1和服务器2)和一个专用服务器。在专用服务器上,我运行的脚本将数据插入到服务器1中。

现在我想在每个月将所有数据从服务器1同步到服务器2(基本上保留备份数据库)

对于服务器1和2,我没有root访问权限。所以我必须在专用服务器中执行此操作。

有什么方法可以使用mysql -host -u -p comment ??

如果有任何其他想法,你能帮助我吗?

2 个答案:

答案 0 :(得分:3)

由于问题表明要将所有数据从一台服务器同步到另一台服务器,我认为您可以使用一个相对简单的解决方案,涉及mysqldump

我认为您可以从专用服务器执行此操作:

mysqldump --user=<username> --password=<password> --host=<server 1 hostname> --port=<port> --add-drop-database <database name> > dump.sql

<username><password><port><server 1 hostname>替换为服务器1的连接详细信息。替换为要复制到的服务器1上的数据库名称服务器2.如果要复制所有数据库,请使用--all-databases选项替换。

这将在当前目录中生成一个名为dump.sql的文件。然后,您可以将其加载到服务器2中:

mysql --user=<username> --password=<password> --host=<server 2 hostname> --port=<port> <database name> < dump.sql

<username><password><port><server 2 hostname>替换为服务器2的连接详细信息。

这将获取dump.sql文件,并将其加载到服务器2上的数据库中。这将删除服务器2上的数据库 - 因此所有现有数据将替换为dump.sql中的数据。

检查mysqldump的选项(关于丢弃数据库,删除表等)并定制上述命令以适合您的情况。我想,如果你正确地连接起来,你甚至可以绕过中间文件并使用套接字将服务器1上的mysqldump连接到服务器2上的mysql。

要涵盖此问题的“自动”部分,您可以在cron下运行上述命令,并安排它们在每个月的第一天在适当的时间运行。

答案 1 :(得分:0)

AS @MarkStreatfield已经说过,mysqldump只适合你。您无需成为root用户即可运行它。 但是,您应该记住,在转储处理过程中,所有表都存在全局锁定,因此此时您的应用程序无法正常运行。如果您将mysqldump输出直接传递给server2,可能需要很长时间才能成为问题。

出于备份目的,最好转储到本地sql或gz文件。您可以稍后与S3 / Dropbox同步或在server2部署转储,而无需锁定。例如,转储到sql.gz文件:

mysqldump -u <db_user> --password=<db_password> -h <host> <db_name> | gzip > `date +mydbdump_%y_%m_%d.sql.gz`