今天這個(gè)備份分二個(gè)版本一個(gè)是linux上直接安裝的mysql,另一種是docker上安裝的mysql?;静僮鞫家粯又皇莻浞輘ql語(yǔ)句不同而已。可以選擇設(shè)置需要備份的庫(kù),自動(dòng)備份壓縮,自動(dòng)刪除 7 天前的備份,需要使用 crontab 定時(shí)執(zhí)行。
創(chuàng)建一個(gè)mysql.sh文件
- 要備份的數(shù)據(jù)庫(kù)名,多個(gè)數(shù)據(jù)庫(kù)用空格隔開(kāi)
#!/bin/bash
databases=(db1 db2 db3)
- 備份文件要保存的目錄
basepath='/usr/local/mysql/'
if [ ! -d "$basepath" ]; then
mkdir -p "$basepath"
fi
- 循環(huán)databases數(shù)組
for db in ${databases[*]}
do
- 每個(gè)數(shù)據(jù)庫(kù)文件夾
if [ ! -d "$basepath$db" ]; then
mkdir -p "$basepath$db"
fi
- 備份數(shù)據(jù)庫(kù)生成SQL(Linux)文件
/bin/nice -n 19 /usr/bin/mysqldump -uUSER -pPASSWORD $db > $basepath$db/$db-$(date +%Y%m%d).sql
- 備份數(shù)據(jù)庫(kù)生成SQL(Docker)文件
docker exec mysql mysqldump -uUSER -pPASSWORD $db > $basepath$db/$db-$(date +%Y%m%d).sql
- 將生成的sql文件壓縮
/bin/nice -n 19 tar zPcf $basepath$db/$db-$(date +%Y%m%d).tar.gz $basepath$db/$db-$(date +%Y%m%d).sql
- 刪除7天之前的備份數(shù)據(jù)
find $basepath/* -mtime +7 -name ".tar.gz" -exec rm -rf {} \;
done
- 刪除生成的SQL文件
rm -rf $basepath/*/*.sql
- 使用crontab設(shè)置定時(shí)執(zhí)行
crontab -e
- 設(shè)置為凌晨2點(diǎn)執(zhí)行
0 2 * * * /usr/local/mysql/mysql.sh