yum install net-tools #安装网络查看工具
创建存放备份数据的目录
//data目录存放数据,log存放备份时打印的日志
mkdir -p /usr/local/mysql/backup/{data,log}
写一个shell脚本,放在/usr/local/mysql/backup
取名为 mysqlbak.sh
注意,mysql版本 >=5.6 的,需要在my.cnf文件中指定 mysqldump 的用户和密码,则在mysqldump 中可以把-u${dbuser} 和-p${dbpasswd}去掉
mysql版本 >=5.6 的my.cnf文件中加入:
[mysqldump]
#用户名
user=***
#密码
password=***
以下mysql版本为5.5
,需要把dbuer和dbpasswd更改为你创建的mysql用户名和密码
#!/bin/bash
#注意,以下 PATH 路径中需要把mysql的路径更改到你mysql安装的路径下
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/data/MySQL/mysql/bin
export PATH
#数据库用户名
dbuser='***'
#数据库密码
dbpasswd='***'
#数据库名
dbname='dbname'
#数据库端口
mysql_port='3306'
#备份时间
backtime=`date +%Y%m%d%H%M%S`
#日志备份路径
logpath='/usr/local/mysql/backup/log'
#数据备份路径
datapath='/usr/local/mysql/backup/data'
# 判断MYSQL是否启动,mysql没有启动则备份退出
mysql_ps=`ps -ef |grep mysql |wc -l`
mysql_listen=`netstat -an |grep LISTEN |grep $mysql_port|wc -l`
if [ [$mysql_ps == 0] -o [$mysql_listen == 0] ]; then
echo "ERROR:MySQL is not running! backup stop!" >> ${logpath}/mysqllog.log
exit
fi
#日志记录头部
echo "备份时间为${backtime},备份数据库表 ${dbname} 开始..." >> ${logpath}/mysqllog.log
#正式备份数据库
source=`mysqldump -u${dbuser} -p${dbpasswd} -h 127.0.0.1 ${dbname}> ${datapath}/${backtime}.sql` 2>> ${logpath}/mysqllog.log;
#备份成功以下操作
if [ "$?" == 0 ];then
cd $datapath
#为节约硬盘空间,将数据库压缩
tar zcf ${dbname}${backtime}.tar.gz ${backtime}.sql > /dev/null
#删除原始文件,只留压缩后文件
rm -f ${datapath}/${backtime}.sql
#删除七天前备份,也就是只保存7天内的备份
find $datapath -name "*.tar.gz" -type f -mtime +7 -exec rm -rf {} \; > /dev/null 2>&1
echo "数据库表 ${dbname} 备份成功!!" >> ${logpath}/mysqllog.log
else
#备份失败则进行以下操作
echo "数据库表 ${dbname} 备份失败!!" >> ${logpath}/mysqllog.log
fi
编写mysqlback.sh文件
和上面的基本相同,改变的只是mysqlback.sh文件内容
需更改的地方:dbname、mysql_user、mysql_password、docker_name
#!/bin/bash
#数据库名
dbname='dbname'
#数据库用户
mysql_user='***'
#数据库密码
mysql_password='***'
#数据库端口
mysql_port='3306'
#备份时间
backtime=`date +%Y%m%d%H%M%S`
#日志备份路径
logpath='/usr/local/mysql/backup/log'
#数据备份路径
datapath='/usr/local/mysql/backup/data'
#需要备份的mysql容器名字
docker_name='mysql_container'
# 判断MYSQL是否启动,mysql没有启动则备份退出
mysql_ps=`ps -ef |grep mysql |wc -l`
mysql_listen=`netstat -an |grep LISTEN |grep $mysql_port|wc -l`
if [ [$mysql_ps == 0] -o [$mysql_listen == 0] ]; then
echo "ERROR:MySQL is not running! backup stop!" >> ${logpath}/mysqllog.log
exit
fi
#日志记录头部
echo "备份时间为${backtime},备份数据库表 ${dbname} 开始..." >> ${logpath}/mysqllog.log
#备份数据库
source=`docker exec ${docker_name} mysqldump -u${mysql_user} -p${mysql_password} ${dbname}> ${datapath}/${backtime}.sql` 2>> ${logpath}/mysqllog.log;
#备份成功以下操作
if [ "$?" == 0 ];then
cd $datapath
#为节约硬盘空间,将数据库压缩
tar zcf ${dbname}${backtime}.tar.gz ${backtime}.sql > /dev/null
#删除原始文件,只留压缩后文件
rm -f ${datapath}/${backtime}.sql
#删除七天前备份,也就是只保存7天内的备份
find $datapath -name "*.tar.gz" -type f -mtime +7 -exec rm -rf {} \; > /dev/null 2>&1
echo "数据库表 ${dbname} 备份成功!!" >> ${logpath}/mysqllog.log
else
#备份失败则进行以下操作
echo "数据库表 ${dbname} 备份失败!!" >> ${logpath}/mysqllog.log
fi
vi /etc/crontab
配置每天凌晨3点自动备份,文件内容为:
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
0 3 * * * root /bin/sh /usr/local/mysql/backup/mysqlbak.sh
crontab /etc/crontab #启动cron执行任务
↑每天凌晨3点定时备份效果图↑
crontab -l #查看执行的任务
crontab -r #删除任务
tail -f /var/log/cron #查看执行日志
systemctl enable crond #设为开机启动
systemctl start crond #启动crond服务
systemctl status crond #查看状态
▼看到这里了,就关注一下呗▼
站长微信:xiaomao0055
站长QQ:14496453