最近搜索

Linux下如何定时备份mysql

浏览:617
管理员 2019-06-24 03:25

安装所需工具

yum install net-tools #安装网络查看工具

备份mysql

创建存放备份数据的目录

//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

docker容器mysql备份

编写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