小时数据库备份

我有一个Kloxo控制面板的VPS,我想每两个小时从我的一个网站进行数据库备份。 我怎么能做到这一点? Kloxo不支持每小时备份,只支持每日,每周和每月。

configuration:CentOS + Apache + PHP + MysqlAdmin

写一个如下的小脚本:

#!/bin/bash # # Do the Backup # CURTIME=`date "+%Y%m%d-%H%M"` mysqldump --user=<dbusername> --password=<dbpassword> --all-databases | lzma -c -9 -z >/backup/db-${CURTIME}.dump.lzma 

并把这个到crontab。 (按小时运行会更容易:那么你可以把脚本放在/etc/cron.hourly中。

这里是我的web服务器上运行的bash脚本。 现在已经有好一段时间了。

它包括最后一部分删除旧备份。 您可以指定想要保留在variables部分的文件数。 您必须取消该脚本的该部分以使其运行。

 #!/bin/sh ################################################################# # Define your variables here: ################################################################# FILESTOKEEP=7 BACKUP_DIR=/home/user/backups BMYSQL_USER=mysql_user BMYSQL_PWD=mypassword DATE=$(date +"%m-%d-%Y")_$(date +"%T") BMYSQL_HOST=localhost BMYSQL_DBNAME=--all-databases BMYSQL_DBFILENAME=MYSQL_BACKUP_$DATE ################################################################# # Make sure output directory exists. ################################################################# if [ ! -d $BACKUP_DIR ]; then mkdir -p $BACKUP_DIR fi ################################################################# # Create backup ################################################################# mysqldump --host=$BMYSQL_HOST --user=$BMYSQL_USER --pass=$BMYSQL_PWD $BMYSQL_DBNAME | gzip > $BACKUP_DIR/$BMYSQL_DBFILENAME.gz ################################################################# # Remove old backups # - this will list files according to date (DESC) # - skip the first few files (FILESTOKEEP) # - remove all files past that # NOTE: Make sure not to save the backups into any directory # where there are other files other than these backup ones. # # Uncomment when you are confident in rest of setup ################################################################# # cd $BACKUP_DIR # ls -t1 | tail -n +$(($FILESTOKEEP+1)) | xargs rm 

我喜欢将我的脚本保存到我家用户的目录中。 这可能不是标准的做法,但它确实可以很容易地在稍后查找和编辑(几年后阅读)。 我将这个脚本保存为:

 /home/user/scripts/hourly_backup_mysql.sh 

把它放在你的cron里,每两个小时打一个terminal并input(以root身份):

 crontab -e 

在那里,input这样的新行:

 0 0-23/2 * * * /home/user/scripts/hourly_backup_mysql.sh 

(如果您对VIM不熟悉,要添加该行,您首先需要按'I'进行插入,然后转到文件末尾,然后按Enter键换行,粘贴string并进行编辑。完成编辑string,按ESC退出插入模式,然后键入':wq',这将写入和退出VIM编辑器。

这将每2小时运行一次,如果您取消注释删除部分,也将删除旧的备份。

干杯!

每个表db转储和gzip和rsync的一些地方:

 #!/usr/bin/ruby require 'mysql' rsyncTargets = [ ["files1" , "/path/to/backup/dir/"], ["files2", "/path/to/backup/dir/"], ["files3", "/path/to/backup/dir/"] ] tempDir = "/mnt/extra-space" dumpUser = "root" `rm -r /mnt/extra-space/*` con = Mysql.real_connect('localhost',dumpUser,'','') con.query('show databases').each do |db| print " Dumping - " + db[0] + "\n" Dir.mkdir("#{tempDir}/#{db[0]}") con.query("use #{db[0]}") con.query('show tables').each do |table| `mysqldump -u #{dumpUser} #{db[0]} #{table[0]} | gzip > #{tempDir}/#{db[0]}/#{table[0]}.sql.gz` end end con.close() rsyncTargets.each do |server| `rsync -av --delete /mnt/extra-space/ rsync://#{server[0]}:#{server[1]}` end 

取自: http : //techhelplist.com/index.php/tech-tutorials/42-databases/80-ruby-script-for-mysql-dump-gzip-cron-jobs