shell脚本:
#! /bin/bash
# MySQL用户
username="root"
# MySQL密码
password="123456"
# 需要定时备份的数据表列表
dbNames=(test1 test2 test3)
# 每次的备份数据以日期创建文件夹存放,同时删除过期备份
DATE=`date -d "now" +%Y%m%d%H`
ODATE=`date -d "-1 day" +%Y%m%d%H`
backup_dir=/www/backup
newdir=/www/backup/$DATE
olddir=/www/backup/$ODATE
# 创建新备份文件夹
mkdir $newdir
# 对备份数据库列表的所有数据库备份
for dbName in ${dbNames[*]}
do
dumpFile=$dbName-$DATE.sql.gz
/usr/local/mysql/bin/mysqldump --socket=/usr/local/soft/mysql/mysql.sock -u$username -p$password $dbName | gzip > $newdir/$dumpFile
#创建备份日志
echo "" >> $backup_dir/log.txt
#输出当前时间
date --date='0 days ago' "+%Y-%m-%d %H:%M:%S" >> $backup_dir/log.txt
echo "-------开始-------" >> $backup_dir/log.txt
echo "create $backup_dir/dumpFile.dump" >> $backup_dir/log.txt
echo "-------结束--------" >> $backup_dir/log.txt
done
# 删除过期备份数据
if [ -d $olddir ];
then
rm -rf $olddir
fi
每天两点执行:
crontab -e
00 02 * * * /www/backup/backup.sh > /dev/null 2>&1
执行中可能遇到的问题:
1. 执行权限问题:backup.sh文件 必须有 x的执行权限。
2. 如果是在windows编写,上传后在执行脚本a.sh的时候会报错: bash: ./a.sh: /bin/bash^M: bad interpreter: No such file or directory
决绝办法:vim backup.sh进入backup.sh后, 在底部模式下, 执行 :set fileformat=unix 后执行 :wq保存修改。 然后就可以执行./backup.sh运行脚本了
3. 执行时报错:mysqldump: Got error: 2002: Can't connect to local MySQL server through socket '/data/mysql/mysql.sock' (2) when trying to connect
解决办法:
找到正确的套接字的路径:netstat -ln | grep mysql
unix 2 [ ACC ] STREAM LISTENING /usr/local/soft/mysql/mysql.sock
替换掉backup.sh文件里面的套接字路径