第六章:6.3 Shell脚本与计划任务
6.3Shell脚本与计划任务
正如我们以前学过的.周期性的任务可以通过Crond 服务来管理,而步骤复杂、操作烦琐的任务可以使用Shell脚本来批量处理,两者相结合就可以非常灵活.自主地完成各种系统运维工作。
本节将以实现 MySQL 数据库的定期自动备份为目标.介绍Shell脚本与计划任务的完美协作过程。其中,Shell 脚本负责具体的备份操作.Crond服务负责控制备份周期。
1.确定备份方案
对于存在多个应用的数据库服务器.备份工作可能会划分得比较细,需要针对不同的库和表.不同的备份路径使用不同的验证用户等。下面以远程备份“青鸟在线”平台的两个论坛数据库为例.备份环境与需求如下所述。
? ? ? ? ? ? 备份主机IP地址为172.16.16,220,通过机柜内网络连接目标主机。
? ? ? ? ? ? 数据库服务器:IP地址为172.16.16.22,MySQL服务监听的端口为3306.
? ? ? ? ? 备份内容:对MySQL.服务器中的studydb、coursedb库进行远程备份.每天凌晨2∶30执行.每个库备份为独立的.sql 文件,然后压缩为“.tar . gz”格式,文件名中嵌入执行备份时的日期和时刻
为了顺利完成上述备份方案,首先需要做两个工作:其一,确保备份主机与数据库服务器之间保持连接畅通,不能有网络链路故障.防火墙封锁等阻碍,其二,MySQL服务必须允许从备份主机远程访问,且授权用户能够查询studydb、coursedb 库。
针对本案例的情况.可以创建一个专用的数据库备份账户operator,允许从备份主机172.16.16.220连接到MySQL数据库,并授予对studydb、 coursedb库的读取权限。使用逻辑备份工具mysqldump时.需要对库设置SELECT和LOCK TABLES权限。
创建? ?studydb;? ? ? coursedb;库
mysql> create database studydb;
mysql> create database coursedb;
针对本案例的情况.可以创建一个专用的数据库备份账户operator,允许从备份主机172.16.16.220连接到MySQL数据库.并授予对studydb、 coursedb库的读取权限。使用逻辑备份工具rmysqldump 时.需要对库设置 SELECT和LOCK TABLES权限。
mysql> grant select,lock tables ON studydb.* to 'operator'@'localhost'identified by '123';
Query OK, 0 rows affected (0.00 sec)
mysql> grant select,lock tables ON coursedb.* to 'operator'@'localhost'identified by '123';
Query OK, 0 rows affected (0.00 sec)
从备份主机中测试数据库访问.查询授权等是否有效.或者直接使用mysqldump备份工具进行测试。
[root@Linux01 ~]# mysqldump -u operator -p -h localhost --databases studydb > test.sql
2.编写MySQL备份脚本
在备份主机中,创建用来存放备份文件的目录(如/opt/qnzx_dbbak),并编写相应的备份脚本〈如qnzx_dbbak , sh),确认能够成功执行备份。脚本代码中,对于目标主机的P地址、用户名.密码.备份路径.文件名等信息.可能会在必要的时候变更。为了方便更新脚本,这些内容最好存放到固定名称的变量中。
[root@Linux01 ~]# mkdir -p /opt/qnzx_dbbak/ //创建备份目录
[root@Linux01 ~]# vim qnzx_dbbak.sh
#!/bin/bash
#这是一个简化的MySQL 数据库逻辑备份脚本
# 1. 定义数据库连接,目标库信息
MY_USER="operator"
MY_PASS=“123”
MY_HOST="localhost"
MY_CONN="-u $MY_USER -p $MY_PASS -h $MY_HOST"
MY_DB1="studydb"
MY_DB2="coursedb"
#2.定义备份目录,工具,时间,文件名主体
BF_DIR="/opt/qnzx_dbbak/"
BF_CMD="/usr/bin/mysqldump"
BF_TIME='date +%Y%m%d-%H%M'
NAME_1="$MY_DB1-$BF_TIME"
NAME_2="$MY_DB2-$BF_TIME"
#3.先导出为。sql脚本,然后进行压缩(打包后删除原文件)
cd $BF_DIR
$BF_CMD $MY_CONN --databases $MY_DB1 > $NAME_1.sql
$BF_CMD $MY_CONN --databases $MY_DB2 > $NAME_2.sql
/bin/tar zcf $NAME_1.tar.gz $NAME_1.sql --remove &> /dev/null
/bin/tar zcf $NAME_2.tar.gz $NAME_2.sql --remove &> /dev/null
?//手动执行备份脚本
[root@Linux01 ~]# ./qnzx_dbbak.sh
//添加执行权限
[root@localhost ~ ] #chmod +x qnzx_.cbbak.sh
确认备份结果
[root@Linux01 ~]# ls -lh /opt/qnzx_dbbak/*.gz
将脚本也转移至备份目录
[root@Linux01 ~]# mv qnzx_dbbak.sh /opt/qnzx_dbbak/
在指定的时间执行脚本程序
[root@Linux01 ~]# crontab -e
30 2 * * * /opt/qnzx_dbbak/qnzx_dbbak.sh
确保 crond 服务已运行
[root@Linux01 ~]# systemctl status crond.service d
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!