Shell script sao lưu database MySQL trong Linux

Shell script sao lưu database MySQL trong Linux

Đoạn Shell script sau giúp bạn sao lưu MySQL trong môi trường Linux. Script được viết bởi VIVEK GITE (tham khảo thêm tại http://www.cyberciti.biz/tips/mysql-backup-script.html).

Bạn sử dụng đoạn script bên dưới với các lưu ý như sau:

  • Thay các giá trị credential của MySQL vào giá trị các biến: MySQLUser, MySQLPass, MySQLHost
  • Chỉ định đường dẫn chứa file sao lưu tại 2 biến: DEST và MDB
  • Thêm các database cần sao lưu vào biến DatabaseList. Nếu không chỉ định rõ thì danh sách sẽ bao gồm tất cả database trong MySQL
  • Thêm các database không cần sao lưu vào biến IgnoreDatabaseList
# MySQL Credentials. Update with your current credentials.
MySQLUser=“YourUsername”# MySQL Username
MySQLPass=“YourPassword”# MySQL Password
MySQLHost=“YourHostname”# MySQL Hostname
# Linux bin paths, change this if it can not be autodetected via which command
MYSQL=“$(which mysql)”
MYSQLDUMP=“$(which mysqldump)”
CHOWN=“$(which chown)”
CHMOD=“$(which chmod)”
GZIP=“$(which gzip)”
# Backup Dest directory, change this if you have someother location
DEST=“/backup”
# Main directory where backup will be stored
MBD=“$DEST/mysql”
# Get hostname
HOST=“$(hostname)”
# Get data in dd-mm-yyyy format
NOW=“$(date +”%H-%M.%d-%m-%Y”)”
# File to store current backup file
BackupFile=“”
# Store list of databases
DatabaseList=“”
# DO NOT BACKUP these databases. Example: IgnoreList=”information_schema performance_schema”
IgnoreList=“”
[ ! -d $MBD ] && mkdir -p $MBD || :
# Only root can access it!
$CHOWN 0.0 -R $DEST
$CHMOD 0600 $DEST
# Get all database list first
DatabaseList=“$($MYSQL -u $MySQLUser -h $MySQLHost -p$MySQLPass -Bse ‘show databases;’)”
# Loop for backing up all databases (not in the ignore list)
for db in $DatabaseList
do
skipdb=-1
if [ “$IgnoreList” != “” ];
then
for i in $IgnoreList
do
[ “$db” == “$i” ] && skipdb=1 || :
done
fi
if [ “$skipdb” == “-1″ ] ; then
BackupFile=“$MBD/$db.$HOST.$NOW.gz”
# do all inone job in pipe,
# connect to mysql using mysqldump for select mysql database
# and pipe it out to gz file in backup dir
$MYSQLDUMP –single-transaction -u $MySQLUser -h $MySQLHost -p$MySQLPass $db | $GZIP9 > $BackupFile
fi
done

Download script tại đây. Đổi tên file từ .txt thành .sh và dùng công cụ crontab để đặt lịch sao lưu tự động.

Cám ơn VIVEK GIT tại http://www.cyberciti.biz đã cung cấp đoạn script rất hữu ích!