Ихэнх сайтын хувьд MySQL баазыг түлхүү ашигладаг билээ. Тиймээс энэ удаад MySQL санг нөөцлөн өгөгдсөн хугацаагаар хадгалж имэйл ээр мэдэгддэг скрипт оруулъя.
###############---MYSQL BACKUP SCRIPT---#############
#
# By: BATMUNKH Moltov
# facebook.com/Batmunkh.Moltov
#
#
################---WWW.BATMUNKH.NET---################
#
# Боломжууд:
# Нөөцлөх хавтсыг зааж өгч болох бөгөөд тухайн
# өдрөөр уг хавтсанд шинэ хавтас үүсгэн файлуудыг хадгална
# Шаардлагагүй баазыг алгасах боломжтой
# Бүх баазыг тус тусад нь gzip хэлбэрээр шахаж хадгална
# Хэд хоног хадгалахыг тохируулах боломжтой
# Имэйлээр мэдэгдэнэ
# .........шинэлэгдсээр л байна....
#
# сонордуулга хүлээн авах имэйл
ADMIN_EMAIL="[email protected]"
#нөөцлөх шаардлагагүй баазын жагсаалт. 'db1','db2' гэх мэт оруулах
DATABASES_TO_EXCLUDE=""
#үндсэн авах шаардлагагүй баазууд
EXCLUSION_LIST="'information_schema','mysql','performance_schema'"
#хаана хадгалах зам
DIR_BACKUP=/backup/db/`date +\%G-\%m-\%d`
#backup файлыг хэд хоног хадгалах
RETENTION_BACKUP_DAY=20
#Үүнээс хойшхи кодыг ойлгохгүй бол засварлах шаардлагагүй
# tsag tootsoolohod ashiglana
TIME_START=`date +%s`
find ${DIR_BACKUP} -mindepth 1 -mtime +${RETENTION_BACKUP_DAY} -delete
mkdir -p ${DIR_BACKUP}
for DB in `echo "${DATABASES_TO_EXCLUDE}"`
do
EXCLUSION_LIST="${EXCLUSION_LIST},'${DB}'"
done
SQLSTMT="SELECT schema_name FROM information_schema.schemata"
SQLSTMT="${SQLSTMT} WHERE schema_name NOT IN (${EXCLUSION_LIST})"
MYSQLDUMP_DATABASES="--databases"
MYSQLDUMP_OPTIONS="--routines --triggers --add-drop-table --skip-lock-tables -v"
for DB in `mysql -ANe"${SQLSTMT}"`
do
#MYSQLDUMP_DATABASES="${MYSQLDUMP_DATABASES} ${DB}"
mysqldump ${MYSQLDUMP_OPTIONS} ${DB} -u root | gzip > ${DIR_BACKUP}/${DB}.sql.gz
done
TIME_FINISH=`date +%s`
echo `hostname` 'mysql backup done. ' `date` `who` | mail -s `hostname`" mysql backup done"`expr ${TIME_FINISH} - ${TIME_START}`" seconds" ${ADMIN_EMAIL}
Уг кодыг жишээ нь /script/backup_db.sh гэж хадгалаад cronjob дээр нэмж хэдий хугацаанд хэрхэн нөөцлөлт авахаа тохируулна.
Автоматжуулах жишээ комманд:
[decoder@linux ] crontab -e
# Дараах мөрийг нэмж өгнө
18 03 * * * sh /scripts/backup_db.sh
Update:
2017.01.21 - Цаг тооцоолол нэмлээ
2017.04.28 - bug fixed. (mysqldump ${MYSQLDUMP_OPTIONS} ${MYSQLDUMP_DATABASES} -u root | gzip > ${DIR_BACKUP}/${DB}.sql.gz)