0

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

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

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

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

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

4

2 回答 2

3

正如问题所述将所有数据从一台服务器同步到另一台服务器,我认为您可以使用一个相对简单的解决方案,包括mysqldump.

我认为您可以从专用服务器完成所有这些操作:

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

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

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

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

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

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

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

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

于 2012-09-07T06:55:54.267 回答
0

正如@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`
于 2012-09-07T07:10:08.667 回答