mysql if 不等于_备份MySQL数据库shell脚本

2022-10-02 13:29:15

备份数据是为了避免在意外情况下,比如断电、中病毒等等情况使数据丢失。所以有必要去勤备份,防止数据丢失。

本文就不说shell编程命令和语句,直接写一个脚本。

准备

虚拟机上MySQL数据库已经安装好。

简单的创建了一个test库,库中有一张test表。脚本就以备份test库为例。

35701382056f408d1493b20fe1262eff.png

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下面那个键。

dd242645bb69fc24e6da174b898c9b1c.png

判断目录是否存在

下一步,我们要判断备份目录是否存在,若不存在,要创建,否则不需要管。

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

执行结果

ec89abd01ebc391e73cc5f9c9fa63af3.png

这个过程可以自己分析一下。最终备份成功,进入备份目录查看一下

[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,现在执行文件看打印什么

185b242d9ac5cfabd879f58220452001.png

必须是root用户才能执行,这是我们想要的效果。

备份脚本已经基本功能完成,当然还可以继续完善,还可以配置成每天自动备份等等。

  • 作者:小小牵牛星
  • 原文链接:https://blog.csdn.net/weixin_29446109/article/details/113491722
    更新时间:2022-10-02 13:29:15