备份目录 /data/backup/mysql 脚本目录 /usr/local/mysql/script 脚本名称 mysql_data_backup.sh 这里是个人脚本路径,大家看着修改 注意: 数据库用户建议创建一个专门备份的用户和密码账号
七牛云邀请链接,需要的下伙伴可以点击邀请链接购买,优惠多多,点击链接
创建七牛云 如果不想上传七牛云就把脚本里面的去掉就好了 登录账户->对象存储->新建空间 获取ak sk下面要用
安装 qshell
进入root 目录
cd 空格
新建文件夹qshell
mkdir qshell
然后下载对应版本 qshell 我们Linux 是 64位的
查看命令如下:
uname -a
显示如下,看到我是64位:
Linux localhost.localdomain 3.10.0-229.el7.x86_64 #1 SMP Fri Mar 6 11:36:42 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
然后我们下载对应版本的 :https://github.com/qiniu/qshell
cd qshell
wget http://devtools.qiniu.com/qshell-linux-x64-v2.4.0.zip?ref=developer.qiniu.com
unzip qshell-linux-x64-v2.4.0.zip
重新命名
mv qshell-linux-x64-v2.4.0 qshell
给权限
chmod +x qshell
然后查看下目录,方便设置环境变量
pwd
/root/qshell
设置环境变量,有三种方式,我们采用对所有系统用户生效,永久生效
vi /etc/profile
在末尾添加如下,注意自己 qshell 的路径
export PATH=$PATH:/root/qshell
执行生效
source /etc/profile
然后执行
qshell
会有很多帮助命令列表,这样就代表添加环境变量成功了
接下来我们开始配置 qshell
首先我们需要添加公钥密钥和账号:
命令如下,请注意更换成自己的密钥
ak 和 sk https://portal.qiniu.com/user/key 查看, name 代表自己的七牛账号
qshell account ak sk name
添加完成后使用
qshell user ls 来查看用户列表
测试脚本
cd /usr/local/mysql/script
./mysql_data_backup.sh
定时任务 crontab -e 凌晨一点备份
01 00 * * * /usr/local/mysql/script/mysql_data_backup.sh >/tmp/log_backup_mysql_$(date +"\%Y\%m\%d\%H\%M\%S").log
下面是脚本
#!/usr/bin/env bash
# Function description:
# Backup MySQL databases for each, backup schema and schema with data in one action.
# Usage:
# bash mysql_bash_backup.sh
# Every friday night execute
# 58 23 * * 5 /usr/local/mysql/script/mysql_data_backup.sh >/tmp/log_backup_mysql_$(date +"\%Y\%m\%d\%H\%M\%S").log
USER="`id -un`"
LOGNAME="$USER"
if [ $UID -ne 0 ]; then
echo "WARNING: Running as a non-root user, \"$LOGNAME\". Functionality may be unavailable. Only root can use some commands or options"
fi
old_PATH=$PATH
declare -x PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"
mysql_host=127.0.0.1
mysql_port=3306
mysql_username=root #数据库用户
mysql_password=root #数据库密码
mysql_basedir=/usr/local/mysql
save_old_backups_for_days=13
mysql_bin_mysql=${mysql_basedir}/bin/mysql
mysql_bin_dump=${mysql_basedir}/bin/mysqldump
mysql_backup_dir=/data/backup/mysql
date_format_type_dir=$(date '+%Y%m%d%H%M%S')
echo "--------------------------------"
echo "=> do backup scheduler start at $(date +%Y%m%d%H%M%S)"
# TODO, check user privileges
# check user if have 'RELOAD,EVENT' privileges,etc
# backup role
# GRANT ALTER,ALTER ROUTINE,CREATE,CREATE ROUTINE,CREATE TEMPORARY TABLES,CREATE VIEW,DELETE,DROP,EXECUTE,INDEX,INSERT,LOCK TABLES,SELECT,UPDATE,SHOW VIEW,RELOAD,EVENT ON *.* TO 'backup_user'@"%";
# FLUSH PRIVILEGES;
[ -d ${mysql_basedir} ] && mysql_datadir=${mysql_basedir}/data || mysql_datadir=/var/lib/mysql
[ -x ${mysql_bin_mysql} ] || mysql_bin_mysql=mysql
[ -x ${mysql_bin_dump} ] || mysql_bin_dump=mysqldump
[ -d ${mysql_backup_dir}/${date_format_type_dir} ] || mkdir -p ${mysql_backup_dir}/${date_format_type_dir}
mysql_databases_list=""
if [ -d ${mysql_datadir} ]; then
mysql_databases_list=`ls -p ${mysql_datadir} | grep / |tr -d /`
else
mysql_databases_list=$(${mysql_bin_mysql} -h${mysql_host} -P${mysql_port} -u${mysql_username} -p${mysql_password} -e "show databases;" )
fi
saved_IFS=$IFS
IFS=' '$'\t'$'\n'
for mysql_database in ${mysql_databases_list};do
if echo ${mysql_database} | grep -Eqvi "^database$|sys|information_schema|performance_schema|^mysql$" ; then
${mysql_bin_dump} -u${mysql_username} -p${mysql_password} --host=${mysql_host} --port=${mysql_port}\
--routines --events --triggers --single-transaction --flush-logs \
--ignore-table=mysql.event --databases ${mysql_database} |& \
gzip > ${mysql_backup_dir}/${date_format_type_dir}/${mysql_database}.sql.gz
[ $? -eq 0 ] && echo "${mysql_database} backup successfully! " || \
echo "${mysql_database} backup failed! "
/bin/sleep 2
${mysql_bin_dump} -u${mysql_username} -p${mysql_password} --host=${mysql_host} --port=${mysql_port}\
--routines --events --triggers --single-transaction --flush-logs \
--ignore-table=mysql.event --databases ${mysql_database} --no-data |& \
gzip > ${mysql_backup_dir}/${date_format_type_dir}/${mysql_database}_schema.sql.gz
[ $? -eq 0 ] && echo "${mysql_database} schema backup successfully! " || \
echo "${mysql_database} schema backup failed! "
/bin/sleep 2
fi
done
IFS=${saved_IFS}
save_days=${save_old_backups_for_days:-10}
need_clean=$(find ${mysql_backup_dir} -mtime +${save_days} -exec ls '{}' \;)
if [ ! -z "${need_clean}" ]; then
find ${mysql_backup_dir} -mtime +${save_days} -exec rm -rf '{}' \;
echo "$need_clean have been cleaned! "
else
echo "nothing can be cleaned, skipped! "
fi
echo "=> do backup scheduler finished at $(date +%Y%m%d%H%M%S)"
echo -e "\n\n\n"
#上传七牛start
echo ${mysql_backup_dir}/${date_format_type_dir} "\n\n\n" ccc "\n\n\n"
if [ -d ${mysql_backup_dir}/${date_format_type_dir} ]; then
bakFile=${mysql_backup_dir}/${date_format_type_dir}
zipFile="${mysql_backup_dir}/mysql_${date_format_type_dir}.zip"
zip -rP "123456" ${zipFile} ${bakFile} #zip 密码压缩
/root/qshell/qshell rput test "mysql_qn_${date_format_type_dir}.zip" ${zipFile} && rm -f ${zipFile} #上传七牛云 test 七牛云账号
fi
#上传七牛over
declare -x PATH=${old_PATH}
好了就到这,有问题欢迎沟通
大海技术博客 http://www.ypyunedu.com/article/95