备份数据是为了避免在意外情况下,比如断电、中病毒等等情况使数据丢失。所以有必要去勤备份,防止数据丢失。
本文就不说shell编程命令和语句,直接写一个脚本。
准备
虚拟机上MySQL数据库已经安装好。
简单的创建了一个test库,库中有一张test表。脚本就以备份test库为例。

mysql备份使用mysqldump,命令格式:
mysqldump -u用户名 -p密码 数据库名 > 备份文件名.sql
这条命令是主要的功能,脚本功能就是围绕这条命令来编写。
定义变量
首先,脚本的名字就定为backup_mysql.sh,这样一看就知道它的作用。使用vi或者vim编辑它,如果文件还没创建,就是编辑一个新文件,vim命令需要安装。
vim backup_mysql.sh
shell第一行是,#!/bin/bash。
回到备份命令,我们还需要知道mysqldump命令的位置,不知道的话,可以使得locate命令查找一下。
[root@localhost ~]# locate mysqldump/usr/bin/mysqldump/usr/bin/mysqldumpslow/usr/share/man/man1/mysqldump.1.gz/usr/share/man/man1/mysqldumpslow.1.gz
/usr/bin/mysqldump就是它的路径。
在脚本中,我们将mysqldump、数据库用户名、数据库密码、要备份的数据库、备份目录等定义为变量,格式:变量名=变量值。可以在数据库中创建一个用来备份的用户,为了方便测试直接就用root用记。
mysqldump=/usr/bin/mysqldumpdbuser=rootdbpassword=Local2019@databases=testback_dir=/home/backupfile/`date +%Y%m%d`
备份路径中的`date +%Y%m%d`,用于获取当前时间。注:`date +%Y%m%d`前后两个符号是英文状态下的ESC下面那个键。

判断目录是否存在
下一步,我们要判断备份目录是否存在,若不存在,要创建,否则不需要管。
if [ ! -d $back_dir ];then mkdir -p $back_dirfi
上面代码意思是,如果这个目录不存在的话则创建。mkdir -p 创建目录,fi结束判断。
注:if和[、[和]之间的每个元素,一定要有空格隔开。
指定执行用户
有必要的话,还可以指定用户来执行这上脚本,比如root用户才能执行,在脚本判断一下。在Linux权限管理中说过,每个用户有一个UID,可以此判断是否root用户。
查看UID[root@localhost ~]# echo $UID0[root@localhost ~]#
所以root的UID是0。脚本中,如果UID不等于0,则不能继续执行。
if [ $UID -ne 0 ];then echo "必须是root用户来执行此脚本" exitfi
-ne是不等于,等于则是-eq。如果不等于0,即不是root用户,echo打印一个提示,然后exit,直接退出。
执行备份并判断是否成功
那么下一步,就可以执行备份了
$mysqldump -u$dbuser -p$dbpassword $databases > $back_dir/test.sql
我们还要知道是否备份成功。判断上面命令执行是否成功使用:$?,若等于0则说明成功,否则失败。
if [ $? -eq 0 ];then echo "备份成功"else echo "备份失败"fi
这个脚本的逻辑就是如此,最终的代码:
#!/bin/bash mysqldump=/usr/bin/mysqldump dbuser=root dbpassword=Local2019@ databases=test back_dir=/home/backupfile/`date +%Y%m%d` #目录是否存在 if [ ! -d $back_dir ];then mkdir -p $back_dir fi #是否root用户 if [ $UID -ne 0 ];then echo "必须是root用户来执行此脚本" exit fi #备份 $mysqldump -u$dbuser -p$dbpassword $databases > $back_dir/test.sql #是否成功 if [ $? -eq 0 ];then echo "备份成功" else echo "备份失败" fi
测试
sh -n 命令检测一下脚本有没有语法错误
sh -n backup_mysql.sh
没有东西输出的话代表没有语法错误 。sh -x 执行,此命令会把执行过程打印出来
sh -x backup_mysql.sh
执行结果

这个过程可以自己分析一下。最终备份成功,进入备份目录查看一下
[root@localhost 20190707]# ll -h总用量 4.0K-rw-r--r--. 1 root root 1.9K 7月 7 12:16 test.sql[root@localhost 20190707]# pwd/home/backupfile/20190707[root@localhost 20190707]#
已经有一个test.sql,pwd查看路径,也是取了当前日期/home/backupfile/20190707。
再换一个用户测试,新建一个用户吧
useradd backup重置密码passwd backup
切换backup用户
su backup
查看它的UID
[backup@localhost root]$ echo $UID1002[backup@localhost root]$
不是0,现在执行文件看打印什么

必须是root用户才能执行,这是我们想要的效果。
备份脚本已经基本功能完成,当然还可以继续完善,还可以配置成每天自动备份等等。