前言

前几天无意中在社区看到一个帖子(记一次清空数据仓库的过程),讲的是自己无意中删库的经历。如文中所讲,大多时候删库这件事我们只是耳闻,并没有遇到过,可要是万一呢,到时候恐怕是追悔莫及,而且 mysql 也没有 oracle 的恢复机制,所以备份就成了一个非常有必要的操作。

由于没有相关操作经验,所以从零开始讲如何数据,毕竟我还是比较珍惜我的小博客的。

具体操作

以前也导出过 sql 文件,但是都是直接用 Navicat 导出就完事了,但是这次我想实现的是自动备份,最好写成脚本的方式。

基本思路:使用命令将数据库数据从 docker 容器中导出来,以时间戳命名。最多保持 7 天,过期文件自动删除。

导出 mysql 数据

间接导出

mysql 导出数据的命令还是蛮简单的:mysqldump -u 用户名 -p 数据库名 > 导出的文件名,但这是 linux 里面执行的,我们的放在 docker 里面,所以要先进入容器,然后执行上述命令。然后你就会惊讶的发现,导出的文件在你的容器里面,然后你再从容器里面 copy 到你的主机上。这样做会在容器上产生大量 sql 文件,写定时任务是需要及时清理。

直接导出

上述方法是可行的,但是过于麻烦,有没有一步到位的呢?很显然是有的,命令是这个样子的:docker exec -it [docker容器名称/ID] mysqldump -u[数据库用户名] -p[数据库密码] [数据库名称] > [导出表格路径],比如我的 docker exec -it mysql mysqldump -uroot -p123456 solo > /var/www/solo.sql。没有报错的话,导出的数据库文件就会到你指定的目录下了。

写成脚本方式运行

博主是不会写 Shell 脚本的,所以现学了下,参考 Shell 脚本编程 30 分钟入门

间接导出(间接导出时请先创建相关文件目录)

#!/bin/sh# 进入容器

docker exec -i mysql bash< /mysqlData/$(date +%Y%m%d).sql#删除超过1天的数据find /mysqlData/ -mtime +1 -type f | xargs rm -rfexitEOF

# 将docker中的备份的数据拷贝到宿主机上。

docker cp mysql:/mysqlData/$(date +%Y%m%d).sql /var/www/html/solo/sqlData/

#删除超过7天的数据

find /var/www/html/solo/sqlData -mtime +7 -type f | xargs rm -rf

直接导出(导出时 exec 不需指定参数 -it)

#!/bin/sh# 进入你要保持数据的文件

cd /var/www/html/solo/sqlData

# 导出今日的sql

docker exec mysql mysqldump -uroot -p123123 solo >`date +%Y%m%d%H%M%S`.sql

# 删除7天前的sql(+号后面跟天数,N天前,find后指定目录)

find . -mtime +7 -type f | xargs rm -rf

后记

导出的 sql 文件中会出现一些版本备注信息等,这样的 sql 文件导入时有时会出现问题,会报错,导入之前需要将 sql 文件中的无用信息删除。

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;

/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;

/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;

/*!40101 SET NAMES utf8 */;

/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;

/*!40103 SET TIME_ZONE='+00:00' */;

/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;

/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;

/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;

/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;

这样的内容在 sql 中还不是一两句,到处都是。这里提供一段正则,可快速匹配到 sql 文件中所有 /*!40101XXXXX*/;,通过正则 \/\*\![0-9]+\s[\s\S]+?\s\*\/;\n 实现快速替换。

替换完后的效果如下所示,多舒服。

docker导出mysql_Docker 导出 mysql 数据相关推荐

  1. odbc mysql导出access_将mysql数据导入access数据库

    将mysql数据导入access数据库: mysql数据库表sqltable 字段id,name,sex,email access数据库表accesstable id,name,sex,email $ ...

  2. docker java mysql_Docker 搭建 MySQL 服务

    安装 Docker 请参考我的另一篇文章 建立镜像 拉取镜像 # 拉取最新版本镜像 docker pull mysql # 拉取执行版本镜像 docker pull mysql:版本号 检查拉取是否成 ...

  3. docker 安装mysql_Docker安装MySQL完整版流程

    我们自己在linux上安装mysql的话,超级麻烦,安装完后还要进行各种各样的配置,之前在docker专题写了用docker安装mysql的快速版本以及修改编码的方式,这里总结一下安装流程和命令. 环 ...

  4. docker yml mysql_Docker安装Mysql(docker-compose.yml)

    #########Docker命令查看对应MySQL容器的ContainerID/Image等信息######### C:\Workspace\Docker\MySQL>docker ps CO ...

  5. 阿里docker安装mysql_docker安装mysql

    从阿里云的Docker Hub 上pull一个MySQL的image. docker pull registry.cn-hangzhou.aliyuncs.com/acs-sample/mysql:5 ...

  6. 如何导出、导入mysql数据

    工具: mysql Navicat For MySql 1.  导出一个数据库中所有表的数据 打开 mysql中某个数据库,在右边看到该数据库中的所有表 选中数据库,右键选中"转存Sql文件 ...

  7. docker安装mysql_Docker 安装 MySQL

    本篇将介绍如何使用 Docker 部署 MySQL 数据库及远程访问配置. 安装 MySQL 拉取镜像 使用下面的命令拉取 MySQL 数据库的镜像: $ sudo docker pull mysql ...

  8. MySql数据导入导出及解决ERROR2006(MySQL server has gone away)错误

    mysql数据导入导出方法总结 MySQL数据备份还原方式总结: 一.将数据导入到指定的数据库 第一种导入方式: (linux下和Windows 下语法是一样的,只是路劲的书写方式不同而已) 1.创建 ...

  9. docker导入MySQL文件_Docker容器中Mysql数据的导入/导出详解

    前言 Mysql数据的导入导出我们都知道一个mysqldump命令就能够解决,但如果是运行在docker环境下的mysql呢? 解决办法其实还是用mysqldump命令,但是我们需要进入docker的 ...

最新文章

  1. wand java源码_ImageMagick使用for java(im4java)
  2. java class 使用_Java反射机制(Class类的使用)
  3. Android-实现切换Fragment页功能
  4. Markdown基本语法【转】
  5. 使用 Arthas 排查开源 Excel 组件问题
  6. python double free_python错误:double free或corruption(out):0x0000000001e4b030
  7. java项目引入json配置,TS-28 配置tsconfig.json(3):工程引用
  8. 基于CUDA的VTI介质有限差分正演模拟与逆时偏移及ADCIGs提取
  9. 学习5g通信心得体会_5G,不仅仅是速度,更可能是改变命运的机会
  10. AcWing1083. Windy数(数位DP)题解
  11. matplotlib绘制李萨如图(一) 静态2D李萨如图
  12. 2022年8月22日 暑假第六周总结
  13. MIPI 和 DSI 协议
  14. Anaconda安装虚拟环境
  15. 提取牛客校招日历时间_python
  16. 六派巨量转移技术概述
  17. 禁止迅雷极速版强制升级为最新迅雷版本的方法,最简单,最有效!
  18. html设置背景图片自适应
  19. 停车场管理系统 java_课内资源 - 基于JAVA的停车场管理系统
  20. Java 当前时间转农历

热门文章

  1. 盛大:一个游戏公司的剧烈转型
  2. 7 linux 配置链路聚合_linux – 在智能交换机上设置链路聚合组(L...
  3. OpenCV安装及其开发环境配置(C++)
  4. kali安装教程kali换源往kali拖拽文件
  5. 【Android 组件化】为什么能极大提高工程编译速度?
  6. arcgis10.2安装lisense后无法启动的问题
  7. 【Spring源码系列】Spring注解扫描-@ComponentScan底层原理解读
  8. C语言基础——求一个三位数的个位十位百位
  9. c语言-----之图形打印
  10. SCDL--稀疏编码(sparse code)与字典学习(dictionary learning)