最近刚接手了一个内网环境的项目,数据库为MySQL单机系统,甲方提出定时备份数据库的需求。现整理下步骤。这里主要涉及两个技术点:一个是linux的计划命令工具crontab用来定时执行触发备份的脚本-完成定时的功能部分;另一个是MySQL的mysqldump工具-用来完成备份的功能部分。这两个工具如果没有安装的话需要提前处理一下。
1 crontab命令,这里主要涉及两个命令
crontab -l // 用来查看当前已经配置的定时任务
crontab -e // 用来编辑当前的定时任务信息
其中crontab -e 编辑的信息分为两部分:cron表达式+需要执行的命令
其中第二行的功能就是每天的1小时10分的时候去执行echo命令,将“test crontab cmd”保存到test.txt文件中。这里只是按时去执行这条命令,至于是命令是否合法是否否成功他是不管的。
2 mysqldump 命令,它自带的参数比较多,通过组合可以实现导出指定ip,指定数据库,指定表甚至是表中符合一些查询条件的内容;下面是导出数据库daname下表tablename的内容
mysqldump -username -password --databases dbname --tables tablename >/tmp/db.sql
3 完成脚本完整内容
有了以上两个工具,基本就可以实现自动备份的功能了,剩下的就是补充一些语法和额外的校验等功能(比如存储空间是否充足,只保留最近30天的备份数据等)
完整内容如下:
3.1 定时任务,每天凌晨4点10分执行 home下面的mysql_dump_timer.sh脚本
10 4 * * * bash /home/mysqldump/mysql_dump_timer.sh
3.2 完成mysql_dump_timer.sh脚本编写
#!/bin/bash
#数据库定时保存脚本
#1 校验磁盘空间是否充足
#2 执行备份操作
#3 验证备份数量是否超出设置数,移除最早的文件
#保存30天备份数据
backup_count=30
#备份保存路径
backup_dir=/home/mysqldump
#日期
dateFormat=`date +%Y-%m-%d-%H-%M-%S`
#备份工具
backup_tool=mysqldump
#用户名
username=rusername
#密码
password=rpassword
#数据库名称
database_name=real_database_name
# 表名称
table_name=channel
# 服务器磁盘空间限制
ram_limit=499
#校验空间是否充足
current_ram=`df -m |grep home |awk '{print $4}'|head -1 `
echo "current_ram = $current_ram "
if [ $ram_limit -gt $current_ram ]
then
echo "current_ram=$current_ram is too lower to backup" >> $backup_dir/log.txt
exit 1
fi
# 备份目录创建
if [ ! -d $backup_dir ];
then
mkdir -p $backup_dir;
fi
#执行备份操作
$backup_tool -u $username -p$password $database_name $table_name |gzip > $backup_dir/$database_name-$dateFormat.sql.gz
echo "create $backup_dir/$database_name-$dateFormat.sql.dupm" >> $backup_dir/log.txt
#校验当前备份文件的数量,是否删除最早的文件
delfile=`ls -l -crt $backup_dir/*.gz | awk '{print $9} '| head -1 `
echo "delfile= $delfile"
count=` ls -l -crt $backup_dir/*.gz |awk '{print $9}'| wc -l `
echo "count= $count"
if [ $count -gt $backup_count ]
then
rm $delfile
echo " delete $delfile ">> $backup_dir/log.txt
fi