Shell编程入门加案例之Linux的Mysql数据库定时备份

简介: 设置每天凌晨2点自动执行上面的脚本。使用crontab创建任务:crontab -e

1、Shell基础语法

案例:

#!/bin/bash
# 定义变量,等号两边不能有空格,变量命名规则和一般java一样。变量名一般是大写的,规范来说
msg=你大爷的bkl
echo 他说:$msg
# 撤销变量
unset msg
# 定义静态变量 即不可unset的
readonly name=bkl
echo "my name is $name"
# 将命令的返回值赋值给变量,以下两种写法均可以
date1=`date`
date2=$(date)
echo date1=$date1
echo date2=$date2
echo 环境变量在/etc/profile定义,然后source /etc/profile使其生效
echo 环境变量MY_TEST=$MY_TEST
# 多行注释
:<<!
echo 123
echo 222
echo 333
!
# echo 多行注释
echo ------命令行参数获取------
echo 命令本身=$0 参数1=$1 参数2=$2
echo 全部参数(所有参数看成整体)=$*
echo 全部参数(每个参数区分对待)=$@
echo 参数个数=$#
echo ------预定义变量,是shell设计者预先定义好的变量,可直接使用------
echo 当前进程的进程号=$$
# 后台运行在命令最后加上&即可
# /root/shcode/hello.sh &
echo 后台运行的最后一个进程的进程号=$!
echo 最后一次执行命令的返回状态,如果为0即正确执行了,反之不正确$?
echo ------运算符------
echo 第一种写法=$(((2+3)*4))
echo 第二种写法(推荐)=$[(2+3)*4]
echo 第三种写法,用expr写,案列都不想打,太反人类了
echo 求出命令行的两个参数的和=$[$1+$2]
echo ------条件判断------
echo 字符串比较用=
echo 两个数比较用-lt -le -eq -gt -ge -ne(分别代表 小于 小于或者等于 等于 大于 大于或者等于 不等于)
echo 按文件权限判断 -r -w -x(分别代表有 读 写 执行 的权限)
echo 按文件类型判断 -f -e -d(分别代表 文件存在且是一个常规文件 文件存在 文件存在且是一个目录)
echo 条件判断案例(条件用中括号,括号左右必须有空格,条件为空的话就是false):
if [ bkl=bkl ]
  then
    echo bkl等于bkl
fi
if [ 22 -le 23 ]
  then
    echo 22小于等于23
fi
if [ -f /root/shcode/hello.sh ]
  then
    echo hello.sh文件存在
fi
if [ $1 -le 100 ]
then
  echo 命令行参数1小于等于100
elif [ $1 -le 120 ]
then
  echo 命令行参数1小于等于120
else
  echo 命令行参数1大于120
fi
echo ------流程控制------
echo case的基本使用
case $1 in
111)
echo 命令行参数1为111
;;
11)
echo 命令行参数1为11
;;
*)
echo 命令行参数1为other
;;
esac
echo ------for循环------
for i in $*
do
  echo 命令行参数=$i
done
SUM=0
for (( j=0; j<=$1; j++ ))
do
  SUM=$[$SUM+$j]
done
echo 总和SUM=$SUM
echo ------while循环------
SUM=0
i=0
while [ $i -le $1 ]
do
  SUM=$[$SUM+$i]
  i=$[$i+1]
done
echo while执行后SUM=$SUM
echo ------read从控制台输入------
read -t 5 -p 请输入一个数(请5秒内输入,否则默认跳过): NUM1
if [ $NUM1 ]
then
  echo 你输入的是:$NUM1
else
  echo -e "\n你没输入任何数据..."
fi
echo ------系统自带函数------
echo 用basename获取文件名`basename /home/aaa/bbb/test.txt`
echo 用basename获取文件名,去除后缀的`basename /home/aaa/bbb/test.txt .txt`
echo 用dirname获取完整路径最后个/前面的部分`dirname /home/aaa/bbb/test.txt`
echo ------自定义函数------
function getSum(){
  SUM=$[$n1+$n2]
  echo 你输入的两数和为:$SUM
}
read -p 请输入整数n1: n1
read -p 请输入整数n2: n2
# 调用自定义函数
getSum $n1 $n2


2、Linux的Mysql数据库定时备份

案例代码:

#!/bin/bash
#备份目录
BACKUP=/data/backup/mysql
#当前时间
DATETIME=$(date +%Y-%m-%d_%H%M%S)
#数据库地址
HOST=localhost
#数据库用户名
DB_USER=root
#数据库密码,包含特殊字符需要用单引号包起来,不然报错
DB_PWD='123456!@#$%^&*()-='
#需要备份的数据库名
DATABASE=backup_test
#创建备份目录
[ ! -d "$BACKUP" ] && mkdir -p $BACKUP
echo 开始备份数据库:$DATABASE
#备份数据库 -R表示导出存储过程和自定义函数
mysqldump -u$DB_USER -p$DB_PWD --host=$HOST -R --databases $DATABASE | gzip > $BACKUP/$DATETIME.sql.gz
#删除10天前的备份文件
find $BACKUP -atime +10 -name "*.sql.gz" -exec rm -rf {} \;
echo 备份数据库成功,文件名:$DATETIME


2.1 授予执行权限

chmod u+x /usr/sbin/bkl_mysql_db_backup.sh


2.2 开启定时任务

设置每天凌晨2点自动执行上面的脚本。

使用crontab创建任务:crontab -e

输入:

0 2 * * * /usr/sbin/bkl_mysql_db_backup.sh

分别代表 分 时 日 月 周几 待执行的任务

保存退出即可。

然后crontab -l即可查看任务。


结果检测:

89e927cf9ecd407fae6a23daa78c4ca6.png


可以看到11日和12日已经正常备份了。

相关实践学习
自建数据库迁移到云数据库
本场景将引导您将网站的自建数据库平滑迁移至云数据库RDS。通过使用RDS,您可以获得稳定、可靠和安全的企业级数据库服务,可以更加专注于发展核心业务,无需过多担心数据库的管理和维护。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
目录
相关文章
|
9月前
|
存储 Oracle 关系型数据库
服务器数据恢复—光纤存储上oracle数据库数据恢复案例
一台光纤服务器存储上有16块FC硬盘,上层部署了Oracle数据库。服务器存储前面板2个硬盘指示灯显示异常,存储映射到linux操作系统上的卷挂载不上,业务中断。 通过storage manager查看存储状态,发现逻辑卷状态失败。再查看物理磁盘状态,发现其中一块盘报告“警告”,硬盘指示灯显示异常的2块盘报告“失败”。 将当前存储的完整日志状态备份下来,解析备份出来的存储日志并获得了关于逻辑卷结构的部分信息。
|
9月前
|
NoSQL MongoDB 数据库
数据库数据恢复—MongoDB数据库数据恢复案例
MongoDB数据库数据恢复环境: 一台操作系统为Windows Server的虚拟机上部署MongoDB数据库。 MongoDB数据库故障: 工作人员在MongoDB服务仍然开启的情况下将MongoDB数据库文件拷贝到其他分区,数据复制完成后将MongoDB数据库原先所在的分区进行了格式化操作。 结果发现拷贝过去的数据无法使用。管理员又将数据拷贝回原始分区,MongoDB服务仍然无法使用,报错“Windows无法启动MongoDB服务(位于 本地计算机 上)错误1067:进程意外终止。”
|
7月前
|
SQL 关系型数据库 MySQL
Mysql数据恢复—Mysql数据库delete删除后数据恢复案例
本地服务器,操作系统为windows server。服务器上部署mysql单实例,innodb引擎,独立表空间。未进行数据库备份,未开启binlog。 人为误操作使用Delete命令删除数据时未添加where子句,导致全表数据被删除。删除后未对该表进行任何操作。需要恢复误删除的数据。 在本案例中的mysql数据库未进行备份,也未开启binlog日志,无法直接还原数据库。
|
8月前
|
存储 关系型数据库 MySQL
在CentOS 8.x上安装Percona Xtrabackup工具备份MySQL数据步骤。
以上就是在CentOS8.x上通过Perconaxtabbackup工具对Mysql进行高效率、高可靠性、无锁定影响地实现在线快速全量及增加式数据库资料保存与恢复流程。通过以上流程可以有效地将Mysql相关资料按需求完成定期或不定期地保存与灾难恢复需求。
595 10
|
10月前
|
存储 关系型数据库 MySQL
【赵渝强老师】使用select...into outfile语句备份MySQL
本文介绍了MySQL中使用`SELECT...INTO OUTFILE`语句将表数据导出为文本文件的方法。通过示例演示了如何备份员工表(emp)的数据,包括创建存储目录、设置权限、配置参数`secure_file_priv`以及解决相关错误的过程。字段分隔符和行终止符可自定义,确保数据格式符合需求。最后展示了备份文件的内容,验证操作成功。
603 36
|
10月前
|
存储 SQL 关系型数据库
【赵渝强老师】使用mysqldump备份MySQL
本文介绍了 MySQL 自带的逻辑备份工具 mysqldump 的使用方法。通过 mysqldump,可以将数据库中的数据转换为对应的 SQL 插入语句,便于备份和还原。文章详细说明了如何备份所有数据库、指定数据库及特定表,排除某些表不备份的操作,以及删除数据库后如何通过备份文件恢复数据。同时提供了视频讲解和具体命令示例,帮助用户更好地理解和应用该工具。
977 5
|
9月前
|
Oracle 关系型数据库 数据库
数据库数据恢复—服务器异常断电导致Oracle数据库报错的数据恢复案例
Oracle数据库故障: 某公司一台服务器上部署Oracle数据库。服务器意外断电导致数据库报错,报错内容为“system01.dbf需要更多的恢复来保持一致性”。该Oracle数据库没有备份,仅有一些断断续续的归档日志。 Oracle数据库恢复流程: 1、检测数据库故障情况; 2、尝试挂起并修复数据库; 3、解析数据库文件; 4、导出并验证恢复的数据库文件。
|
10月前
|
存储 SQL 关系型数据库
【赵渝强老师】使用mydumper备份MySQL
本文介绍了使用mydumper工具进行MySQL数据库备份与恢复的操作方法。相比单线程工作的mysqldump,mydumper支持多线程,速度提升可达10倍。其功能包括事务性表快照、快速压缩、导出binlog等,并提供详细的参数说明和操作步骤。文章通过实例演示了安装mydumper、创建存储目录、全库备份、指定数据库及表备份、删除数据库以及使用myloader恢复数据的完整流程,并附带视频讲解,帮助用户更好地理解和应用该工具。
676 0
|
7月前
|
缓存 关系型数据库 BI
使用MYSQL Report分析数据库性能(下)
使用MYSQL Report分析数据库性能
485 158
|
7月前
|
关系型数据库 MySQL 数据库
自建数据库如何迁移至RDS MySQL实例
数据库迁移是一项复杂且耗时的工程,需考虑数据安全、完整性及业务中断影响。使用阿里云数据传输服务DTS,可快速、平滑完成迁移任务,将应用停机时间降至分钟级。您还可通过全量备份自建数据库并恢复至RDS MySQL实例,实现间接迁移上云。

热门文章

最新文章