امروز می خوا م یه کد خیلی خوب رو براتون بزارم که می تونید با اضافه کردن این کد نو ست کردنش در cron خودتون به صورت خودکار از تمامی دیتابیس هاتون بکاپ تهیه کنید ولی این کد برای هر دیتابس یک فایل خیلی فشرده شده برای شما ایجاد می کنه که می تونید تا 90% فایل رو فشرده می کنه که خیلی امکان خوبیه. ضمنا چون با bash script نوشته شده دوستان برنامه نویس می تونند بر مبنای نیاز خودشون کاملا سفارشیش کنید.
اما مراحل انجام کار، این کار رو شما در 4 مرحله می تونید انجام بدید.
مرحله اول:
ما در یک پوشه ای که من پیشنهادم پوشه root هست دستور زیر رو اجرا کنید
vi /root/mysql_backup.sh
و کد زیر رو توی این فایل کپی کنید:
#!/bin/sh#==============================================================================#TITLE: mysql_backup.sh#DESCRIPTION: script for automating the daily mysql backups on development computer#AUTHOR: tleish#DATE: 2013-12-20#VERSION: 0.4#USAGE: ./mysql_backup.sh#CRON: # example cron for daily db backup @ 9:15 am # min hr mday month wday command # 15 9 * * * /Users/[your user name]/scripts/mysql_backup.sh
#RESTORE FROM BACKUP #$ gunzip < [backupfile.sql.bz2] | mysql -u [uname] -p[pass] [dbname]
#==============================================================================# CUSTOM SETTINGS#==============================================================================
# directory to put the backup filesBACKUP_DIR=/backup مکان ذخیره کردن بکاپها
# MYSQL ParametersMYSQL_UNAME=root کلمه کاربری که دسترسی های لازم رو داشته باشهMYSQL_PWORD=پسورد شما
# Don't backup databases with these names # Example: starts with mysql (^mysql) or ends with _schema (_schema$)IGNORE_DB="(^mysql|_schema$)"
# include mysql and mysqldump binaries for cron bash userPATH=$PATH:/usr/local/mysql/bin
# Number of days to keep backupsKEEP_BACKUPS_FOR=30 #days
#==============================================================================# METHODS#==============================================================================
# YYYY-MM-DDTIMESTAMP=$(date +%F)
function delete_old_backups(){ echo "Deleting $BACKUP_DIR/*.sql.bz2 older than $KEEP_BACKUPS_FOR days" find $BACKUP_DIR -type f -name "*.sql.bz2" -mtime +$KEEP_BACKUPS_FOR -exec rm {} \;}
function mysql_login() { local mysql_login="-u $MYSQL_UNAME" if [ -n "$MYSQL_PWORD" ]; then local mysql_login+=" -p$MYSQL_PWORD" fi echo $mysql_login}
function database_list() { local show_databases_sql="SHOW DATABASES WHERE \`Database\` NOT REGEXP '$IGNORE_DB'" echo $(mysql $(mysql_login) -e "$show_databases_sql"|awk -F " " '{if (NR!=1) print $1}')}
function echo_status(){ printf '\r'; printf ' %0.s' {0..100} printf '\r'; printf "$1"'\r'}
function backup_database(){ backup_file="$BACKUP_DIR/$TIMESTAMP.$database.sql.bz2" output+="$database => $backup_file\n" echo_status "...backing up $count of $total databases: $database" $(mysqldump --routines --events $(mysql_login) --lock-tables=false $database | bzip2 > $backup_file)}
function backup_databases(){ local databases=$(database_list) local total=$(echo $databases | wc -w | xargs) local output="" local count=1 for database in $databases; do backup_database local count=$((count+1)) done echo -ne $output | column -t}
function hr(){ printf '=%.0s' {1..100} printf "\n"}
#==============================================================================# RUN SCRIPT#==============================================================================delete_old_backupshrbackup_databaseshrprintf "All backed up!\n\n"
بعد از این کار با دستور زیر محتوا رو ذخیره می کنیم
:wq
بعد از این کار من پیشنهاد می کنم برای یک بار بعد از اینکه متغییر ها رو مثل username و password و مسیر ذخیره کردن بکاپها رو ست کردید و ذخیره شد. شما با دستور زیر می تویند اون رو به صورت دستی اجرا کنید و بعد از این کار اگر همه مسیرها رو به درستی اجرا کرده باشید فایلها رو در مسیر ذخیره می کنه و بکاپها رو به صورت کامل ایجاد می نماید.
/root/mysql_backup.sh
مرحله دوم:
بعد از انجام مراحل قبل باید ما این رو در cron ایجاد کنیم که به صورت اسکژولار اجرا بشه که برای این کار دستور زیر رو می زنیم و در خط بعدی با فشردن دکمه insert دستور زیر کپی می کنیم
crontab -e
1 9 * * * /root/mysql_backup.sh
که این یعنی این فایل رو در ساعت 9 و یک دقیقه صبح هر روز اجرا می کنه.
امیدوارم براتون این آموزش مفید باشه.