mysql到了8以后安全性大大增加,备份也是个麻烦事,我们今天来解决这个问题
为了方便维护,我们将要备份的信息存入一个配置文件db.conf
localhost root password db1 localhost root password db2然后写一个自动备份脚本,调用配置文件信息进行备份,脚本名为autoback.sh 内容如下:
#!/bin/bash PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin export PATH # 定义显示文本色彩 Color_Text() { echo -e " \e[0;$2m$1\e[0m" } Echo_Red() { echo $(Color_Text "$1" "31") } Echo_Green() { echo $(Color_Text "$1" "32") } Echo_Yellow() { echo $(Color_Text "$1" "33") } Echo_Blue() { echo $(Color_Text "$1" "34") } #检查是否传入数据库名称 #if [ ! -n "$1" ];then # Echo_Blue '[info] 请传入数据库名称' # exit #fi # 数据库配置 BIN_DIR="/var/lib/mysql8-2/bin" BCK_DIR="/data/mysql80/back" if [ ! -d $BCK_DIR ];then Echo_Blue '[info] 创建文件夹:'$BCK_DIR mkdir $BCK_DIR fi while read line do DB_HOST=`echo $line | cut -d " " -f 1` DB_USER=`echo $line | cut -d " " -f 2` DB_PASS=`echo $line | cut -d " " -f 3` DB_NAME=`echo $line | cut -d " " -f 4` Echo_Green '[info] 开始备份数据库'$DB_NAME #方法1,适用于mysql5.6以下版本 #$BIN_DIR/mysqldump --opt -u$DB_USER -p$DB_PASS -h$DB_HOST --add-locks --force -S /var/lib/mysql8-2/mysql.sock $DB_NAME> $BCK_DIR/$DB_NAME'_'$DATE.sql #方法2,要先设置my.cnf配置文件 #$BIN_DIR/mysqldump --defaults-extra-file=/data/mysql80/my2.cnf --opt --add-locks --force -S /var/lib/mysql8-2/mysql.sock $DB_NAME> $BCK_DIR/$DB_NAME'_'$DATE.sql #方法3,设置密码信息 DATE=`date +%Y%m%d%H` $BIN_DIR/mysqldump --login-path=login --opt --add-locks --force -S /var/lib/mysql8-2/mysql.sock $DB_NAME> $BCK_DIR/$DB_NAME'_'$DATE.sql Echo_Green '[info] 备份数据库'$DB_NAME'完成' done <db.conf Echo_Blue '[info] 备份完成' exit脚本编写完毕
现在给脚本添加权限
chmod +x autoback.sh我们来试运行一下
./autoback.sh运行成功 接下来就是设置定时运行了 我们来看一下crontab是否安装
crontab -l # crontab -l */1 * * * * flock -xn /tmp/stargate.lock -c '/usr/local/qcloud/stargate/admin/start.sh > /dev/null 2>&1 &' 0 0 * * * /usr/local/qcloud/YunJing/YDCrontab.sh > /dev/null 2>&1 &如果报command not found那就要YUM安装了
yum install -y vixie-cron crontabs接下来我们设置每天半夜3点服务器自动备份
crontab -e添加以下内容
00 03 * * * /bin/sh /root/autoback.sh 保存配置 :wq我们来查看一下任务是否创建成功
crontab -lautoback.sh里我提供了三种备份方式 1、密码方式 这一种一看就懂,但因为mysql5.6以后不允许在脚本里使用密码明文,所以只是作为一种参考,否则的话,就会报错 mysqldump: [Warning] Using a password on the command line interface can be insecure. 2、配置文件方式 后面两种比较简单,我们先说第二种,也就是需要我们在my.cnf配置文件里预先设置用户名和密码,设置方式为添加以下内容:
[mysqldump] user=root password=password然后在备份时指定配置文件
--defaults-extra-file=my.conf这里要特别注册,这个参数必须紧急在mysqldump命令之后,否则会报错,好多人用mysqldump --help也查不到这个参数 3、预先设置连接信息
/var/lib/mysql8-2/bin/mysql_config_editor set --login-path=login --host=localhost --user=root -p输入密码后,会生成/root/.mylogin.cnf文件,这个文件是加密的,无法直接查看,但是我们可以用命令来查看
/var/lib/mysql8-2/bin/mysql_config_editor print --all则会显示本机所有的预设连接信息
[login] user = root password = ***** host = localhost这个连接信息所有的mysql程序都可以使用,只需要加上参数–login-path=login 比如mysql连接
/var/lib/mysql8-2/bin/mysql --login-path=login -S /var/lib/mysql8-2/mysql.sock这样就可以不使用密码也可以登录了,同理,自动备份也是可以的,但一定要记住,–login-path=login要紧跟在命令之后,否则会报错。