我有两个共享服务器(服务器1和服务器2)和一个专用服务器。在专用服务器上,我运行的脚本将数据插入到服务器1中。
现在我想在每个月将所有数据从服务器1同步到服务器2(基本上保留备份数据库)
对于服务器1和2,我没有root访问权限。所以我必须在专用服务器中执行此操作。
有什么方法可以使用mysql -host -u -p comment ??
如果有任何其他想法,你能帮助我吗?
答案 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`