最近一周,一直在围绕着Mysql的备份及主从数据库的同步的工作。在信息化工程中,数据是最核心的也是最有价值的资产了,在月初出现了Mysql服务器home目录的空间不足问题(今天就不展开讲这个问题),经过对空间的扩容之后,也造成了一些问题。我在扩容中没有做好数据的备份,把MySql的自动备份脚本以及其他文件删除了。所以今天又重新补了一份,也在此做个记录。
做的这个备份脚本,也是用到了Mysql的mysqldump命令。
这是基础命令,经过我的改造之后,形成脚本。
#!/bin/bash
#mysqldump路径
bin_dir=/usr/bin
#用户名
username=root
#密码
password=xxxx
#备份的数据库名(用逗号隔开)
db_list=db1,db2
#备份目录
back_dir=/home/mysql-back/
#日期
time=$(date "+%Y%m%d%H%M%S")
time2=$(date "+%Y-%m-%d %H:%M:%S")
#保存备份个数,最多保留42(2个*3次*7天)个文件
number=42
echo "--------------------------- 开始备份 ---------------------------"
#切割要备份的数据库名
curr_list=(${db_list//,/ })
for db_name in ${curr_list[@]}
do
echo -e "\n要备份的库:${db_name}"
${bin_dir}/mysqldump --opt -u${username} -hlocalhost ${db_name} > $back_dir/back/$time${db_name}.sql
#写创建备份日志
echo "time: $time2 create $back_dir/$time${db_name}.sql" >> $back_dir/log.txt
echo "==> 备份:${db_name} --> $back_dir"
done
#判断现在的备份数量是否大于$number
count=`ls -l -crt $back_dir/back/*.sql | awk '{print $9 }' | wc -l`
let res=count-number
if [ $res -lt 0 ];
then
res=0
fi
echo "time:$time2 现有:$count,删除个数:$res" >> $back_dir/log.txt
#找出需要删除的备份
delfile=`ls -l -crt $back_dir/back/*.sql | awk '{print $9 }' | head -$res`
if [ "delfile" != "" ];then
rm -rf $delfile
#写删除文件日志
echo "time:$time2 delete $delfile" >> $back_dir/log.txt
fi
if [ $res == 0 ];then
echo "time:$time2 不需要删除文件" >> $back_dir/log.txt
fi
echo "--------------------------- 备份完成 ---------------------------"
上面的脚本修改关键信息后,即可使用。
# 特殊说明
1、关于基础命令中的密码问题
自Mysql5.6之后 在使用此命令时,会出现
解决办法:
在vim /etc/my.cnf(我的是这个目录)
添加
[mysqldump]
user=root
passwordl=xxxx
重启mysql 服务
在使用mysqldump命令时,就可以不用指定用户名和密码了。
2、关于保留的文件数
这个根据自己的情况而定,我的示例中是 需要备份两个库,每天备份三次,保留7天的备份信息,所以算是起就是要保留42个文件,而多于42之后,就删除最早的两个文件。
3、上面的是脚本,如要做成自动备份,还需要配置centos下的定时任务crontab即可!
关于脚本的备份就写到这里!