每小时数据库备份

每小时数据库备份

我有一个带 Kloxo 控制面板的 VPS,我想每 2 小时备份一次我的某个网站的数据库。我该怎么做?Kloxo 不支持每小时备份,只支持每日、每周和每月备份。

配置:CentOS+Apache+PHP+MysqlAdmin

答案1

编写一个小脚本如下:

#!/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 即可。

答案2

这是我在 Web 服务器上运行的 Bash 脚本。它已经为我服务了一段时间。

它在末尾包含一个用于删除旧备份的部分。您可以在变量部分中指定要保留的文件数。您必须取消注释该部分脚本才能运行。

#!/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 中,每两小时打开一个终端并输入(以 root 身份):

crontab -e

在其中输入如下新行:

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

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

现在它将每 2 小时运行一次,如果您取消注释删除部分,它还将删除旧备份。

干杯!

答案3

将每个表的数据库转储和 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

相关内容