Bootstrap

shell脚本自动备份数据库表

今日目标:shell脚本自动备份数据库中的表并记录执行日志和mysql输出日志

编写思路:
(1)shell脚本运行mysql命令
(2)脚本输出记录到日志中
(3)定时任务自动执行shell脚本

1、shell脚本操作数据库

1、复制表的结构和数据
CREATE TABLE 新表 SELECT * FROM 旧表
2、只复制表结构到新表
CREATE TABLE 新表 SELECT * FROM 旧表 WHERE 1=2

#运行mysql命令
mysql -uroot -proot -D 库名 -e "sql语句"

2、增加执行日志

根据时间自动创建日志文件,写入执行时间

# 创建日志
hislog_dir="目录"
[ -d ${hislog_dir} ] || mkdir -p -m 300 ${hislog_dir}

export HISTFILE="${hislog_dir}/$(date '+%F').log"

echo "[$(date +%Y-%m-%d\ %H:%M:%S)]---自动备份" >> $HISTFILE

3、日志中增加shell脚本执行后的提示

运行脚本文件后,可能提示警告或者错误提示,将错误日志同步保存在执行日志文件中
在这里插入图片描述
shell脚本中
0正常标准输入(STDIN)
1标准正常输出(STDOUT)
2标准错误输出(STDERR)

总结:
一个 > 的是每次覆盖导出结果,两个 > 的是在文件尾部追加导出结果。
1>:导出成功结果,不支持导出失败结果。
2>:导出失败结果,不支持导出成功结果。
$>:支持导出上面两种结果,混合导出。

#运行mysql命令
mysql -uroot -proot -D 库名 -e "sql语句" 2>> $HISTFILE

4、增加定时任务

shell文件指定每周五早上6点10分执行

10  6  *  *  5     shell文件地址


 *    *    *    *    *      command
 分   时   日   月   周        命令
第1列表示分钟1~59 每分钟用*/1表示.2列表示小时1~23 (0表示0)3列表示日期1~314列表示月份1~125列标识号星期0~ 6 (0表示星期天)6列要运行的命令

代码完整版本

#!/bin/bash

# 创建日志
hislog_dir="目录"
[ -d ${hislog_dir} ] || mkdir -p -m 300 ${hislog_dir}

export HISTFILE="${hislog_dir}/$(date '+%F').log"

[ -e ${hislog_dir}/$(date '+%F').log ] || touch ${hislog_dir}/$(date '+%F').log
[ -x ${hislog_dir}/$(date '+%F').log ] || chmod 200 -R ${hislog_dir}/$(date '+%F').log

echo "[$(date +%Y-%m-%d\ %H:%M:%S)]---自动备份" >>$HISTFILE

#运行mysql
mysql -uroot -proot -D 库名 -e "sql语句" 2>>$HISTFILE

exit

日志截图
在这里插入图片描述

;