脚本需求描述

  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(即执行成功),则输出“备份成功”

执行脚本结果

mysql 备份 windows mysql 备份脚本_mysql 备份 windows

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 备份 windows mysql 备份脚本_mysql_02


从上面报错可以看出,高版本的mysql是不允许在命令行中直接使用账号和密码的(这是mysql升级后的密码安全机制导致的),也就是说如果想要通过这种命令进行数据库备份,就要在-p参数后面空着,然后执行命令之后,会提示单独隐式输入密码,然后进行备份那么在新版本中,直接用上述脚本中的命令(即调用mysql配置文件的方式)来备份就ok吗?NO!,我们还需要在mysql的配置文件中稍作修改才可以直接调用该命令进行数据库备份,否则情况如下

mysql 备份 windows mysql 备份脚本_mysql 备份 windows_03


所以,在5.6版本后进行数据库备份且保证不报错,需要做对mysql的配置文件做一定修改

mysqldump: [Warning] Using a password on the command line interface can be insecure问题原因及解决方法