У меня есть VPS с панелью управления Kloxo, я хочу получать резервную копию базы данных с одного из моих сайтов каждые 2 часа. Как я могу это сделать? Kloxo не поддерживает ежечасное резервное копирование, только ежедневное, еженедельное и ежемесячное.
конфигурация: CentOS + Apache + PHP + MysqlAdmin
Вот сценарий 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 часа, и если вы раскомментировали раздел удаления, также будут удалены старые резервные копии.
Ура!
Напишите небольшой скрипт вроде:
#!/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.
Для таблицы db dump и 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