docker上定期备份mysql数据库

  • docker备份数据指令
  • 脚本
    • python脚本
    • shell脚本

docker备份数据指令

container_name:容器名称,此处也可填容器ID。
db_user:数据库账号。
db_password:数据库密码。
database:要备份的数据库。
file_path:备份出来的文件名。

docker exec -it {container_name} mysqldump -u{db_user} -p{db_password} {database} > {file_path}

脚本

python脚本

1.能指定要备份的数据库
2.将备份出来的SQL文件打包成压缩文件,并以一定的规范来命名,比如:mysqlname_2021-01-20-20.zip,mysqlname是前缀,2021-01-20-20代表是2021年01月20日20点的时候备份的
3.定期删除5个小时或10个小时之前的备份文件

#!/usr/bin/env python
# encoding: utf-8
import datetime
import os
import shutil
import subprocess
import time
import zipfile# 数据库用户名
db_user = "root"
# 数据库密码
db_password = "123456"
# 备份目录
backup_dir = "/var/test_backup"
# backup_prefix和backup_suffix分别为备份文件的前缀和后缀,如test_backup_2019-09-19-11则代表该文件是在2019年9月19日的11点时备份的
backup_prefix = "test_backup"
backup_suffix = "%Y-%m-%d-%H"
# 备份数据库列表
backup_databases = ["test1","test2",
]
# 容器名
container_name = "mysql-test"
# 过期小时,定期删除5个小时前的备份文件
expire_hour = 5# 获取备份文件名
def get_backup_filename():t = time.strftime(backup_suffix, time.localtime())return "%s_%s" % (backup_prefix, t)def get_backup_path():return "%s%s%s" % (backup_dir, os.sep, get_backup_filename())# 获取过期时间戳
def get_expire_time():t = datetime.datetime.now() - datetime.timedelta(hours=expire_hour)return int(time.mktime(t.timetuple()))def create_dir(dir_path):# 如果目录存在则退出if os.path.exists(dir_path):returnos.mkdir(dir_path)cmd_template = "docker exec -it {container_name} mysqldump -u{db_user} -p{db_password} {database} > {file_path}"# 备份指定数据库
def backup_database(backup_path, database):file_path = os.sep.join([backup_path, "%s.sql" % database])d = {"container_name": container_name,"db_user": db_user,"db_password": db_password,"database": database,"file_path": file_path,}cmd = cmd_template.format(**d)subprocess.call(cmd, shell=True)def zip_dir(dir_path):file_path = '.'.join([dir_path, "zip"])if os.path.exists(file_path):os.remove(file_path)z = zipfile.ZipFile(file_path, 'w', zipfile.ZIP_DEFLATED)for root, directories, files in os.walk(dir_path):fpath = root.replace(dir_path, '')fpath = fpath and fpath + os.sep or ''for filename in files:z.write(os.path.join(root, filename), fpath + filename)z.close()# 备份数据库
def backup():backup_path = get_backup_path()try:create_dir(backup_path)for database in backup_databases:backup_database(backup_path, database)zip_dir(backup_path)finally:shutil.rmtree(backup_path)# 清理过期备份文件
def clean():expire_time = get_expire_time()for root, directories, files in os.walk(backup_dir):for file in files:if not file.startswith(backup_prefix):continueif not file.endswith(".zip"):continuefile_path = os.sep.join([root, file])t = os.path.getctime(file_path)if t < expire_time:os.remove(file_path)if __name__ == "__main__":try:backup()finally:clean()

shell脚本

#!/bin/bash
# 设置mysql的登录用户名和密码(根据实际情况填写)
mysql_user="root"
mysql_password="root"
mysql_host="localhost"
mysql_port="3306"
mysql_charset="utf8mb4"# 备份文件存放地址(根据实际情况填写)
backup_location=/usr/local# 是否删除过期数据
expire_backup_delete="ON"
expire_days=7
backup_time=`date +%Y%m%d%H%M`
backup_dir=$backup_location
welcome_msg="Welcome to use MySQL backup tools!"
# 备份指定数据库中数据(此处假设数据库是mysql_backup_test)docker exec -it mysql mysqldump -h$mysql_host -P$mysql_port -u$mysql_user -p$mysql_password -B test1 > $backup_dir/mysql_backup_test-$backup_time.sql# 删除过期数据
if [ "$expire_backup_delete" == "ON" -a  "$backup_location" != "" ];then`find $backup_location/ -type f -mtime +$expire_days | xargs rm -rf`echo "Expired backup data delete complete!"
fi

docker上定期备份mysql数据库相关推荐

  1. Winform中使用mysqldump实现选择部分表定期备份mysql数据库

    场景 Winform中实现与Mysql8建立连接并获取所有的表,然后勾选指定的表,定时进行数据库备份导出为sql文件.并且可以设定覆盖备份的次数,比如设置为7,则备份到第8次时就会将第一次备份的sql ...

  2. nodejs mysql备份_node.js实现备份mysql数据库功能

    node.js实现备份mysql数据库功能 发布时间:2019-10-09编辑:星王 原创 阅读(1697) 在node.js上实现备份mysql数据库到指定文件夹内,并且能够同步执行操作,首要是对m ...

  3. Linux服务器备份mySQL数据库_远程linux服务器mysql数据库定期备份和删除

    网上已经有部分关于Linux下定期备份mysql的方法,但是很多步骤不够详细,不适合新手,自己琢磨了很久,终于搞定了. 1.Linux服务器一般是ssh协议,如果本地也是Linux环境,可以直接通过s ...

  4. 三种方法备份 MySQL 数据库(含docker)

    文章目录 一.备份MySQL 二.还原 MySQL 三.3 种实现备份的方法 1.shell 脚本 ①.描述 ②.脚本 ③.执行 shell 脚本 ④.docker 容器 ⑤.开启定时任务 ⑥.重点: ...

  5. mysql定期执行备份语句_【mysql】备份篇1:使用系统计划任务+mysqldump 定时备份mysql数据库 不用输入密码自动导出sql文件...

    项目部署在服务期上之后,有了新的需求,需要每月定时备份mysql数据库的所有数据! 查找了网上的多篇文章之后,自己又对bat文件中的mysqldump语句进行改进,可以实现了不用输入密码就能自动定时备 ...

  6. mysql数据库备份到oss_备份MySQL数据库并上传到阿里云OSS存储

    1. 环境配置 要将本地文件上传到阿里云oss中, 必须使用阿里云提供的工具 ossutil, 有32位,也有64位的, Linux和Windows都有.具体可以到阿里云官网下载 本文以Linux系统 ...

  7. Linux服务器上备份mysql数据库(详细教程)

    废话不多说,直接上教程 首先使用  mysql -V  查看服务器是否安装了mysql,没有一定要安装,因为脚本编写中需要mysql命令进行备份. 安装详细教程请移步看:Linux服务器装mysql数 ...

  8. linux定时备份数据库到远程ftp,Linux下自动备份MySQL数据库并上传到远程FTP服务器...

    Linux下自动备份MySQL数据库并上传到远程FTP服务器且删除指定日期前的备份Shell脚本 说明: 1.备份MySQL数据库存放目录/var/lib/mysql下面的xshelldata数据库到 ...

  9. mysql数据库ftp备份_Linux下自动备份MySQL数据库并上传到远程FTP服务器且删除指定日期前的备份Shell脚本...

    说明: 1.备份MySQL数据库存放目录/var/lib/mysql下面的vos3000db数据库到/home/mysql_data里面,并且保存为vos3000db_bak_2012_06_30.t ...

最新文章

  1. 太扎心!人艰不拆!16 个程序员专属笑话讲给你听
  2. SystemCenter2012SP1实践(13)虚拟存储的配置
  3. android开发我的新浪微博客户端-用户授权页面UI篇(3.1)
  4. .NET深入学习笔记(3):垃圾回收与内存管理
  5. Linux查看所有用户和组信息
  6. Java面向对象part2
  7. Python基础教程:set集合的教程
  8. Adaboost(自适应提升树)算法原理
  9. MySQL使用SHOW PROFILE进行SQL分析
  10. Script:Collect vip resource Diagnostic Information
  11. 数据结构学习笔记:实现链表
  12. android布局黑色字体颜色,Android开发之FloatingActionButton悬浮按钮基本使用、字体、颜色用法示例...
  13. 使用spring+quartz配置多个定时任务
  14. 『运筹OR帷幄』——60w运筹学|优化理论|人工智能|数据科学的技术原创和交流社区...
  15. “舌战群儒”的技术分析
  16. 1每天Python小例-12306爬虫#WinError 2
  17. 中国个人企业征信体系介绍
  18. [HITICS]大作业——程序人生Hello‘s P2P
  19. 怎么把JAVA32位改成64位_win732位改成64位教程
  20. VMWare 下完美安装 Mac OS X

热门文章

  1. input 提交表单按钮 背景图片的完美设置 (隐藏字体)
  2. SLAM常用数据集(2)
  3. C/C++——new一个二维数组
  4. SpringBoot—自定义线程池及并发定时任务模板
  5. windows系统如何进入环境变量
  6. 安装fastdfs-master
  7. celery-02-安装与使用说明-for-redis
  8. 把a文件删除b文件中的相同的行
  9. Echarts数据可视化grid直角坐标系(xAxis、yAxis)
  10. JS编程建议——32:使用制表