mysqldump详解

MySQL–mysqldump命令详解 当导出多个数据库时,–lock-tables分别为每个数据库锁定表。如果你希望你的导出和日志刷新发生在同一个确定的时刻,你需要使用–lock-all-tables,或者–master-data配合–flush-logs。该选项将打开-lock-all-tables 选项,除非-single-transaction也被指定。与-tab选项一起使用,不能用于-databases和-all-databases选项。与-tab选项一起使用,不能用于-databases和-all-databases选项。 阅读详情
  • GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源。
  • GreatSQL是MySQL的国产分支版本,使用上与MySQL一致。
  • 作者: 杨延昭
  • 文章来源:GreatSQL社区投稿

在进行数据库备份的时候主要分为了逻辑备份和物理备份这两种方式。在数据迁移和备份恢复中使用mysqldump将数据生成sql进行保存是最常用的方式之一。

本文将围绕着mysqldump的使用,工作原理,以及对于InnoDB和MyISAM两种不同引擎如何实现数据一致性这三个方面进行介绍。

一.mysqldump 简介

mysqldump是MySQL自带的逻辑备份工具。
它的备份原理是通过协议连接到 MySQL数据库,将需要备份的数据查询出来,
将查询出的数据转换成对应的insert语句,当我们需要还原这些数据时,
只要执行这些insert语句,即可将对应的数据还原。

二.备份的命令

2.1命令的格式
1.mysqldump [选项] 数据库名 [表名] > 脚本名
2.mysqldump [选项] --数据库名 [选项 表名] > 脚本名
3.mysqldump [选项] --all-databases [选项]  > 脚本名
2.2选项说明
参数名缩写含义
--host-h服务器IP地址
--port-P服务器端口号
--user-uMySQL 用户名
--pasword-pMySQL 密码
--databases指定要备份的数据库
--all-databases备份mysql服务器上的所有数据库
--compact压缩模式,产生更少的输出
--comments添加注释信息
--complete-insert输出完成的插入语句
--lock-tables备份前,锁定所有数据库表
--no-create-db/--no-create-info禁止生成创建数据库语句
--force当出现错误时仍然继续备份操作
--default-character-set指定默认字符集
--add-locks备份数据库表时锁定数据库表

三.还原的命令

3.1系统行命令
mysqladmin -uroot -p create db_name 
mysql -uroot -p  db_name < /backup/mysqldump/db_name.db

注:在导入备份数据库前,db_name如果没有,是需要创建的; 而且与db_name.db中数据库名是一样的才可以导入。
3.2source方式
mysql > use db_name;
mysql > source /backup/mysqldump/db_name.db;

四.mysqldump实现的原理

4.1备份流程如下
1.调用FWRL(flush tables with read lock),全局禁止读写
2.开启快照读,获取此期间的快照(仅仅对innodb起作用)
3.备份非innodb表数据(*.frm,*.myi,*.myd等)
4.非innodb表备份完毕之后,释放FTWRL
5.逐一备份innodb表数据
6.备份完成

图片

4.2执行mysqldump,分析备份日志
#  执行语句
[root@localhost backup]# mysqldump -uroot -proot -h127.0.0.1 --all-databases --single-transaction --routines --events --triggers --master-data=2 --hex-blob --default-character-set=utf8mb4 --flush-logs --quick > all.sql
mysqldump: [Warning] Using a password on the command line interface can be insecure.
[root@localhost ~]# tail -f  /var/lib/mysql/localhost.log
第一步:
  FLUSH /*!40101 LOCAL */ TABLES
# 这里是刷新表


第二步:
  FLUSH TABLES WITH READ LOCK
# 因为开启了--master-data=2,这时就需要flush tables with read lock锁住全库,
  记录当时的master_log_file和master_log_pos点
  这里有一个疑问?
  执行flush tables操作,并加一个全局读锁,那么以上两个命令貌似是重复的,
  为什么不在第一次执行flush tables操作的时候加上锁呢?
  简而言之,是为了避免较长的事务操作造成FLUSH TABLES WITH READ LOCK操作迟迟得不到
  锁,但同时又阻塞了其它客户端操作。


第三步:
  SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ
#  --single-transaction参数的作用,设置事务的隔离级别为可重复读,
  即REPEATABLE READ,这样能保证在一个事务中所有相同的查询读取到同样的数据,
  也就大概保证了在dump期间,如果其他innodb引擎的线程修改了表的数据并提交,
  对该dump线程的数据并无影响,然而这个还不够,还需要看下一条


第四步:
  START TRANSACTION /*!40100 WITH CONSISTENT SNAPSHOT */
# 获取当前数据库的快照,这个是由mysqldump中--single-transaction决定的。
# WITH CONSISTENT SNAPSHOT能够保证在事务开启的时候,第一次查询的结果就是
  事务开始时的数据A,即使这时其他线程将其数据修改为B,查的结果依然是A。简而言之,就是开启事务并对所有表执行了一次SELECT操作,这样可保证备份时,
  在任意时间点执行select * from table得到的数据和
  执行START TRANSACTION WITH CONSISTENT SNAPSHOT时的数据一致。
 【注意】,WITH CONSISTENT SNAPSHOT只在RR隔离级别下有效。

第五步:
  SHOW MASTER STATUS
# 这个是由--master-data决定的,记录了开始备份时,binlog的状态信息,
  包括MASTER_LOG_FILE和MASTER_LOG_POS

这里需要特别区分一下master-data和dump-slave
master-data:
--master-data=2表示在dump过程中记录主库的binlog和pos点,并在dump文件中注释掉这一行;
--master-data=1表示在dump过程中记录主库的binlog和pos点,并在dump文件中不注释掉这一行,即恢复时会执行;
dump-slave
--dump-slave=2表示在dump过程中,在从库dump,mysqldump进程也要在从库执行,
  记录当时主库的binlog和pos点,并在dump文件中注释掉这一行;
--dump-slave=1表示在dump过程中,在从库dump,mysqldump进程也要在从库执行,
  记录当时主库的binlog和pos点,并在dump文件中不注释掉这一行;

第六步:
  UNLOCK TABLES
# 释放锁。

五.mysqldump对InnoDB和MyISAM两种存储引擎进行备份的差异。

5.1对于支持事务的引擎如InnoDB,参数上是在备份的时候加上 –single-transaction 保证数据一致性
–single-transaction 实际上通过做了下面两个操作 :

① 在开始的时候把该 session 的事务隔离级别设置成 repeatable read ;

② 然后启动一个事务(执行 begin ),备份结束的时候结束该事务(执行 commit )

有了这两个操作,在备份过程中,该 session 读到的数据都是启动备份时的数据(同一个点)。可以理解为对于 InnoDB 引擎来说加了该参数,备份开始时就已经把要备份的数据定下来了,
备份过程中的提交的事务时是看不到的,也不会备份进去。
5.2对于不支持事务的引擎如MyISAM,只能通过锁表来保证数据一致性,这里分两种情况:
1)导出全库:加 –lock-all-tables 参数,这会在备份开始的时候启动一个全局读锁 
  (执行 flush tables with read lock),其他 session 可以读取但不能更新数据,
   备份过程中数据没有变化,所以最终得到的数据肯定是完全一致的;

2)导出单个库:加 –lock-tables 参数,这会在备份开始的时候锁该库的所有表,
   其他 session 可以读但不能更新该库的所有表,该库的数据一致;

Enjoy GreatSQL :)

关于 GreatSQL

GreatSQL是由万里数据库维护的MySQL分支,专注于提升MGR可靠性及性能,支持InnoDB并行查询特性,是适用于金融级应用的MySQL分支版本。

相关链接: GreatSQL社区 Gitee GitHub Bilibili

GreatSQL社区:

image

社区有奖建议反馈: https://greatsql.cn/thread-54-1-1.html

社区博客有奖征稿详情: https://greatsql.cn/thread-100-1-1.html

社区2022年度勋章获奖名单: https://greatsql.cn/thread-184-1-1.html

(对文章有疑问或者有独到见解都可以去社区官网提出或分享哦~)

技术交流群:

微信&QQ群:

QQ群:533341697

微信群:添加GreatSQL社区助手(微信号:wanlidbc )好友,待社区助手拉您进群。

MySQL mysqldump备份恢复 通过以上的日志分析,可以总结下mysqldump备份的主要流程:一开始设置SQL_MODE为空;设置TIME_ZONE为+00:00;查看是否开启了GTID;执行FLUSH TABLES关闭实例中所有的表;执行语句FLUSH TABLES WITH READ LOCK获取全局表的读锁,保证表一致性;设置会话级别事务的隔离级别为REPEATABLE READ,保证事务期间数据的一致性;执行语句START TRANSACTION /*! 阅读详情

相关推荐

mysqldump 参数详解

它可以生成一组 SQL 语句,这些语句可以用来重现原始数据库对象定义和表数据。: 锁定所有数据库中的所有表,以保证数据的一致性。: 在客户端和服务器之间启用压缩传递所有信息。SQL 语句,保证导出时数据库的一致性状。: 在导出数据之前,设置事务隔离模式为。: 导出存储过程以及自定义函数。: 指定连接数据库的端口号。: 指定连接数据库的用户名。: 导出所有数据库的所有表。参数,指定需要导出的表名。: 开始导出前,锁定所有表。: 指定连接数据库的密码。: 导出指定的多个数据库。: 在每个表导出之前增加。

冰恋云的专栏 467

MySQL导入导出 —— mysqldump 简介及常见用法

一、 导出 1. db级 导出所有db结构和数据(-A参数) mysqldump -uroot -p -A > /data/bak/all.sql 仅导出所有db结构(-d参数) mysqldump -uroot -p -A -d > /data/bak/all_struct.sql 仅导出所有db数据(-t参数) mysqldump -uroot -p -A -t &g...

Hehuyi_In的博客 3万+

OI 生涯回忆录 《Pilgrimage》

前言 于 NOI2020 后写下本文。 本文简单提及了在写作时尚能回忆起来的,在我的 OI 生涯中对我的影响重大的人、事、比赛等。 写作本文,旨在在回忆允许的范围内,对 OI 生涯进行一定程度上的梳理,总结。 开端 入门 我最早接触计算机程序设计,是在小学。 那时候,我的数学成绩不错,就被老师推荐去学习编程。 就这样,我在局前街小学的何静老师的指导下,走上了编程的道路。 小学时的编程,与其说是 “竞赛” ,不如说是 “兴趣班” 。 当时,包括我在内,很多小孩子天性是浮躁的。支撑我对着无聊的代码学下去的,并不

cz_xuyixuan的博客 1万+

mysqldump的使用简介

有时候要对线上数据进行操作, 需要提前备份下数据。 有时候需要将线上数据dump下来进行分析和验证。 来看下mysqldump的使用。 导出数据:mysqldump -h localhost -u root -p -P 17538 --single-transaction --databases taoge --tables ...

认知 行动 坚持 2万+

QMT量化交易桥接方案深度对比:从MiniQMT淘汰说起

量化交易系统中的API桥接,本质是解决本地终端与底层交易引擎之间的通信瓶颈。其核心原理在于绕过GUI封装、直连确定性执行层,从而获得低延迟、高可靠、可监控的指令通路。技术价值体现在策略实盘一致性提升、毫秒级响应保障及运维可控性增强。典型应用场景包括打板策略、T+0套利、高频网格等对时效与稳定性双敏感的自动化交易。本文聚焦国金证券QMT专业版生态,系统剖析DLL注入、HTTP反向代理、IPC共享内存与官方HTTP API四大桥接路径的性能边界、合规风险与工程落地成本,尤其深入解析qmt终端 client is

weixin_33892359的博客 457

MIPI CSI-2 协议解析

CSI-2标准协议前言一、Overview of CSI-2二、CSI-2 layer Definitions三、 Camera Control Interface(CCI)3.1 数据传输协议(Data Transfer Protocol)3.1.1 消息类型(Message Type)3.1.2 读写操作(Read/Write Operations)3.1.2.1 随机位置单次读3.1.2.2 当前位置单次读3.1.2.3 随机位置连续读3.1.2.4 当前位置连续读3.1.2.5 随机位置单次写3.1

Lucky 3万+

mysqldump 命令参数大全

  mysqldump 是一个数据库备份程序。   mysqldump 客户端执行逻辑备份,生成一组 SQL 语句,可以执行这些语句来重现原始数据库对象定义和表数据。它导出一个或多个 MySQL 数据库进行备份或迁移到另一个 SQL server。mysqldump 命令还可以生成 CSV、其他分隔文本或 XML 格式的输出。   本文对其常用参数总结如下,用户也可以通过 “man mysqldump” 或 “mysqldump --help” 查看其全面的用法。 --all-databases, -A

长安明月的博客 8114

【新华三】通过路由复制实现Public与VRF路由互通

如上图所示,S6900设备里有两张表,一张是public路由表,默认所有的路由都存放在public路由表里;除此之外还创建了VRF test,因此此设备还有VRF test路由表。通过路由复制实现Public路由和VRF路由互通,默认情况下VRF里的路由单独一张路由表,默认情况下与public路由表相互隔离,两张表之间不可互访。此时的public路由表里面并没有test的路由表。public路由表与VRF路由表之间相互隔离。此时VRF test里的路由也没有其他VRF或Public里的路由,相互隔离。

五大连池的镜子 5279

mysqldump备份mysql数据库

select into 、mysqldump 数据库备份

fengchengwu2012的博客 2万+

AF3​​​​​​​ Msa、TemplateHit、HitMetadata类解读

Msa:处理 多序列比对 (MSA) 结果,为 AlphaFold3 提供 序列进化信息。 TemplateHit:存储 查询序列与模板结构的比对信息,用于 筛选模板。 HitMetadata:提供 比对模板的 PDB 结构信息,帮助 解析和使用模板数据。

qq_27390023的博客 818

PyTorch视觉项目实战:从数据加载到模型部署

PyTorch视觉项目实战:从数据加载到模型部署 ,人工智能,计算机视觉,大模型,AI,随着深度学习在计算机视觉领域的飞速发展,PyTorch 凭借其简洁的代码风格、动态计算图特性以及强大的社区支持,成为众多开发者和研究人员的首选框架。从数据加载、模型构建与训练,到最终的模型部署,PyTorch 提供了一套完整且灵活的解决方案。本文将通过实际项目案例,详细阐述基于 PyTorch 的视觉项目全流程,结合丰富的代码示例和概念解析,帮助读者掌握从项目起步到落地的关键技术。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 4万+

Mysql的mysqldump详解

Mysql的mysqldump详解 一、导出 1.1 导出表结构及数据 mysqldump -uroot -p --set-gtid-purged=OFF database table1 table2 > mysqldump.sql 1.2 只导出表结构 mysqldump -uroot -p --set-gtid-purged=OFF -d database table1 table2 > mysqldump.sql 1.3 只导出数据 mysqldump -uroot -p --se.

2107

RT-Thread Studio 使用笔记(七)| 配合STM32CubeMX添加裸机驱动(以ADC为例)

1. 配置STM32CubeMX 2. 复制stm32xxxx_hal_msp.c文件 将 CubeMx 生成的代码 stm32f7xx_hal_msp.c 函数复制到 RT-Thread Studio 生成的工程中,并参与工程编译: 由于我们并没有使用 CubeMx 生成的工程,所以这里需要将 stm32f7xx_hal_msp.c 文件中 #include “main.h” 替换为 #i...

Mculover666的博客(嵌入式) 9626

mysqldump安装包

数据库相关学习资料:https://edu.51cto.com/video/655.htmlMySQLdump 安装与使用指南 MySQLdump 是 MySQL 数据库的一个实用工具,用于备份数据库或数据库表。本文将详细介绍 MySQLdump 的安装、配置和使用方法,并通过代码示例和饼状图展示其功能。 MySQLdu...

weixin_29340327的博客 508

【动态导通电阻】p-GaN HEMTs正向和反向导通下的动态导通电阻

2024年,浙江大学的研究团队通过多组双脉冲测试方法,深入研究了两种商用p-GaN栅极HEMTs在正向和反向导通模式下的动态导通电阻(RON)特性。研究发现,肖特基型p-GaN栅极HEMTs在反向导通时动态RON比正向导通高3%-5%,而混合漏极嵌入栅注入晶体管在反向导通时动态RON降级较轻,降低约10%。此外,随着漏极电流(IDS)的增加,两种器件在反向导通时动态RON先减小后增加,形成“谷底”现象。

荷塘阅色 827

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

MySQL的mysqldump使用详解

本文详细介绍了MySQL中mysqldump工具的使用方法。主要内容包括:常用备份指令格式(本地/远程备份),完整的参数说明表格(超过50个参数),以及各参数的具体功能和适用场景。重点参数如--add-drop-table、--all-databases、--single-transaction等都有详细解释,同时说明了5.7版本新增的特性参数。该工具支持多种备份场景,包括表结构、数据、存储过程、触发器等对象的备份,并提供了数据一致性保障机制。文章可作为MySQL数据库备份的实用参考手册。

总想试试,万一成了呢?? 3512

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

mysqldump 备份详解

mysqldump是MySQL官方提供的一款逻辑备份工具,它将生成一组可以导入数据库中以重现原始数据库中的数据和数据库对象的SQL语句。可用于备份恢复、表结构导出、备份上云。本篇文章介绍原理和用法。...

分享既学习 7989

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

mysqldump使用详解

mysqldump的详细用法: 首先一步一步实验,创建一个用户,只授予某一个库的读取权限: create user dump_test@"%" identified by "dump_test123"; grant select on test.* to dump_test@"%"; 然后采取最基本的默认的备份方式: 从图中可以看到错误是因为缺少lock权限,为了保证数据的一致性,m...

line_on_database的博客 2306

mysqldump备份还原

MYSQLdump参数详解 mysqldump备份: mysqldump -u用户名 -p密码 -h主机 数据库 a -w “sql条件” –lock-all-tables > 路径 mysqldump还原: mysqldump -u用户名 -p密码 -h主机 数据库 < 路径 mysqldump按条件导出: mysqldump -u用户名 -p密码 -h主机 数据库 a –whe...

tktktl的博客 232

Mysqldump详解

参数 参数说明 --all-databases  , -A 导出全部数据库。 mysqldump  -uroot -p --all-databases --all-tablespaces  , -Y 导出全部表空间。 mysqldump  -uroot -p --all-databases --all-tablespaces --no-tablesp

不再疯要傻 6996

mysqldump命令详解

1.简介 mysqldump为MySQL逻辑备份工具,产生一系列SQL语句,之后重新执行以产生备份的库、表及数据。也可产生CSV、XML等格式的数据。适用于各类引擎的表。 运行mysqldump需一定的权限。如,备份表的最低权限为select,备份视图需show view权限,备份触发器需trigger权限。mysqldump的输出可能包含alter database语句,如,用于保持备份库的

刀刀的专栏 3万+

MySQLDump 使用教程

MySQLDump 使用教程 项目介绍 MySQLDump 是一个用于备份 MySQL 数据库的命令行工具。它可以将数据库、表或特定数据导出为 SQL 脚本,便于数据迁移和备份。该项目是基于 MySQL 官方提供的 mysqldump 工具进行扩展和优化的开源项目。 项目快速启动 安装 首先,确保你已经安装了 MySQL。然后,你可以通过以下命令安装 mysqldump: git clone ht...

gitblog_00813的博客 390

【mysqldump】 【亲测免费】 MySQLDump-PHP 使用教程

MySQLDump-PHP 是一个用 PHP 编写的原生解决方案,用于生成 MySQL 数据库的备份。它是 MySQL 自带的 `mysqldump` 工具的 PHP 版本,支持多种高级选项,如压缩、视图、触发器、事件等。该项目托管在 GitHub 上,可以通过 Composer 进行安装和管理。 ## 项目快速启动 ### 安装 首先,确保你已经安装了 Composer。然后,在你的项目目

gitblog_00142的博客 761
上一篇: MySQL8.0 优化器介绍(一)
下一篇: GreatSQL社区月报 | 2023.03
GreatSQL社区
博客等级 码龄5年 1210粉丝 390原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值