因为备份命令需要用到mysql的root账户和密码,而将账户和密码写入到脚本中无疑是不安全的,5.6.x版本执行备份脚本的时候会发生警告:Warning: Using a password on the command line interface can be insecure,真正安全的做法的是先登录一次将账户和密码加密到当前用户目录下,后续使用就引用即可:
#先输入下面命令,会提示输入对应用户的密码,下面设置了一个mysql的local的本地虚拟用户,注意密码不能用特殊符号
#会在当前用户目录下面生成一个 ~/.mylogin.cnf加密文件,重新设置可以直接删除此文件
mysql_config_editor set --login-path=local --host=localhost --user=root --password
然后弹出输入密码提示,直接输入root的密码即可
#在脚本中使用root和密码,加一句--login-path=local即可,注意是local用户
mysql --login-path=local -e "showdatabases;"
#自动备份,注意--logn-path必须放到所有参数最前面(重要),不然会提示出错
mysqldump --login-path=local --default-character-set=utf8 databaseName | gzip -f > /bakup/path/databaseName.sql.gz
----
#服务器上的备份策略适配mysql5.6及以上
vi /root/mysqlbak.sh
#内容如下
#!/bin/bash
date="$(date +"%Y-%m-%d")"
nobak="Database information_schema mysql performance_schema phpmyadmin sys"
dir=/data/wwwroot/bak
database=`mysql --login-path=local -e "show databases;"`
for v in $database
do
for a in $nobak
do
if [ $a == $v ]
then
continue 2
fi
done
/usr/local/mysql/bin/mysqldump --login-path=local --default-character-set=utf8 $v | gzip > $dir/$v-$date.sql.gz
done
#计划任务
vi /etc/crontab
30 1 * * * root /root/mysqlbak.sh > /dev/null 2>&1
参考: