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

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

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

相关文章

Docker Compose--部署SpringBoot项目--实战

原文网址:Docker Compose--部署SpringBoot项目--实战-CSDN博客 简介 本文用实战介绍Docker Compose部署SpringBoot项目。 1.创建SpringBoot项目 Controller package com.knife.example.controller;import io.swagger.annotations.Api; import io.swagger.annot…

HTTP基础知识总结

目录 一、什么是HTTP? 二、与HTTP有关的协议 三、HTTP请求特征 四、HTTP组成格式 五、HTTP标头 1.通用标头 2.实体标头 3.请求标头 4.响应标头 六、HTTP状态码分类 我们在日常测试过程中,也可以通过浏览器F12简单定位是前端问题还是后端问题&a…

KeyError: ‘model_state_dict‘

问题 加载模型权重文件时获取model_state_dict键失败 解决 单步调试发现保存模型权重时正确保存了该键值对,再次调试时发现莫名奇妙又没错了 首先确认保存模型时的状态字典键名:确保在保存模型权重时,正确地使用了 model.state_dict() 方法…

局部与整体的关联特性,如图所示

局部与整体的关联特性是指事物的局部部分与整体之间存在一定的关联关系。它强调整体是由局部构成,局部又反向影响整体。具体包括以下几个方面的特性: 互依性:局部与整体相互依赖,一个的变动会影响另一个的变动。局部的变化会对整体…

Python-CSV文件的存储

CSV文件存储 CSV其文件以纯文本形式存储表格数据。CSV文件是一个字符序列,可以由任意数目的记录组成,各种记录由某种换行符分隔开。它比Excel文件更加简洁,XLS文本是电子表格,包含文本、数值、公式和格式等内容,CSV中则…

Linux系统使用超详细(六)~进程管理

目录 一、认识进程 二、进程号 2.1.进程号概念 2.2.进程号作用 三、进程查看 3.1. ps命令: 3.2. top命令: 3.3. htop命令: 3.4. pstree命令: 3.5. pgrep命令: 四、进程状态 五、进程优先级 六、进程优先…

neo4j图数据库安装和测试

neo4j图数据库安装和测试 1. 下载合适的neo4j软件版本。 https://we-yun.com/doc/neo4j/ https://neo4j.com/deployment-center/#enterprise 2. 下载JAVAJDK 由于neo4j是一个用Java编写的图形数据库,因此在安装和运行Neo4j之前,需要先安装Java Developm…

真机调试HarmonyOS应用报错

问题表现: 01/04 19:00:01: Launching com.example.simplevideo $ hdc shell am force-stop com.example.simplevideo $ hdc shell bm uninstall com.example.simplevideo $ hdc file send E:\harmony\SimpleVideo\entry\build\default\outputs\default\entry-defau…

docker (portainer 安装nginx)

汉化版步骤可以参考:写文章-CSDN创作中心https://mp.csdn.net/mp_blog/creation/editor/135258056 一、创建容器 二、配置端口,以及容器卷挂载 挂载目录配置:(下方截图的目录如下,docker 改为 mydocker,用docker作为根…

使用KVM命令集管理虚拟机

1、KVM基本功能管理 1)查看命令帮助 [rootlocalhost ~]# virsh -h ......//省略输出内容 2)查看KVM的配置文件存放目录(rhel7.1是虚拟机系统实例的配置文件) [rootlocalhost ~]# ls /etc/libvirt/qemu autostart networks r…

《设计模式》之策略模式

策略模式定义 比如对象的某个行为,在不同场景有不同实现方式,可以将这些行为的具体实现定义为一组策略,每个实现类实现种策略,在不同场景使用不同的实现,并且可以自由切换策略。 策略模式结构 策略模式需要一个策略…

react antd,echarts全景视图

1.公告滚动,40s更新一次 2.echarts图标 左右轮播 60s更新一次 3.table 表格 import { useState, useEffect } from react;import Slider from react-slick; import slick-carousel/slick/slick-theme.css; import slick-carousel/slick/slick.css;import Layout fro…

springboot项目 java -jar xxx.jar 没有主清单属性解决方法

1.在pom文件中添加如下 <plugins><!--解决SpringBoot打包成jar后运行提示没有主清单属性--><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><fork…

el-autocomplete远程搜索使用及el-upload上传多个文件流给后端,详情接口返回的是文件地址,前端将文件地址转成文件流,回传文件流给后端

最近遇到一个项目,里面有2个需求我觉得挺常见的,第一个需求是一个表单里,当用户在输入名称后,前端调接口发请求获取到关联名称的企业名称,并展示,然后当用户选中企业后,前端调接口获取选中企业的具体信息,并填充到表单里;第二个需求是,表单里有个上传图片的功能,前端…

JVS规则引擎和智能BI(自助式数据分析)1.3新增功能说明

规则引擎更新功能 新增: 1、数据源新增Excel数据源&#xff1b; Excel数据源功能允许用户将Excel文件作为数据源导入&#xff0c;并进行数据清洗、转换和处理&#xff0c;以实现数据的集成、可视化和深度分析&#xff0c;为决策提供强大支持&#xff0c;同时保持良好的交互性…

新一代爬取JavaScript渲染页面的利器-playwright(一)

Playwright的使用 Playwright是微软在2020年初开源的一款新一代自动化测试工具&#xff0c;其功能和**Selenium**、Pyppeteer类似&#xff0c;都可以驱动浏览器进行自动化操作&#xff0c;但是也具备了Selenium、Pyppeteer不具备的更好的API&#xff0c;是新一代爬取JavaScrip渲…

HbuilderX中的git的使用

原文链接https://blog.csdn.net/Aom_yt/article/details/119924356

CentOs 环境下使用 Docker 部署 Ruoyi-Vue

CentOs 环境下使用 Docker 部署 Ruoyi-Vue RuoYi-Vue 项目下载地址 RuoYi-Vue: &#x1f389; 基于SpringBoot&#xff0c;Spring Security&#xff0c;JWT&#xff0c;Vue & Element 的前后端分离权限管理系统&#xff0c;同时提供了 Vue3 的版本 (gitee.com) Docker 部…

Java 流程控制语句

程序设计中规定的三种流程结构&#xff0c;即&#xff1a; 顺序结构 程序从上到下逐行地执行&#xff0c;中间没有任何判断和跳转 分支结构 根据条件&#xff0c;选择性地执行某段代码 有 if…else 和 switch-case 两种分支语句 循环结构 根据循环条件&#xff0c;重复性的执…

DRF从入门到精通九(权限控制)

文章目录 一、权限控制模型1) ACL(Access Control List,访问控制列表)2) RBAC(Role-Based Access Control,基于角色的访问控制)应用前后台权限控制实操 3) ABAC(Attribute-Based Access Control,基于属性的访问控制) 一、权限控制模型 1) ACL(Access Control List,访问控制列表…