我刚刚创建了我的第一个 PHP/MySQL 站点,并正在研究创建数据库的镜像以进行备份。这当然是为了防止某些黑客设法窥探并破坏主数据库。这样做有正确或错误的方法吗?
编辑:是的,我在其他一些主机中有一个托管计划,我希望将镜像放置在其中。
备份mysql数据库主要有两种方式:冷(静态/离线)备份和热(动态/在线)备份。
1 每天/每周/每月等使用 crontab 脚本备份您的数据库。我们称之为冷备份。脚本可能是这样的:
!#/bin/sh
mysqldump -usample_name -S/tmp/sample.sock --databases db1 db2 > db_backup_time.sql
你可以在这里找到 mysqldump 的手册。实际上,整个 chp.6 都在谈论数据库备份和恢复。在此之后,您将每天获得数据的镜像(例如早上 6 点)。
2 使用mysql复制方案(主从结构)进行在线备份。master 上所有导致数据修改的查询也将在 slave 上执行。
比较:
基本上,冷备份更容易。但是当坏事发生时,第一种方法只能将数据恢复到您转储镜像时的数据。借助热备份和mysqldump工具,您可以随时恢复数据。
根据我的经验,我们总是将这两种方法组合在一起:
那将是安全的。
mysqldump 是一个方便的实用程序,可让您将数据库备份为文本文件。
要备份您的数据库:
mysqldump -u username -p database_name > backup.sql
现在从备份中恢复:
mysql -u username -p database_name < backup.sql
最好创建一个定期执行此操作的脚本,以便您始终拥有一个新的还原点。
您可以在此处了解有关 mysqldump 语法的更多信息
如果您通过将数据库镜像到另一台主机来备份数据库,例如每天一次,如果数据被损坏/丢弃并且您在镜像之前没有捕获它,您的数据仍然会丢失。正确的方法是定期保持转储。我每天都对我的数据库进行转储,每天备份 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