【发布时间】:2010-01-13 17:45:59
【问题描述】:
我正在使用 php、mysql,我的服务器是带有 IIS6 的 Windows Server 2003。
我计划每小时备份一次我的数据库。我可以做 cronjob,通过将日期和时间写入日志文件进行测试。它完美地工作。
现在我想使用 cronjob 来备份我的数据库。我怎么做?创建一个 php 脚本并让它每小时运行一次?
【问题讨论】:
标签: php mysql backup cron database
我正在使用 php、mysql,我的服务器是带有 IIS6 的 Windows Server 2003。
我计划每小时备份一次我的数据库。我可以做 cronjob,通过将日期和时间写入日志文件进行测试。它完美地工作。
现在我想使用 cronjob 来备份我的数据库。我怎么做?创建一个 php 脚本并让它每小时运行一次?
【问题讨论】:
标签: php mysql backup cron database
使用mysqldump。示例(带有我通常使用的选项):
mysqldump --single-transaction --hex-blob --opt -e --quick --quote-names -r put-your-backup-filename-here put-your-database-name-here
【讨论】:
正如其他人所写,mysqldump 工具是最简单的解决方案,但是如果您有一个大型数据库,即使使用 --quick 设置,我还是建议您进行一些试验。使用旧的 C-ISAM 引擎,一次处理一个查询。尽管这对 InnoDB 来说不是什么问题,但我不确定 MySQL 现在是否支持完全并发查询。您的备份可能会影响事务处理。
如果确实有问题,那么一个简单的解决方案是配置在同一台机器上运行的数据库的从属实例,然后对它运行 mysqldump,或者在备份原始数据时暂时关闭从属实例文件。
或者,您可以将镜像下推到操作系统级别并执行磁盘级别快照 - 但您需要在创建快照(或破坏镜像)之前停止数据库上的事务并刷新它。
C.
【讨论】:
使用mysqldump 工具将您的数据库转储到文件中。
【讨论】:
我认为您可以使用 cron 作业来启动 db 文件的副本,我认为运行 php 脚本进行备份的 cron 作业不是一个好的选择(它很复杂,不需要它)。 我认为mysqldump也是一个不错的选择,但我不能帮你。
【讨论】:
编辑:此脚本适用于 Unix(或变体)。
我也想做同样的事情(包括发送备份电子邮件并归档我的代码/页面)并写了如下内容:
#! /bin/bash
NOW=`date +"%Y-%m-%d"`
MAIL_TO="email@example.com";
MAIL_SUBJECT="Hourly backup"
MAIL_MESSAGE="mail-message";
DB_FILE="backup-database-$NOW.sql.gz"
SITE_FILE="website-$NOW.tar.gz"
echo "Database dump:" >> $MAIL_MESSAGE
mysqldump --defaults-extra-file=.mysql-pwd --add-drop-table -C my_databse 2>> $MAIL_MESSAGE | gzip > $DB_FILE 2>> $MAIL_MESSAGE
echo "Site dump (www and php-include):" >> $MAIL_MESSAGE
tar -zcf $SITE_FILE /path/to/www/ /path/to/php-include/ 2>> $MAIL_MESSAGE
echo >> $MAIL_MESSAGE
echo >> $MAIL_MESSAGE
echo "Done" >> $MAIL_MESSAGE
mutt -s "$MAIL_SUBJECT" -a $DB_FILE -a $SITE_FILE $MAIL_TO < $MAIL_MESSAGE
【讨论】: