【Mysql】Docker下Mysql8数据备份与恢复

[TOC]

【Mysql】Docker下Mysql8数据备份与恢复

1 创建Mysql容器

  • 格式

    docker run -d
    --name=容器名称 
    -p 宿主端口号:3306 
    -e MYSQL_ROOT_PASSWORD=mysql密码 
    -e MYSQL_PASSWORD=mysql密码
    -e TZ=Asia/Shanghai
    -v 宿主目录-数据:/var/lib/mysql 
    -v 宿主目录-备份数据:/backup 
    --restart always 
    mysql:版本号
  • 示例

    docker run -d --name=mysql-8 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_PASSWORD=123456 -e TZ=Asia/Shanghai -v /workspace/mysql-8:/var/lib/mysql -v /workspace/mysql-8-backup:/backup --restart always mysql:8.0

2 连接Mysql

  • Navicat

    image-20240714000254341

    • 创建SQL

      -- 删除数据库
      DROP DATABASE IF EXISTS `test`;
      -- 创建数据库
      CREATE DATABASE IF NOT EXISTS `test`;
      -- 进入数据库
      use `test`;
      -- 创建表
      DROP TABLE IF EXISTS `student`;
      CREATE TABLE `student` (`id` bigint NOT NULL AUTO_INCREMENT,`name` varchar(255) DEFAULT NULL,`age` int DEFAULT NULL,PRIMARY KEY (`id`)
      ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
      -- 插入数据
      INSERT INTO `student` (`id`, `name`,`age`) VALUES (1, '小红', '20');
      INSERT INTO `student` (`id`, `name`,`age`) VALUES (2, '小明', '21');

3 Binlog检查

3.1 检查是否开启

SHOW VARIABLES like 'log_bin';
  • ON : 开启

  • OFF : 关闭

3.2 mysql 5.7

  • 找到 my.cnf

    find / -name my.cnf 
    • docker 位置: /etc/my.cnf
  • 开启

    [mysqld]
    log_bin = mysql-bin
    server_id = 1   # 设置MySQL实例的唯一ID,如果有多个MySQL实例,每个实例的ID必须不同

3.3 mysql8

  • 默认开启

4 备份数据库

4.1 容器里执行备份

  • 进入容器

    docker exec -ti mysql-8 /bin/bash
  • 在容器内创建备份目录

    前面创建容器时已创建,没有则执行下面

    mkdir /backup
  • 全量备份SQL

    mysqldump --single-transaction --flush-logs --source-data=2 --routines --opt -uroot -p123456 test > /backup/test_20240713.sql

4.2 宿主机执行备份

  • 格式

    docker exec 容器名 bash -c '命令1 && 命令2'
  • 示例

    docker exec mysql-8 bash -c 'mysqldump --single-transaction --flush-logs --source-data=2 --routines --opt -uroot -p123456 test > /backup/test_20240713.sql'

4.3 参数说明

  • mysqldump: 这是 mysqldump 命令的执行路径或者别名,用于备份 MySQL 数据库。
  • --single-transaction: 在导出数据时使用单个事务,这样可以确保导出的数据是一个一致性状态的快照,避免了在备份过程中数据变化引起的问题。
  • --flush-logs: 在备份完成后刷新日志文件,这样可以确保备份包含了最新的日志记录。
  • --source-data=2: 指定数据来源的格式,这里是指定为默认格式 2,表示在备份过程中,将主服务器的二进制日志位置信息也备份到文件中。这个参数比较重要,用于在恢复数据时找到位置信息。
    • Mysql 8 : --source-data=2
    • Mysql 5.7 : --master-data=2
  • --routines: 备份存储过程和函数。
  • --opt: 表示使用优化过的备份方式,以提高备份速度和减少备份文件的大小。
  • -uroot: 使用 root 用户连接到 MySQL 数据库。
  • -p: 提示输入密码。
  • test: 要备份的数据库名称,这里假设要备份的数据库名为 test。
  • > backup.sql: 将导出的 SQL 数据写入到 backup.sql 文件中。

5 定时备份

使用crontab定时任务来实现定时备份功能

  • 新建个shell脚本mysql-backup.sh

    #!/bin/bash
    docker exec mysql-8 sh -c 'mysqldump --single-transaction --flush-logs --source-data=2 --routines --opt -uroot -pn2wqeGrlv7 test > /backup/test_$(date +%Y%m%d_%H%M%S).sql'
  • 进入crontab

    crontab -e
  • 添加到定时任务

    • 每1分钟生效

      # mysql备份-每1分钟
      */1 * * * * /workspace/cron-jobs/mysql-backup.sh >> /workspace/cron-jobs/mysql-backup.log 2>&1
    • 每天凌晨3点生效

      mysql备份-每天凌晨3点
      0 3 * * * /workspace/cron-jobs/mysql-backup.sh >> /workspace/cron-jobs/mysql-backup.log 2>&1
  • 保存即时生效

    # 按 shift + :
    # 输入 wq 

6 恢复数据

  • 容器内

    格式:mysql -uroot -p密码 数据库 < 备份数据库SQL文件路径

    mysql -uroot -p123456 test < /backup/test_20240714_123905.sql
  • 宿主机

    格式:docker exec -i 容器名 mysql -uroot -p密码 数据库 < 备份数据库SQL文件路径

    docker exec -i mysql-8 mysql -uroot -p123456 test < /workspace/mysql-8-backup/test_20240714_123905.sql

7 注意事项

7.1 定时备份,出现the input device is not a TTY

  • 原因

​ "the input device is not a TTY" 错误通常出现在尝试从非交互式的上下文(比如 cron 任务)中运行需要交互的命令时。在你的情况下,可能是你的 Shell 脚本 mysql-backup.sh 中包含了需要交互的部分,但是在 cron 任务中无法提供所需的交互。

  • 解决方案:

    将脚本中 docker exec -it 中去掉 -it 即可,表示在容器外部执行命令,而不需要进入容器内开启交互终端。

7.2 提示:mysqldump: [Warning] Using a password on the command line interface can be insecure.

  • 原因

    命令行不能出现密码 -p123456

    • 临时解决方案

      设置环境密码,然后命令行不在输入密码

      • 设置环境密码

        export MYSQL_PWD='123456'
      • 去掉密码命令行 -p密码

        docker exec mysql-8 bash -c 'mysqldump --single-transaction --flush-logs --source-data=2 --routines --opt -uroot test > /backup/test_20240713.sql'

export MYSQL_PWD='123456' 是临时性的设置,适合用于测试、临时任务或者当前会话中的需要。如果你需要更持久的设置,考虑 使用 Dockerfile、Docker Compose 文件或者其他更长久的配置方式来设置环境变量

  • 长期解决方案

    1. 创建容器时候加入-e MYSQL_PASSWORD=密码

      docker run --name=mysql-8 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_PASSWORD=123456 --restart always -v /workspace/mysql-8:/var/lib/mysql -v /workspace/mysql-8-backup:/backup -d mysql:8.0
    2. 去掉密码命令行 -p密码

      docker exec mysql-8 bash -c 'mysqldump --single-transaction --flush-logs --source-data=2 --routines --opt -uroot test > /backup/test_20240713.sql'

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/48521.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

多态性概念 OOPS

大家好&#xff01;今天&#xff0c;我们将探讨面向对象编程 (OOP) 中的一个基本概念 - 多态性。具体来说&#xff0c;我们将重点介绍其三种主要形式&#xff1a;方法重载、方法覆盖和方法隐藏。对于任何使用 OOP 语言&#xff08;例如 C#&#xff09;的程序员来说&#xff0c;…

NET 语言识别,语音控制操作、语音播报

System.Speech. 》》System.Speech.Synthesis; 语音播报 》》System.Speech.Recognition 语音识别 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Speech.Recog…

mac二进制安装operator-sdk

0. 前置条件 1. 安装go 安装步骤略。 1. 下载operator-sdk源码包 https://github.com/operator-framework/operator-sdk 1.1 选择适合当前go版本的operator版本&#xff0c;在operator-sdk/go.mod文件中可以查看Operator-sdk使用的go版本。 2. 编译 源码包下载后&#x…

C语言航空售票系统

以下是系统部分页面 以下是部分源码&#xff0c;需要源码的私信 #include<stdio.h> #include<stdlib.h> #include<string.h> #define max_user 100 typedef struct ft {char name[50];//名字char start_place[50];//出发地char end_place[50];//目的地char …

JAVA 异步编程(线程安全)二

1、线程安全 线程安全是指你的代码所在的进程中有多个线程同时运行&#xff0c;而这些线程可能会同时运行这段代码&#xff0c;如果每次运行的代码结果和单线程运行的结果是一样的&#xff0c;且其他变量的值和预期的也是一样的&#xff0c;那么就是线程安全的。 一个类或者程序…

多线程初阶(二)- 线程安全问题

目录 1.观察count 原因总结 2.解决方案-synchronized关键字 &#xff08;1&#xff09;synchronized的特性 &#xff08;2&#xff09;如何正确使用 语法格式 3.死锁 &#xff08;1&#xff09;造成死锁的情况 &#xff08;2&#xff09;死锁的四个必要条件 4.Java标准…

若依二次开发

口味改造 原&#xff1a; 改造&#xff1a; 1./** 定义口味名称和口味列表的静态数据 */ 2.改变页面样式 3.定义储存当前选中的口味列表数组&#xff0c;定义改变口味名称时更新当前的口味列表 4.改变页面样式 6.格式转换 7.定义口味列表获取焦点时更新当前选中的口味列表

【DGL系列】简单理解graph.update_all和spmm的区别

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你&#xff0c;欢迎[点赞、收藏、关注]哦~ 目录 背景介绍 源码分析 小结一下 背景介绍 我们在看GNN相关的论文时候&#xff0c;都会说到邻接矩阵与特征矩阵之间是用到了spmm&#xff0c;在很久…

深入理解Linux网络(二):UDP接收内核探究

深入理解Linux网络&#xff08;二&#xff09;&#xff1a;UDP接收内核探究 一、UDP 协议处理二、recvfrom 系统调⽤实现 一、UDP 协议处理 udp 协议的处理函数是 udp_rcv。 //file: net/ipv4/udp.c int udp_rcv(struct sk_buff *skb) {return __udp4_lib_rcv(skb, &udp_…

【web】-反序列化-to_string

<?php highlight_file(__FILE__); class A{public $s;public function __destruct(){echo "hello".$this->s;}} class B{public $cmd;public function __toString(){system($this->cmd);return 1;} } unserialize($_GET[code]); __toString()当对象被当着…

《梦醒蝶飞:释放Excel函数与公式的力量》17.1使用命名范围和工作表函数

第17章&#xff1a;使用命名范围和工作表函数 17.1 命名范围的优势 在Excel中&#xff0c;使用命名范围是一个强大且灵活的功能&#xff0c;它可以极大地提高工作效率和公式的可读性。命名范围不仅使公式更容易理解&#xff0c;还减少了错误的可能性。以下将详细介绍命名范围的…

自然语言大模型介绍

1 简介 最近一直被大语言模型刷屏。本文是周末技术分享会的提纲&#xff0c;总结了一些自然语言模型相关的重要技术&#xff0c;以及各个主流公司的研究方向和进展&#xff0c;和大家共同学习。 2 Transformer 目前的大模型基本都是Transformer及其变种。本部分将介绍Transf…

24暑假算法刷题 | Day18 | LeetCode 530. 二叉搜索树的最小绝对差,501. 二叉搜索树中的众数,236. 二叉树的最近公共祖先

目录 530. 二叉搜索树的最小绝对差题目描述题解 501. 二叉搜索树中的众数题目描述题解 236. 二叉树的最近公共祖先题目描述题解 530. 二叉搜索树的最小绝对差 点此跳转题目链接 题目描述 给你一个二叉搜索树的根节点 root &#xff0c;返回 树中任意两不同节点值之间的最小差…

Python 更换 pip 源详细指南

目录 前言pip 国内源临时换源方法一&#xff1a;添加参数方法二&#xff1a;设置环境变量 永久换源方法三&#xff1a;修改配置方法四&#xff1a;pip 命令修改 总结 前言 在我们使用 Python 3 时&#xff0c;pip 是一个不可或缺的工具&#xff0c;它用于安装和管理第三方库。…

在虚拟机 CentOS7 环境下安装 MySQL5.7 数据库

配置目标 在虚拟机的 Linux CentOS7 环境下安装 MySQL5.7 版数据库&#xff0c;并能从宿主机 Windows 系统连接该数据库&#xff08;默认端口&#xff1a;3306&#xff09;。 1. 准备工作 WMware 虚拟机&#xff1a;VMware Workstation 16 ProCentOS7 镜像&#xff1a;CentO…

基于密钥的身份验证(Linux-Linux)

A主机&#xff1a; 1、生成密钥对 [rootservera ~]# ssh-keygen查看公钥 注&#xff1a;id_rsa为私钥&#xff08;证书&#xff09;&#xff0c;id_rsa.pub为公钥 2、注册公钥到服务器 [rootservera ~]# ssh-copy-id root172.25.250.106 查看.ssh 3、使用密钥连接服务器 #…

【yolov8】3、yolov8 环境安装 【GPU版】

pycharm下载安装 yolov8 环境安装 【GPU版】 1、要求1.1 什么是 CUDA 和 CUDNN1.2 查看cuda版本的3种方法&#xff08;版本在10.2以上的可以忽略本章节&#xff09;&#xff1a;1.3 没有找到NIVDIA图标&#xff0c;确认是否有英伟达显卡 2、pycharm下载安装进入官网 3、yolov8…

【Android】视图与常用控件总结

文章目录 一、视图基础1.1 设置视图的宽高1.2 设置视图的间距1.3 设置视图的对齐方式1.4 总结 二、控件2.1 TextView2.1.1 设置宽高2.1.2 设置内容2.1.3 设置大小2.1.4 设置颜色 2.2 Button2.3 EditText2.4 ImageView2.5 ProgressBar2.6 AlertDialog2.7 ProgressDialog 本文主要…

JAVASE进阶day14(网络编程续TCP,日志)

TCP 三次握手 四次挥手 package com.lu.day14.tcp;import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.Socket;public class Client {public static void main(String[] args) {try(Socket socket new Socket("192.…

哈默纳科HarmonicDrive减速机组装注意事项

在机械行业中&#xff0c;精密传动设备HarmonicDrive减速机对于维持机械运作的稳定性和高效性起着至关重要的作用。然而在减速机的组装过程中&#xff0c;任何一个细微的错误都可能导致其运转时出现振动、异响等不良现象&#xff0c;严重时甚至可能影响整机的性能。因此&#x…