今日目标: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~31
第4列表示月份1~12
第5列标识号星期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
日志截图