shell 之 mysql数据库备份脚本

15 篇文章 1 订阅
14 篇文章 0 订阅

脚本需求描述

  1.通过执行脚本可直接对mysql数据库下的blog01数据库进行备份
  2.将备份的数据库文件输出到指定的路径下(若没有则创建该路径)
  3.备份的数据库文件要以“20191015-mysqlbak.sql”的格式保存,前面的日期根据实际情况进行替换

5.6及更新版本mysql进行数据库备份脚本

环境
mysql版本为:5.7.27
代码

#!/bin/bash

# 定义变量
basename=`date +%Y%m%d`
bakdir=/home/malingang/shell
dbname="blog01"
dbcnf=/etc/my.cnf

[ -e $bakdir ] || mkdir $bakdir	# 若备份文件路径不存在,则创建之

mysqldump --defaults-extra-file=$dbcnf blog01 > $bakdir/$basename-mysqlbak.sql	# 备库语句

[ $? -eq 0 ] && echo "备份成功"	# 若上一个命令返回值为0(即执行成功),则输出“备份成功”

执行脚本结果
在这里插入图片描述

5.6之前版本mysql进行数据库备份脚本

代码

#!/bin/bash

# 定义变量
basename=`date +%Y%m%d`
bakdir=/home/malingang/shell
dbname="blog01"

host="127.0.0.1"
user="root"
password="root"

[ -e $bakdir ] || mkdir $bakdir	# 若备份文件路径不存在,则创建之

mysqldump -h $host -u$user -p$password blog01 > $bakdir/$basename-mysqlbak.sql

[ $? -eq 0 ] && echo "备份成功"	# 若上一个命令返回值为0(即执行成功),则输出“备份成功”

总结描述

大家能看到,5.6前后版本的备份脚本关键不同在于mysqldump语句,脚本其他部分基本一致
仔细观察我们会发现:

  1. 在5.6及之后版本中,mysql的备份语句中并没有直接用到 账号/密码 这些信息,而是直接调用了数据库的/etc/my.cnf配置文件
  2. 在5.6之前的版本中,则是直接在mysqldump中用了账号和密码的信息来进行备份的

为什么呢?

下面我们在5.7.27版本下的mysql环境下,使用5.6之前版本的备份语句备份一下数据库看看是什么情况:
在这里插入图片描述
从上面报错可以看出,高版本的mysql是不允许在命令行中直接使用账号和密码的(这是mysql升级后的密码安全机制导致的),也就是说如果想要通过这种命令进行数据库备份,就要在-p参数后面空着,然后执行命令之后,会提示单独隐式输入密码,然后进行备份

那么在新版本中,直接用上述脚本中的命令(即调用mysql配置文件的方式)来备份就ok吗?NO!,我们还需要在mysql的配置文件中稍作修改才可以直接调用该命令进行数据库备份,否则情况如下
在这里插入图片描述
所以,在5.6版本后进行数据库备份且保证不报错,需要做对mysql的配置文件做一定修改,具体参考以下博客:
mysqldump: [Warning] Using a password on the command line interface can be insecure问题原因及解决方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值