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

文章目录

    • 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,如果我们的备份的数据量很大,超过了每次传输数据包的最大大小,那么就会报错,可以通过该参数在备份时指定允许传输的最大数据包大小。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

UG装配-引用集

引用集是控制组件的图素在装配体中显示与隐藏 装配体体环境控制组件显示与隐藏的四种方式 1、图层 2、引用集 3、隐藏命令 Ctrl B 4、抑制,取消此组件装配,但保留操作在导航器方便启用 引用集有两种类型 1、UG自动创建的引用集 2、用户定义的引…

【linux】线程同步+基于BlockingQueue的生产者消费者模型

线程同步基于BlockingQueue的生产者消费者模型 1.线程同步2.生产者消费者模型3.基于BlockingQueue的生产者消费者模型 喜欢的点赞,收藏,关注一下把! 1.线程同步 在线程互斥写了一份抢票的代码,我们发现虽然加锁解决了抢到负数票的…

【Spark精讲】Spark on Hive性能优化

目录 第一章 1.1 集群配置概述 1.2 集群规划概述 第二章 Yarn配置 2.1 Yarn配置说明 yarn.nodemanager.resource.memory-mb yarn.nodemanager.resource.cpu-vcores yarn.scheduler.maximum-allocation-mb yarn.scheduler.minimum-allocation-mb 第三章 Spark的配置说…

RA8900CE汽车用c总线接口实时时钟模块

汽车用c总线接口实时时钟模块内置调频32.768 kHz晶体单元和DTCXO,高稳定性和电源切换。 接口类型我 2C-Bus接口(400kHz)界面电压范围2.5V ~ 5.5V温度补偿电压范围2.0V至5.5V计时电压范围1.6V ~ 5.5V可选时钟输出(32.768 kHz, 1024 Hz, 1 Hz)各种功能齐全的日历、报…

提示循环引用 一个循环引用但无法列出导致循环的引用且文件打不开无法修改

目录 设备环境: 提示内容: 具体错误问题描述: 图示: Office 报错 WPS 报错 问题分析: 问题解决: 关注我的 GitHub(魔法网络访问): 设备环境: Window…

【React系列】React中的CSS

本文来自#React系列教程:https://mp.weixin.qq.com/mp/appmsgalbum?__bizMzg5MDAzNzkwNA&actiongetalbum&album_id1566025152667107329) 一. React中的css方案 1.1. react 中的 css 事实上,css 一直是 React 的痛点,也是被很多开发…

力扣2397.被列覆盖的最多行数,二进制枚举

借用评论区一位哥们的说法就是:假设有一个m*n的草坪,每块草坪分为有僵尸(1)和每僵尸(0)的情况,现在有numslect个竖排生效的火爆辣椒,问在哪几竖排使用火爆辣椒可以保住最多的小推车 …

Redis (三)

1、redis复制 简单的概括就是主从复制,master以写为主,Slave以读为主,当master数据发生变化的时候,自动将更新的数据异步同步到其他的slave是数据库。 使用这种机制的话,可以做到读写分离,可以减轻主机负担…

conda环境下Could not create share link解决方法

1 问题描述 在运行chatglm-6B项目时,运行python web_demo.py,出现如下错误: (chatglm) [rootlocalhost ChatGLM2-6B]# python web_demo.py Loading checkpoint shards: 100%|██████████████████████████████…

基于AOP实现权限管理系统demo

简介:本文将介绍如何使用面向切面编程(AOP)技术实现一个简单的权限管理系统demo。我们将使用ssm框架作为基础,通过AOP来拦截和处理权限相关的操作。主要实现拦截操作。(如有需要,您可以自行从Gitee仓库中获…

上海亚商投顾:沪指探底回升跌 两市成交跌破7000亿

上海亚商投顾前言:无惧大盘涨跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。 一.市场情绪 沪指昨日震荡调整,盘中一度跌超1%,尾盘跌幅有所收窄,创业板指录得3连阴。露…

5G工业物联网网关:连接未来的智能工业

在当今数字化时代,工业物联网正迅速崛起,并引领着全球工业的数字转型。而5G工业物联网网关作为实现IIoT的关键基础设施,在连接未来的智能工业中发挥着举足轻重的作用。 什么是5G工业物联网网关 5G工业物联网网关是连接工业设备和5G网络的关键…

<HarmonyOS第一课>1~10课后习题汇总

HarmonyOS第一课 1运行Hello World 判断题 main_pages.json存放页面page路径配置信息。(正确)DevEco Studio是开发HarmonyOS应用的一站式集成开发环境。(正确) 单选题 在stage模型中,下列配置文件属于AppScope文件…

2024年我国网络安全发展形势展望

2023年,我国网络安全政策法规陆续出台,网络安全与数据安全产业发展势头强劲,网络安全形势整体向好。展望2024年,世界各国在网络空间中的竞争将变得愈发激烈,我国网络安全领域的法律法规将不断完善,数据安全…

scratch给数据清单排序 2023年12月中国电子学会图形化编程 少儿编程 scratch编程等级考试四级真题和答案解析

目录 scratch给数据清单排序 一、题目要求 1、准备工作 2、功能实现 二、案例分析

MySQL数据库设置主键自增、自增主键为什么不能保证连续递增

文章目录 一、设置主键自增1.1、建表时设置主键自增1.2、建表后设置主键自增1.3、删除自增约束 二、自增列:AUTO_INCREMENT2.1、自增起始值和自增步长2.2、自增主键存储策略2.3、自增值修改机制2.3、特点和要求 三、自增字段值不连续3.1、自增不连续的示例3.1.1、示…

福建科立讯通信 指挥调度管理平台 多处文件上传漏洞复现

0x01 产品简介 福建科立讯通信指挥调度管理平台是一个专门针对通信行业的管理平台。该产品旨在提供高效的指挥调度和管理解决方案,以帮助通信运营商或相关机构实现更好的运营效率和服务质量。该平台提供强大的指挥调度功能,可以实时监控和管理通信网络设备、维护人员和工作任…

逻辑回归简单案例分析--鸢尾花数据集

文章目录 1. IRIS数据集介绍2. 具体步骤2.1 手动将数据转化为numpy矩阵2.1.1 从csv文件数据构建Numpy数据2.1.2 模型的搭建与训练2.1.3 分类器评估2.1.4 分类器的分类报告总结2.1.5 用交叉验证(Cross Validation)来验证分类器性能2.1.6 完整代码&#xf…

Kotlin/JS工程构建及编译运行到浏览器

概述 Kotlin/JS 提供了转换 Kotlin 代码、Kotlin 标准库的能力,并且兼容 JavaScript 的任何依赖项。Kotlin/JS 的当前实现以 ES5 为目标。 使用 Kotlin/JS 的推荐方法是通过 kotlin.multiplatform Gradle 插件。它提供了一种集中且便捷的方式来设置与控制以 JavaS…

激光焊接机:塑料产品制造中的革命性优势

随着科技的飞速发展,激光焊接机在塑料产品制造领域的应用越来越广泛。相较于传统的焊接技术,激光焊接机在塑料产品制造中展现出诸多优势,成为现代工业生产中不可或缺的一部分。 一、精确、高效的焊接性能 激光焊接机采用高能激光束作为焊接热…