【问题标题】:How to copy a Database from one server to another server in PHP?如何在 PHP 中将数据库从一台服务器复制到另一台服务器?
【发布时间】:2010-06-04 16:38:52
【问题描述】:

我在本地服务器中有一个名为“empData”的数据库,我希望将该数据库中的所有数据复制到另一个数据库中,该数据库位于另一个名为“empDataBackup”的服务器(Web 服务器)中。 我试过这个代码mysql_query("INSERT INTO empData.backup_emp SELECT * FROM empData.emp"); 但它不起作用,因为两个数据库不在同一个服务器中......(在我们的例子中,一个在本地,另一个在 Web 服务器中)...... 请帮忙。。

【问题讨论】:

  • 第二台服务器是否允许从外部连接到 mysql?大多数情况下,它仅配置为 localhost。
  • 我尝试连接,但出现错误..."警告:mysql_connect() [function.mysql-connect]: Access denied for user..."

标签: php mysql


【解决方案1】:

使用mysqldump 转储您的数据,然后将该文件通过管道传输到mysql 以将数据导入其他位置。

在服务器 1 上:

mysqldump empData > empData.sql

在服务器 2 上:

mysql < empData.sql

如果你想变得花哨,你可以使用管道和 ssh 将数据直接从 server1 管道传输到 server2。

【讨论】:

  • 但我必须检查数据是否已经存在......以避免重复......上述方法会将数据附加到备份数据库中......
  • 使用可以将--insert-ignore 标志传递给mysqldump,告诉它为所有数据写出INSERT IGNORE 语句。这样,如果键已经存在,它就不会覆盖一行。 dev.mysql.com/doc/refman/5.1/en/…
【解决方案2】:

这不是 PHP 答案,但也许它可以帮助您入门:

mysqldump --host=db1.example.com --user=db1user --password=db1pass --single-transaction myschema mytable | \
    mysql --host=db2.example.com --user=db2user --password=db2pass myschema

如果你不能从一台机器访问两个主机,你可以使用 ssh,例如

ssh db1.example.com 'mysqldump --user=db1user --password=db1pass --single-transaction myschema mytable' | \
  mysql --user=db2user --password=db2pass myschema

mysqldump --user=db1user --password=db1pass --single-transaction myschema mytable | \
  ssh db2.example.com 'mysql --user=db2user --password=db2pass myschema'

【讨论】:

    【解决方案3】:

    总是有直接的MySQL Replication 选项,而不是依靠你的 PHP 脚本来保持数据库同步

    【讨论】:

      【解决方案4】:

      您必须将数据库转储到原始服务器上,然后将其复制到另一台服务器并恢复它。

      对于这些操作中的每一个,都有“服务器端”方式和“PHP 端”方式。如果可以,请使用第一个。如果你不能使用第二个,但你需要额外注意安全性。

      服务器端:1.和3.:使用mysqldump。 2.使用scp传输文件。

      PHP 方面:1. 使用脚本转储数据库,例如this one。 2. 使用 CURL 复制文件,或将其放在可用目录中,以某种方式保护它。 3. 从第二台服务器检索文件,然后通过 mysql_exec 运行它来恢复数据库。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-09-13
        • 1970-01-01
        • 1970-01-01
        • 2021-06-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多