【发布时间】:2011-12-12 07:44:14
【问题描述】:
我刚刚创建了我的第一个 PHP/MySQL 站点,并正在考虑创建数据库的镜像以进行备份。这当然是为了防止某些黑客设法窥探并破坏主数据库。这样做有正确或错误的方法吗?
编辑:是的,我有一个托管计划,希望在其他主机中放置镜像。
【问题讨论】:
-
托管公司不会自动执行此操作吗?
我刚刚创建了我的第一个 PHP/MySQL 站点,并正在考虑创建数据库的镜像以进行备份。这当然是为了防止某些黑客设法窥探并破坏主数据库。这样做有正确或错误的方法吗?
编辑:是的,我有一个托管计划,希望在其他主机中放置镜像。
【问题讨论】:
备份你的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工具,您可以随时恢复数据。
根据我的经验,我们总是将这两种方法组合在一起:
那是安全的。
【讨论】:
mysqldump 是一个方便的实用程序,可让您将数据库备份为文本文件。
要备份您的数据库:
mysqldump -u username -p database_name > backup.sql
现在从备份中恢复:
mysql -u username -p database_name < backup.sql
最好创建一个定期执行此操作的脚本,以便您始终拥有一个新的恢复点。
您可以了解更多关于 mysqldump here 的语法
【讨论】:
如果您通过将数据库镜像到另一台主机来备份数据库,例如每天一次,如果数据被损坏/废弃并且您在镜像之前没有捕获它,您的数据仍然会丢失。正确的方法是定期保持转储。我每天都会转储我的数据库,每天备份 4 周,然后每周备份 6 个月。
如果您的数据库和备份服务器彼此相邻(在网络距离内),这种方法效果最好。但是,如果您的数据库托管在其他地方并且不是太大,它应该仍然可以正常工作(许多主机每天都会转储您的数据库,但您需要自己获取它)。
【讨论】:
您可以设置一个 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
【讨论】: