前言
宿主机Linux属于内网环境,且mysql使用的是docker容器安装,所以宿主机不具备mysqldump命令的使用条件,而容器环境内使用crontab命令定时备份又比较麻烦,所以决定在宿主机安装mysql客户端。
准备安装包
mysql客户端下载:mysql官网下载地址
在这里我们需要下载三个文件:
- mysql-community-client-5.7.10-1.el7.x86_64.rpm
- mysql-community-common-5.7.10-1.el7.x86_64.rpm
- mysql-community-libs-5.7.10-1.el7.x86_64.rpm
安装客户端
将文件拷贝至服务器,执行命令
rpm -ivh mysql-community-client-5.7.10-1.el7.x86_64.rpm mysql-community-common-5.7.10-1.el7.x86_64.rpm mysql-community-libs-5.7.10-1.el7.x86_64.rpm
如果出现上述依赖冲突,或者已经安装过mysql,需要卸载;
查看mariadb-libs版本
rpm -qa | grep mariadb-libs
卸载
sudo yum remove mariadb-libs
如果是内网环境,卸载可能会中断,可以使用下面的命令强制卸载
rpm -e --nodeps mariadb-libs-5.5.68-1.el7.x86_64
此时再次执行安装命令即可
输入mysqldump验证安装成功
定时备份
创建.sh脚本
#!/bin/bash
#全备方式,一般在从机上执行,适用于小中型mysql数据库
#删除7天以前备份
source /etc/profile #加载系统环境变量
source ~/.bash_profile #加载用户环境变量
set -o nounset #引用未初始化变量时退出
#set -o errexit #执行shell命令遇到错误时退出
user="root"
password="123456"
host="192.168.136.142"
port="3306"
#需备份的数据库,数组
db=("test1" "test2")
#备份时加锁方式,
#MyISAM为锁表--lock-all-tables,
#InnoDB为锁行--single-transaction
lock="--single-transaction"
backup_path="/data/backup/MysqlData"
date=$(date +%Y-%m-%d_%H-%M-%S)
day=7
backup_log="/data/backup/back.log"
#建立备份目录
if [ ! -e $backup_path ];then
mkdir -p $backup_path
fi
#删除以前备份
find $backup_path -type f -mtime +$day -exec rm -rf {} \; > /dev/null 2>&1
echo "开始备份数据库:${db[*]}"
#备份并压缩
backup_sql(){
dbname=$1
backup_name="${dbname}_${date}.sql"
#-R备份存储过程,函数,触发器
mysqldump -h $host -P $port -u $user -p$password $lock --set-gtid-purged=OFF --default-character-set=utf8 --flush-logs -R $dbname > $backup_path/$backup_name
if [[ $? == 0 ]];then
cd $backup_path
tar zcpvf $backup_name.tar.gz $backup_name
size=$(du $backup_name.tar.gz -sh | awk '{print $1}')
rm -rf $backup_name
echo "$date 备份 $dbname($size) 成功 "
else
cd $backup_path
rm -rf $backup_name
echo "$date 备份 $dbname 失败 "
fi
}
#循环备份
length=${#db[@]}
for (( i = 0; i < $length; i++ )); do
backup_sql ${db[$i]} >> $backup_log 2>&1
done
echo "备份结束,结果查看 $backup_log"
du $backup_path/*$date* -sh | awk '{print "文件:" $2 ",大小:" $1}'
添加定时任务
crontab -e
示例:15 1 * * * /data/app/backup.sh (每天凌晨1点15分执行)
重启定时器
service crond restart