备份数据库并上传至阿里云OSS
2019-03-21 本文已影响0人
辛晓坤Vincent
下载OSS工具ossutil
wget http://gosspublic.alicdn.com/ossutil/1.5.0/ossutil64
#下载ossutil
chmod 755 ossutil64
#授权
cp ossutil64 /usr/local/bin/
#复制命令可以到bin目录下直接执行
ossutil64 config
#创建配置文件
该命令创建将一个配置文件,在其中存储配置信息。
在此之前你需要在OSS创建一个相关的bucket,我的bucket名字叫做cnlive-mysql-bak
请输入配置文件路径(默认为:/home/user/.ossutilconfig,回车将使用默认路径。
)
如需设置为其它路径,在使用命令时需要将--config-file选项设置为该路径.
对于下述配置,回车将跳过相关配置项的设置,配置项的具体含义,请使用"help config"命令查看。
请输入endpoint:http://oss-cn-shenzhen.aliyuncs.comendpoint请参考oss访问域名
请输入accessKeyID:yourAccessKeyID
请输入accessKeySecret:yourAccessKeySecret
请输入stsToken:
编写脚本
Mysql 5.5版本
#!/bin/sh
#备份数据库到OSS
cd /data/mysqlbak #前往备份目录
echo "您处于数据库备份目录"
Now=$(date +"%d-%m-%Y") #获取当前日期
DB=databases #数据库名称
File=$DB-$Now.sql #字符串组合生成文件名
mysqldump -uroot -p123456 $DB > $File #备份主命令,此处的db是你要备份的数据库
echo "数据库备份完成"
SevenDays=$(date -d -7day +"%d-%m-%Y") #生成7天前的文件名,用于删除,可自行改为所需时长
if [ -f /data/mysqlbak/$DB-$SevenDays.sql ] #判断7天前的备份是否存在
then
rm -rf /data/mysqlbak/$DB-$SevenDays.sql #存在即删除
echo "您已删除7天前的备份文件"
else
echo "7天前的文件不存在 "
fi
ossutil64 cp /data/mysqlbak/*.sql oss://cnlive-mysql-bak/$DB/
#填写你的oss信息使用ossutil64命令将其cp到OSS上
echo "您数据库备份已上传至阿里云OSS"
MySQL 5.6以上版本
设置免密登录
因为MySQL5.6以上版本如果使用密码需要在执行命令后的提示输入里输入密码,或者在指定的安全文件内指定密码,不能在-p后面直接追加密码
所以这里我们会使用到mysql_config_editor这个工具
mysql_config_editor是MySQL5.6.6以后版本的工具。这个工具可以认证信息加密存储在.mylogin.cnf中,通常这个文件在Linux用户的家目录,当然password信息是加密的,无需担心泄露问题
mysql_config_editor set --login-path=[认证信息名] user=[用户名] --password
#认证信息名是该条认证信息的名称,后续登录时直接使用认证信息名即可登录,无需再次输入密码。
#这里需要注意的是密码里面不能含有特殊字符,建议创建一个新的用户来进行备份操作
mysql --login-path=[认证信息名]
#直接使用认证信息名来登录
image.png
修改mysqldump命令的相关参数
免密登录成功,接下来就是修改脚本中mysqldump命令的相关参数改为免密登录模式
#!/bin/sh
#备份数据库到OSS
cd /data/mysqlbak #前往备份目录
echo "您处于数据库备份目录"
Now=$(date +"%d-%m-%Y") #获取当前日期
DB=databases #数据库名称
File=$DB-$Now.sql #字符串组合生成文件名
mysqldump --login-path=[认证信息名] $DB > $File #备份主命令,此处的db是你要备份的数据库,使用--login-path参数免密登录
echo "数据库备份完成"
SevenDays=$(date -d -7day +"%d-%m-%Y") #生成7天前的文件名,用于删除,可自行改为所需时长
if [ -f /data/mysqlbak/$DB-$SevenDays.sql ] #判断7天前的备份是否存在
then
rm -rf /data/mysqlbak/$DB-$SevenDays.sql #存在即删除
echo "您已删除7天前的备份文件"
else
echo "7天前的文件不存在 "
fi
ossutil64 cp /data/mysqlbak/*.sql oss://cnlive-mysql-bak/$DB/
#填写你的oss信息使用ossutil64命令将其cp到OSS上
echo "您数据库备份已上传至阿里云OSS"
写入定时任务
mkdir /data/mysqlbak
#创建脚本中需要用到的文件夹
crontab -e
0 1 * * * /bin/bash /root/mysqlbackup.sh
有错请指出,不喜勿喷,不接受喷我小白,虽然这是事实,如果要喷请预约