【问题标题】:Right way to mirror a PHP/MySQL setup镜像 PHP/MySQL 设置的正确方法
【发布时间】:2011-12-12 07:44:14
【问题描述】:

我刚刚创建了我的第一个 PHP/MySQL 站点,并正在考虑创建数据库的镜像以进行备份。这当然是为了防止某些黑客设法窥探并破坏主数据库。这样做有正确或错误的方法吗?

编辑:是的,我有一个托管计划,希望在其他主机中放置镜像。

【问题讨论】:

  • 托管公司不会自动执行此操作吗?

标签: php mysql mirror


【解决方案1】:

备份你的mysql数据库主要有两种方式:冷(静态/离线)备份和热(动态/在线)备份。

1 每天/每周/每月等使用 crontab 脚本备份您的数据库。我们称之为冷备份。脚本可能是这样的:

!#/bin/sh
mysqldump -usample_name -S/tmp/sample.sock --databases db1 db2 > db_backup_time.sql

你可以找到mysqldump的手册here。实际上,整个 chp.6 都在谈论数据库备份和恢复。在此之后,您每天都会获得数据的镜像(例如早上 6 点)。

2 使用mysqlreplication solutions(主从结构)进行在线备份。 master上所有导致数据修改的查询也会在slave上执行。

比较:

基本上,冷备份更容易。但是当坏事发生时,第一种方法只能将数据恢复到您转储镜像时的数据。借助热备份和mysqldump工具,您可以随时恢复数据。

根据我的经验,我们总是将这两种方法组合在一起:

  1. 每天早上写镜子,然后,
  2. 在另一台物理机器上构建主数据库的从属。

那是安全的。

【讨论】:

  • 解决方案 2 很有趣。我喜欢这样一个事实,即您根据一天中的时间有 2 个单独的时间表。澄清一下,#1 是冷备份,#2 是热备份?
  • @enchance 是的。在误掉整张表或者硬盘坏掉的情况下,可以使用#1的镜像将数据库恢复到当天早上。然后使用binlog(在这种情况下工具mysqlbinlog会有所帮助。)恢复增量数据。
【解决方案2】:

mysqldump 是一个方便的实用程序,可让您将数据库备份为文本文件。

要备份您的数据库:

mysqldump -u username -p database_name > backup.sql

现在从备份中恢复:

mysql -u username -p database_name < backup.sql

最好创建一个定期执行此操作的脚本,以便您始终拥有一个新的恢复点。

您可以了解更多关于 mysqldump here 的语法

【讨论】:

    【解决方案3】:

    至于在黑客的情况下备份数据库,似乎mysqldump是要走的路;你可以阅读它here。然后,您可以将该 mysql 转储到另一台服务器。就个人而言,我每天都有一个 chron 做这个备份,然后我用 ftp 同步将备份复制到另一台服务器上,但还有其他方法可以自动化它。如果您在 linux 服务器上,使用 webmin 可能会使该过程更容易,它具有备份 mysql 数据库的工具。希望这会有所帮助。

    【讨论】:

      【解决方案4】:

      如果您通过将数据库镜像到另一台主机来备份数据库,例如每天一次,如果数据被损坏/废弃并且您在镜像之前没有捕获它,您的数据仍然会丢失。正确的方法是定期保持转储。我每天都会转储我的数据库,每天备份 4 周,然后每周备份 6 个月。

      如果您的数据库和备份服务器彼此相邻(在网络距离内),这种方法效果最好。但是,如果您的数据库托管在其他地方并且不是太大,它应该仍然可以正常工作(许多主机每天都会转储您的数据库,但您需要自己获取它)。

      【讨论】:

        【解决方案5】:

        您可以设置一个 mysql 主/从复制:

        首先创建一个用于复制数据库的用户:replUser

        在主服务器上您需要以下设置:

        [mysqld]
        log-bin=mysql-bin
        server-id=1
        

        在从服务器上,您希望在 my.cnf 中进行以下设置

        ## Replication
        server-id                       = 2
        relay-log-space-limit           = 16G
        expire-logs-days                = 7
        master-host = 10.10.10.10
        master-user = replUser
        master-password = yourpassword
        master-connect-retry=60
        replicate-do-db = database_name
        

        参考:http://dev.mysql.com/doc/refman/5.0/en/replication.html

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-10-29
          • 1970-01-01
          • 1970-01-01
          • 2019-05-11
          • 2013-09-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多