avatar

云梦宏村-BLOG

云梦宏村-Blog 专注分享

  • 首页
  • 分类
  • 标签
  • 归档
  • 关于
Home Linux(centos)定时备份Mysql数据库
文章

Linux(centos)定时备份Mysql数据库

Posted 2024-09-19 Updated 2024-09- 23
By ymhongcun
11~15 min read

一、查看 服务器是否安装了 crontab (定时器服务)

rpm -qa | grep crontab
# 出现如下则是安装了
# crontabs-1.11-17.20190603git.1.al8.noarch

1.未安装执行命令如下

yum -y install vixie-cron
yum -y install crontabs

2.crontab 常用命令

# 查看进程是否正在进行
ps aux | grep crond
# 查看运行状态
systemctl status crond   或者 service crond status
# 启动服务
systemctl start crond  或者 service crond status
# 关闭服务
systemctl stop crond  或者 service crond status
# 重启服务
systemctl restart crond  或者 service crond restart
# 重新载入配置
systemctl reload crond
# 加入开机启动
systemctl enable crond
# 查看定时任务
crontab -l
# 编辑
crontab -e

3.编写 dump_mysql.sh 脚本(tuch或者nano等编辑器编辑)

mysql_user="xxxx"  #MySQL备份用户
mysql_password="xxxxx" #MySQL备份用户的密码
mysql_host="xxxxxxx"  #mysql服务器ip
mysql_port="xxxx"   #mysql服务器端口
mysql_charset="utf8" #MySQL编码0 2 * * * docker exec -i mysql sh /root/mysql8.0.20/mysqlbfplus/run.sh
backup_db_arr=("his") #要备份的数据库名称,多个用空格分开隔开 如("db1" "db2" "db3")
backup_location=/path/to/dis   #/home/hualiang/soft/mysql_data_back/mysql_back  备份数据存放位置,末尾请不要带"/",此项可以保持默认,程序会自动创建文件夹
expire_backup_delete="ON" #是否开启过期备份删除 ON为开启 OFF为关闭
expire_days=30 #过期时间天数 默认为三天,此项只有在expire_backup_delete开启时有效
backup_time=`date +%Y%m%d%H%M`  #定义备份详细时间
backup_Ymd=`date +%Y-%m-%d` #定义备份目录中的年月日时间
#backup_day_ago=`date -d 'expire_days days ago' +%Y-%m-%d` #备份之前的日期
backup_dir=$backup_location/$backup_Ymd  #备份文件夹全路径
welcome_msg="Welcome to use MySQL backup tools!" #欢迎语
mysql_ps=`ps -ef |grep mysql |wc -l` 
mysql_listen=`netstat -an |grep LISTEN |grep $mysql_port|wc -l`
echo $welcome_msg >> $backup_location/dump.log
if [ [$mysql_ps == 0] -o [$mysql_listen == 0] ]; then
        echo "MySQL数据库未运行,备份停止!"
        echo "MySQL数据库未运行,备份停止!" >> $backup_location/dump.log
        exit
else
        echo "MySQL 数据库连接成功! 请稍等......"
        echo "MySQL 数据库连接成功! 请稍等......" >> $backup_location/dump.log
fi
# 判断有没有定义备份的数据库,如果有定义则开始备份,否则退出备份
if [ "$backup_db_arr" != "" ];then
        #dbnames=$(cut -d ',' -f1-5 $backup_database)
        #echo "arr is (${backup_db_arr[@]})"
        for dbname in ${backup_db_arr[@]}
	do
		echo "数据库 $dbname 开始备份..."
                	echo "数据库 $dbname 开始备份..." >> $backup_location/dump.log
                	mkdir -p $backup_dir
                	mysqldump -h $mysql_host -P $mysql_port -u $mysql_user -p$mysql_password $dbname --default-character-set=$mysql_charset | gzip > $backup_dir/$dbname-$backup_time.sql.gz
		echo $?                 	
		echo $? >> $backup_location/dump.log
		flag=`echo $?`
                	if [ $flag == "0" ];then
			echo "数据库 $dbname 备份成功,备份文件到: $backup_dir/$dbname-$backup_time.sql.gz"
                         		echo "数据库 $dbname 备份成功,备份文件到: $backup_dir/$dbname-$backup_time.sql.gz" >> $backup_location/dump.log
                	else
			echo "数据库 $dbname 备份失败!"
                         		echo "数据库 $dbname 备份失败!" >> $backup_location/dump.log
                 	fi
         	done
else
        echo "没有数据库需要备份! 备份停止!"
        echo "没有数据库需要备份! 备份停止!" >> $backup_location/dump.log
        exit
fi
# 如果开启了删除过期备份,则进行删除操作
if [ "$expire_backup_delete" == "ON" -a  "$backup_location" != "" ];then
         #`find $backup_location/ -type d -o -type f -ctime +$expire_days -exec rm -rf {} \;`
         `find $backup_location/ -type d -mtime +$expire_days | xargs rm -rf`
         echo "删除备份超 $expire_days 天数据完成!"
         echo "删除备份超 $expire_days 天数据完成!" >> $backup_location/dump.log
fi

4.配置定时任务

# 常用时间格式
每五分钟执行 */5 * * * *
每小时执行 0 * * * *
每天执行 0 0 * * *
每周执行 0 0 * * 0
每月执行 0 0 1 * *
每年执行 0 0 1 1 *
# crontab 文件的格式
{minute} {hour} {day-of-month} {month} {day-of-week} {full-path-to-shell-script} 
 minute: 区间为 0 – 59 
 hour: 区间为0 – 23 
 day-of-month: 区间为0 – 31 
 month: 区间为1 – 12. 1 是1月. 12是12月. 
 Day-of-week: 区间为0 – 7. 周日可以是0或7.
 
############## 常用时间 
# 执行 crontab -e 命令,写入以下命令保存,每 5 分钟执行一次
*/5 * * * *  sh /data/mysql/dump_mysql.sh   #编写的文件/data/mysql/dump_mysql.sh  
# 每天凌晨 5 点执行
0 5 * * * sh /data/mysql/dump_mysql.sh   #编写的文件/data/mysql/dump_mysql.sh  

############# 如果出现问题可能是定时器任务权限问题

Linux
linux
License:  CC BY 4.0
Share

Further Reading

Nov 4, 2024

Linux下使用Docker下安装redis以及永久设置密码

root用户请去除命令前方的sudo 一、下载redis官方镜像 # 下载官方redis镜像 默认为最新版本 sudo docker pull redis # 安装对应版本 替换对应版本号<version> 通过搜索命令 docker search redis 查看对应版本号

Sep 23, 2024

Docker安装Mysql9全流程教程

一、安装确保docker版本在24.0.5版本及以上 或者 docker-compose版本1.29.2及以上,如未安装或者版本不匹配请更新或者安装后在进行下面操作 1.新建my.cnf文件,或者根据mysql复制对应文件内容到my.cnf中,如需其他配置,完成后自行更改配置文件 [mysqld]

Sep 19, 2024

Linux(centos)定时备份Mysql数据库

一、查看 服务器是否安装了 crontab (定时器服务) rpm -qa | grep crontab # 出现如下则是安装了 # crontabs-1.11-17.20190603git.1.al8.noarch 1.未安

OLDER

Debian系统上安装稳定版本Docker

NEWER

Docker安装Mysql9全流程教程

Recently Updated

  • Linux下使用Docker下安装redis以及永久设置密码
  • Docker安装Mysql9全流程教程
  • Linux(centos)定时备份Mysql数据库
  • Debian系统上安装稳定版本Docker
  • Linux下使用docker安装nginx以及基础配置

Trending Tags

linux css3 mysql docker

Contents

©2025 云梦宏村-BLOG. Some rights reserved.