第84讲:基于各种场景使用mysqldump逻辑备份数据库

news2024/9/20 22:40:16

文章目录

    • 1.mysqldump备份工具的语法格式
    • 2.使用mysqldump进行全库备份
    • 3.备份单个库或者多个库的数据
    • 4.备份某个库下的单表或者多表的数据
    • 5.mysqldump备份数据库时必加的一些参数
      • 5.1.基本参数
      • 5.2.核心参数
    • 6.mysqldump备份数据库时的一些其他参数

1.mysqldump备份工具的语法格式

mysqldump的使用语法:

  • 备份指定数据库

    • mysqldump 选项 数据库
  • 备份指定数据库下的某张表

    • mysqldump 选项 数据库 表
  • 备份多个数据库

    • mysqldump 选项 --database/-B 数据库1 数据库2
  • 备份所有数据库

    • mysqldump 选项 --all-databases/ -A

mysqldump连接数据库的选项:

  • -u,--user:指定登陆数据库的用户名。
  • -p,--password:指定登录数据库的密码
  • -h,--host:指定要登陆的MySQL服务器地址。
  • -P,--port:指定MySQL数据库的端口号。
  • -S:指定当前数据库实例的sock文件。

mysqldump输出选项:

  • --add-drop-database:在每个数据库创建语句前加上 drop database 语句。

  • --add-drop-table:在每个表创建语句前加上 drop table 语句 , 默认开启 ; 不开启 (–skip-add-drop-table) 。

  • -n, --no-create-db:不包含数据库的创建语句。

  • -t, --no-create-info:不包含数据表的创建语句。

  • -d --no-data:不包含数据。

  • -T, --tab=name:自动生成两个文件:一个.sql文件,创建表结构的语句;一 个.txt文件,数据文件 。

2.使用mysqldump进行全库备份

使用mysqldump对本机上的所有MySQL数据库全部都进行备份。

[root@mysql ~]# mysqldump -uroot -p123456 -A -S /tmp/mysql.sock > /data/backup/all_db.sql

mysqldump工具备份的数据库,有创建数据库的语句、创建表的语句、插入数据的语句,都是我们能看懂的SQL。

image-20220702163936880

3.备份单个库或者多个库的数据

1)备份单个库

[root@mysql ~]# mysqldump -uroot -p123456 -B db_1 > /data/backup/db_1.sql

2)备份多个库

[root@mysql ~]# mysqldump -uroot -p123456 -B db_1 db_2 > /data/backup/db_1_db_2.sql

4.备份某个库下的单表或者多表的数据

需求:备份db_1数据库下的bmxxb或者ryxxb表

[root@mysql ~]# mysqldump -uroot -p123456 -B db_1 --tables bmxxb ryxxb > /data/backup/table_bak.sql

或者 

[root@mysql ~]# mysqldump -uroot -p123456 db_1 bmxxb ryxxb > /data/backup/table_bak.sql

注意此种方法备份的表,在还原时,需要数据库已经存在,如果数据库不存在则表不能还原,而且还要进入到这个数据库中进行还原。

5.mysqldump备份数据库时必加的一些参数

5.1.基本参数

-R:在备份数据时,同时备份库中的所有存储过程和函数,如果没有存储过程和函数时,会自动忽略。

-E:在备份数据时,同时备份EVENT事件,如果没有则会自动忽略。

--triggers:在备份数据时,同时备份库中包含的触发器,如果没有则自动忽略。

如果不加这三个参数,当库中头存储过程和函数以及触发器时,我们没有备份,通过备份还原数据时,会把库覆盖掉,里面的存储过程和函数以及触发器都会丢失。

5.2.核心参数

在mysqldump备份数据时,有两个非常重要的核心参数,这两个核心参数是mysqldump备份时必加的参数。

首先我们来思考一个备份还原的场景:

我们的备份时在每天晚上0点进行全库备份,第二天上午10点,数据库被误删除了,此时有什么好的恢复方法吗?

首先想到的就是利用前天晚上的全库备份去还原被删除的数据库,对于0点到当前时间的数据时没有备份的,此时就需要Binlog日志中截取了,但是截取Binlog就非常棘手了,不管是基于时间的标识位号截取还是基于GTID号截取,终点都特别好找,但是起点非常的难找,我们做不到哪一天才是0点备份之后第一个产生的数据。最终恢复好的数据可能有缺失的现象。

基于这种场景,其实我们也有解决的办法,例如在备份之前刷新一个Binlog,每天备份的时候都会产生一个新的Binlog,相对来说就能解决问题了。

mysqldump也为我们提供了解决办法,那么就是在备份的时候,在SQL文件里追加上备份之前最后一条数据时在哪一个Binlog日志中以及该数据对应的事件标识位号。当我们需要截取备份时间到当前时间的Binlog时,直接在备份好的SQL文件里找到这个标识位,作为截取Binlog的开始标识位即可。

下面我们就一起来看一看解决上述问题的核心参数:

–master-data核心参数参数

--master-data=2:该参数会以注释的行驶,保存备份开始时间点的Binlog状态信息,记录备份开始时间点的数据位于哪一个Binlog日志中,以及备份开始时间点的数据对应的Position标识位号,该参数一共有3个值:

  • --master-data=0:默认值
  • --master-data=1:以change master to的命令形式写入到备份文件中,可以在主从复制时使用。
  • --master-data=2:以注释的行驶记录,备份时间使用的Binlog日志名以及Position号都会记录下来。

--master-data参数的作用:记录备份时的Binlog状态,并且会自动锁表,但是当存储引擎是InnoDB时,配置--single-transaction参数也可以减少锁表的时间。

在备份时指定--master-data参数观察效果

[root@mysql ~]# mysqldump -uroot -p123456 -B db_1 --master-data=2 > /data/backup/db_1.sql

-- CHANGE MASTER TO MASTER_LOG_FILE='binlog.000004', MASTER_LOG_POS=364;

当备份时指定了--master-data参数后,会在备份文件的顶部增加上当时Binlog日志的状态信息。

image-20220702181508080

–single-transaction核心参数

--single-transaction:开启快照备份的功能,当使用此参数时,会开启一个快照备份的功能,此时要备份的表就不会产生锁表的现象,在备份之前,针对要备份的表打一个快照,备份快照中的数据,相当于热备份。

--single-transaction可以配合--master-data参数一起使用。

--master-data默认情况下会对所有表进行温备份,也就是会对所有的表都设置一个表锁,当配合--single-transaction这个参数一起使用时,如果存储引擎是InnoDB,则不会再对表设置表锁,而是对InnoDB的表进行快照备份,对非InnoDB引擎的表设置一个表锁。

6.mysqldump备份数据库时的一些其他参数

下面的这些参数在备份时可加可不加。

-F:在备份数据库时,刷新Binlog日志,产生新的Binlog日志。这个参数有个很恶心的地方,就在于当前MySQL实例中有多少个数据库,就会刷新多个Binlog,并不是按照我们想的那样,只产生一个Binlog,日积月累我们看的的Binlog日志将会很多很多,一般不用。

--set-gtid-purged:该参数是关于备份时事务的GTID号的,如果该参数值为OFF,那么备份数据时,就不会记录数据所对应事务的GTID号,将来还原数据时会产生新的GTID号,如果该参数值为ON则会保留数据所对应事务的GTID号,默认值为AUTO,自动判断。

如果是日常备份,可以指定--set-gtid-purged=OFF,不记录数据原来的GTID号,当在构建MySQL主从复制环境时要将该值设置成``–set-gtid-purged=ON或者–set-gtid-purged=AUTO`,确保数据的一致性。

如下图所示,左侧是--set-gtid-purged=OFF,备份文件中就没有GTID号相关的内容了,右侧是--set-gtid-purged=ON,会记录数据原来的GTID号。

image-20220702181631629

--max-allowed-packet:指mysql服务器端和客户端在一次传送数据包的过程当中最大允许的数据包大小,默认值是4M,如果我们的备份的数据量很大,超过了每次传输数据包的最大大小,那么就会报错,可以通过该参数在备份时指定允许传输的最大数据包大小。

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

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

相关文章

条件随机场 (CRF) 的损失函数以及faiss 的原理介绍

1、条件随机场 (CRF) 的损失函数 条件随机场(CRF)是一种统计建模方法,常用于结构化预测问题,如序列标注、分词和命名实体识别等。在CRF模型中,损失函数用于衡量模型预测的标记序列与真实标记序列之间的差异。CRF的目标…

C++-模板与容器

1、模板 模板可以让类或者函数支持一种通用类型,这种通用类型在实际运行过程中可以使用任何数据类型。因此程序员可以写出一些与类型无关的代码。这种编程方式也叫“泛型编程”。 通常有两种形式: 函数模板类模板 1.1 函数模板 //模板类型声明 template&…

【基础篇】九、程序计数器 JVM栈

文章目录 0、运行时数据区域1、程序计数器2、JVM栈3、JVM栈--栈帧--局部变量表4、JVM栈--栈帧--操作数栈5、JVM栈--栈帧--桢数据6、栈溢出7、设置栈空间大小8、本地方法栈 0、运行时数据区域 JVM结构里,类加载器下来,到了运行时数据区域,即Ja…

Navicat for Mysql怎么执行创建表的脚本

Navicat for Mysql怎么执行创建表的脚本 Navicat 怎么执行sql文件 Navicat 执行创建表语句 Navicat 执行sql语句 Navicat 怎么创建表语句 1、打开Navicat数据库管理工具; 2、点击菜单栏上的“工具”,选择“命令列界面”; 打开了命令列界面…

Vue学习计划-Vue3--核心语法(三)computed计算属性、watch监听、watchEffect函数

1. computed计算属性 作用:根据已有数据计算出新数据(和Vue2中的computed作用一致)。 2. watch监视与watchEffect 1. watch 作用:监视数据的变化(和Vue2的watch作用一致)特点:Vue3中的watch…

Flume基础知识(五):Flume实战之实时监控目录下多个新文件

1)案例需求: 使用 Flume 监听整个目录的文件,并上传至 HDFS 2)需求分析: 3)实现步骤: (1)创建配置文件 flume-dir-hdfs.conf 创建一个文件 vim flume-dir-hdfs.conf …

一起学docker(六)| Dockerfile自定义镜像 + 微服务模块实战

DockerFile 是什么 Dockerfile是用来构建Docker镜像的文本文件,是由一条条构建镜像所需的指令和参数构成的脚本。 构建步骤 编写Dockerfile文件docker build命令构建镜像docker run运行镜像 Dockerfile构建过程 基础知识 每个保留字指令都必须为大写字母且后面…

逻辑回归(LR)----机器学习

基本原理 逻辑回归(Logistic Regression,LR)也称为"对数几率回归",又称为"逻辑斯谛"回归。 logistic回归又称logistic 回归分析 ,是一种广义的线性回归分析模型,常用于数据挖掘&#…

『年度总结』逐梦编程之始:我的2023学习回顾与展望

目录 这篇博客,我将回顾2023年编程之旅的起点,同时展望2024年的新征程。 前言 我与Python 我与C语言 第一篇正式博客: 第二篇正式博客(扫雷): 指针学习笔记: C语言学习笔记: 我与数据结构…

SCT52A40——120V,4A,高频高压侧和低压侧栅极驱动器,替代UCC27200/UCC27201/MIC4604YM等

• 8-24V宽供电电压 • 驱动高侧和低侧N通道MOSFET • 4A峰值输出源电流和汇电流 • 升压电源电压范围可达120V • 集成阴极负载二极管 • TTL兼容输入,-10V输入 • 45ns传输延迟 • 1000pF负载下7ns上升和4.5ns下降时间 • 2ns延迟匹配时间 • 静态电流252uA • 15…

JDK、JRE、JVM的联系与区别

JDK、JRE、JVM的联系与区别 一、JDK,JRE,JVM定义 JDK(Java Development Kit),包含JRE,以及增加编译器和调试器等用于程序开发的文件。 JRE(Java Runtime Environment),包含Java虚拟机、库函数、运行Java应用程序所必须的文件。 JVM(Java Virtual Machine)是一个虚…

Vue中的选项式 API 和组合式 API,两者有什么区别

Vue中的选项式 API(Option API)和组合式 API(Composition API)是两种不同的组件编写方式,它们各有特点和适用场景: 选项式 API(Option API): 传统方法:Vue最初的编程范式…

LeetCode 热题 100——42. 接雨水

给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 示例 1: 输入:height [0,1,0,2,1,0,1,3,2,1,2,1] 输出:6 解释:上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表…

一起玩儿物联网人工智能小车(ESP32)——25. 利用超声波传感器测量距离

摘要:本文介绍如何利用超声波传感器测量障碍物的距离 测量距离是智能小车经常要用到的功能,今天就来介绍一个最常用的测量距离的传感器——超声波传感器。 超声波传感器的测距原理是利用超声波发射器向某个方向发射超声波,与此同时&#xff…

Health System Pro - Plug Play Solution

Health System为您提供了可重复使用的健康组件、健康条和碰撞块组件,可以轻松定制和扩展,以满足任何项目的需求。通过使用Health System,您可以节省时间和精力,避免为每个项目或游戏实体重写健康逻辑,从而带来更高效的…

计算机网络(9):无线网络

无线局域网 WLAN 无线局域网常简写为 WLAN (Wireless Local Area Network)。 无线局域网的组成 无线局域网可分为两大类。第一类是有固定基础设施的,第二类是无固定基础设施的。所谓“固定基础设施”是指预先建立起来的、能够覆盖一定地理范围的一批固定基站。 …

Python----matplotlib库

目录 plt库的字体: plt的操作绘图函数: plt.figure(figsizeNone, facecolorNone): plt.subplot(nrows, ncols, plot_number): plt.axes(rect): plt.subplots_adjust(): plt的读取和显示相关函数: plt库的基础图…

Day22 二叉树part08 235.二叉搜索树的最近公共祖先 701.二叉搜索树中的插入操作 450.删除二叉搜索树中的节点

二叉树part08 235.二叉搜索树的最近公共祖先 701.二叉搜索树中的插入操作 450.删除二叉搜索树中的节点 235. 二叉搜索树的最近公共祖先 方法一:递归法(利用二叉搜索树性质) class Solution { public:TreeNode* lowestCommonAncestor(TreeN…

74HC595驱动数码管程序

数码管的驱动分静态扫描和动态扫描两种,使用最多的是动态扫描,优点是使用较少的MCU的IO口就能驱动较多位数的数码管。数码管动态扫描驱动电路很多,其中最常见的是74HC164驱动数码管,这种电路一般用三极管作位选信号,用…

管理组件状态

概述 在应用中,界面通常都是动态的。如图1所示,在子目标列表中,当用户点击目标一,目标一会呈现展开状态,再次点击目标一,目标一呈现收起状态。界面会根据不同的状态展示不一样的效果。 图1 展开/收起目标…