MySQL逻辑备份
目录
一.mysqldump
基本命令:
参数选项:
示例
备份整个数据库
备份多个数据库
备份所有数据库
仅备份数据库结构
仅备份特定表
添加选项以有效处理锁表问题
恢复数据
恢复数据库
恢复库中的表
使用source恢复
注意事项
二. mysqlpump
mysqlpump 特点
基本命令:
常用选项:
示例
备份单个数据库
备份多个数据库
备份所有数据库
并发处理
过滤表
仅备份表结构
压缩备份文件
备份数据目录
恢复数据库
注意事项
逻辑备份的优缺点
只备份表数据扩展
mysqldump -n
SELECT INTO OUTFILE
总结
MySQL 的逻辑备份指的是使用 SQL 语句备份数据库的结构和数据,而不是直接备份数据库文件。通常使用 mysqldump 工具进行逻辑备份。
一.mysqldump
mysqldump是最常用的逻辑备份工具,能够生成SQL脚本文件,这些文件可以用来重建数据库结构和数据。
基本命令:
mysqldump -u [用户名] -p[密码] [数据库名] > [备份文件.sql]
参数选项:
-u, --user=[name]:指定 MySQL 用户名。-p, --password[=password]:指定 MySQL 密码。如果不提供密码,mysqldump会提示输入。-h, --host=[hostname]:指定 MySQL 服务器主机名。-P, --port=[port_num]:指定 MySQL 服务器端口号。--protocol=[{TCP|SOCKET|PIPE|MEMORY}]:指定连接协议。-r, --result-file=[file]:将输出直接写入文件,而不是通过标准输出。-t, --no-create-info:不写入创建表的语句,只导出数据。-d, --no-data:不写入数据,只导出数据库结构。--add-drop-table:在每个创建表语句前增加DROP TABLE IF EXISTS语句。--add-locks:在插入数据前后使用LOCK TABLES和UNLOCK TABLES语句。--disable-keys:在插入数据前使用ALTER TABLE ... DISABLE KEYS,插入数据后使用ALTER TABLE ... ENABLE KEYS。-B, --databases:指定要备份的数据库。如果使用该选项,所有跟在其后的数据库名都将被备份。-A, --all-databases:备份所有数据库。--tables:指定要备份的表,必须跟在数据库名之后。-n, --no-create-db:不写入创建数据库的语句。-w, --where='condition':仅导出符合指定条件的行。--single-transaction:在一个事务中导出所有数据,适用于支持事务的表(如 InnoDB)。--lock-tables:在导出前锁定所有表,适用于不支持事务的表(如 MyISAM)。--master-data[=#]:在导出中加入主服务器的二进制日志位置和文件名,用于设置复制。--flush-logs:在导出前刷新 MySQL 服务器的日志。--routines:导出存储过程和函数。--triggers:导出触发器。--events:导出事件。--hex-blob:以十六进制格式导出二进制列。--set-gtid-purged=[OFF|ON|AUTO]:控制是否在备份中加入 GTID 信息,适用于 GTID 复制。
示例
备份整个数据库
mysqldump -u root -p mydatabase > mydatabase_backup.sql
备份多个数据库
mysqldump -u root -p --databases db1 db2 > multi_database_backup.sql
备份所有数据库
mysqldump -u root -p --all-databases > all_databases_backup.sql
仅备份数据库结构
mysqldump -u root -p --no-data mydatabase > mydatabase_structure_backup.sql
仅备份特定表
mysqldump -u root -p mydatabase table1 table2 > mydatabase_tables_backup.sql
添加选项以有效处理锁表问题
mysqldump -u root -p --single-transaction --quick --lock-tables=false mydatabase > mydatabase_backup.sql
恢复数据
恢复数据库
语法
mysql -u [用户名] -p[密码] [数据库名] < [备份文件.sql]
示例
mysql -u root -p mydatabase < mydatabase_backup.sql
恢复库中的表
mysqldump -u root -p[密码] [库名] [表名] > staff_backup.sql
使用source恢复
首先登录到mysql中,在mysql中使用下述语法恢复
source 文件路径;
例:
source /path/to/employees_backup.sql;
注意事项
- 权限管理:确保执行
mysqldump和恢复命令的用户具有相应的数据库读写权限。 - 定期备份:逻辑备份通常对数据一致性和完整性要求较高,建议定期进行备份并验证备份文件的有效性。
- 存储位置:将备份文件存储在安全的位置,避免丢失或被不当修改。
二. mysqlpump
mysqlpump是MySQL 5.7引入的备份工具,支持多线程,能够更快地进行备份。它是 mysqldump 的增强版本。
mysqlpump 特点
- 并行处理:
mysqlpump支持并发地备份多个表和多数据库,极大地提高了备份速度。 - 更丰富的功能选项:支持过滤特定数据库、表和数据以及导出的同时进行压缩等。
- 增强的灵活性:提供更多参数以定制化备份操作。
基本命令:
mysqlpump -u [用户名] -p[密码] [数据库名] > [备份文件.sql]
常用选项:
--exclude-databases:排除特定数据库--include-databases:包含特定数据库--default-parallelism:设置并行度--skip-definer:忽略DEFINER子句--set-gtid-purged:用于GTID的备份
示例
备份单个数据库
mysqlpump -u root -p mydatabase > mydatabase_backup.sql
备份多个数据库
mysqlpump -u root -p --databases db1 db2 > multi_database_backup.sql
备份所有数据库
mysqlpump -u root -p --all-databases > all_databases_backup.sql
并发处理
mysqlpump -u root -p --default-parallelism=4 --databases db1 db2 > multi_database_backup.sql
使用 --default-parallelism 参数可以设定并发线程数,加快备份速度。
过滤表
mysqlpump -u root -p mydatabase --exclude-tables=table1,table2 > mydatabase_backup.sql
使用 --exclude-tables 可以排除特定的表
仅备份表结构
mysqlpump -u root -p mydatabase --skip-dump-data > mydatabase_structure_backup.sql
压缩备份文件
mysqlpump -u root -p mydatabase | gzip > mydatabase_backup.sql.gz
备份数据目录
mysqlpump --users --routines --databases db1 db2 > backup_with_users_routines.sql
使用 --users 备份用户账户,使用 --routines 备份存储函数和存储过程。
恢复数据库
解压缩备份文件
gunzip < mydatabase_backup.sql.gz | mysql -u root -p mydatabase
恢复备份
mysql -u [用户名] -p [数据库名] < [备份文件.sql]
示例
mysql -u root -p mydatabase < mydatabase_backup.sql
注意事项
- 权限管理:确保执行
mysqlpump和恢复命令的用户具有必要的数据库读写权限。 - 并发性:合理设定并发线程数,避免服务器负载过高。
- 定期备份:建议定期备份并验证备份文件的完整性。
- 存储位置:将备份文件存储在安全和可靠的位置,避免丢失或不当修改。
逻辑备份的优缺点
优点:
- 可读性强:备份文件是文本格式的SQL脚本,易于查看和编辑。
- 跨平台:备份文件可以在不同操作系统和不同版本的MySQL之间移植。
- 备份灵活:可以选择备份整个数据库、特定的表或结构。
缺点:
- 性能开销大:备份和恢复过程中会产生较大的CPU和I/O开销,特别是对于大数据量的数据库。
- 恢复速度慢:相对于物理备份,逻辑备份的恢复速度较慢。
- 一致性问题:如果没有正确使用事务一致性选项,可能会导致数据不一致。
只备份表数据扩展
/var/lib/mysql-files 是 MySQL 默认用于存储导出的文件的目录。这个目录通常用于 SELECT INTO OUTFILE 等操作所生成的文件。
mysqldump -n介绍
mysqldump是一个用于备份 MySQL 数据库的工具。-n参数让你只备份表中数据,不包括表结构。备份得到的文件是纯 SQL 语句,可以用来恢复数据。举例
场景: 有一个名为
employees的数据库,其中包含staff表。备份staff表中的数据,但不包括表结构。步骤:
进入命令行。
执行以下命令:
mysqldump -u root -p[密码] --no-create-info employees staff > staff_data_only.sql3.结果: 生成的
staff_data_only.sql文件内容:INSERT INTO `staff` (`id`, `name`, `position`, `salary`) VALUES (1, 'Alice', 'Manager', 50000); INSERT INTO `staff` (`id`, `name`, `position`, `salary`) VALUES (2, 'Bob', 'Engineer', 40000); INSERT INTO `staff` (`id`, `name`, `position`, `salary`) VALUES (3, 'Charlie', 'Technician', 30000);恢复:
- 在新环境中,确保已存在相同结构的
staff表。- 进入 MySQL 客户端,执行:
source /path/to/staff_data_only.sql;
SELECT INTO OUTFILE介绍
SELECT INTO OUTFILE是一条SQL语句,用于将查询结果导出到文件中。文件格式可以根据需要来定义(如CSV格式,也可以是xlsx结尾的格式),通常用于数据分析和传输。举例
1.场景: 有一个名为
employees的数据库,其中包含staff表。导出staff表中的数据作为CSV文件来分析。2.步骤:
进入 MySQL 客户端。
执行以下 SQL 语句:
SELECT * FROM staff INTO OUTFILE '/var/lib/mysql-files/staff_data.csv' FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n';命令解读(也可以使用默认,后面就不用那么多指定要求语句了): -- 从 staff 表中选择所有列和行 SELECT * FROM staff -- 将查询结果写入指定路径的文件中 INTO OUTFILE '/var/lib/mysql-files/staff_data.csv'-- 每个字段(列)的数据使用逗号分隔 FIELDS TERMINATED BY ',' -- 每个字段的值都用双引号包围 ENCLOSED BY '"'-- 每行记录之间以换行符分隔 LINES TERMINATED BY '\n';3.结果: 生成的
staff_data.csv文件内容:"1","Alice","Manager","50000""2","Bob","Engineer","40000""3","Charlie","Technician","30000"恢复:
- 在新环境中,确保已存在相同结构的
staff表。- 复制
staff_data.csv文件到服务器。- 使用以下 SQL 语句导入数据:
LOAD DATA INFILE '/var/lib/mysql-files/staff_data.csv'INTO TABLE staffFIELDS TERMINATED BY ',' ENCLOSED BY '"'LINES TERMINATED BY '\n';
总结
用途不同:
mysqldump -n主要用于备份和恢复 MySQL 数据库数据。生成 SQL 文件,便于在需要时恢复数据。SELECT INTO OUTFILE主要用于数据导出用于分析或传输。生成的文件格式如CSV,可用Excel等工具打开。恢复指定表:
mysqldump -n恢复数据更简单,直接源文件加载到MySQL中即可。SELECT INTO OUTFILE导出的文件格式灵活,但需要额外步骤导入数据(如使用LOAD DATA INFILE)。便捷性和灵活性:
mysqldump -n适用于跨平台环境,恢复数据库较为便捷。SELECT INTO OUTFILE适用于导出数据进行外部分析,格式灵活但操作稍复杂。
相关文章:
MySQL逻辑备份
目录 一.mysqldump 基本命令: 参数选项: 示例 备份整个数据库 备份多个数据库 备份所有数据库 仅备份数据库结构 仅备份特定表 添加选项以有效处理锁表问题 恢复数据 恢复数据库 恢复库中的表 使用source恢复 注意事项 二. mysqlpu…...
python 获取网页链接图片
python 获取 网页图片 在Python中,可以使用requests库获取网页内容,再使用BeautifulSoup解析网页,提取图片链接,最后保存图片到本地。以下是一个简单的例子: import requests from bs4 import BeautifulSoup import o…...
Leetcode 力扣114. 二叉树展开为链表 (抖音号:708231408)
给你二叉树的根结点 root ,请你将它展开为一个单链表: 展开后的单链表应该同样使用 TreeNode ,其中 right 子指针指向链表中下一个结点,而左子指针始终为 null 。展开后的单链表应该与二叉树 先序遍历 顺序相同。 示例 1…...
文刻ai工具跟绘唐AI工具有什么区别
文刻AI工具和绘唐AI工具是两种不同的人工智能工具。点击查看 文刻AI工具是一种自然语言处理工具,可以用于生成、修改和校对文本。它可以帮助用户更高效地写作,提供词汇和语法建议,检查拼写和语法错误,并提供自动补全和自动纠正功…...
手写kNN算法的实现-用欧几里德空间来度量距离
kNN的算法思路:找K个离预测点最近的点,然后让它们进行投票决定预测点的类型。 step 1: kNN存储样本点的特征数据和标签数据step 2: 计算预测点到所有样本点的距离,关于这个距离,我们用欧几里德距离来度量(其实还有很多…...
IGraph使用实例——线性代数计算(blas)
1 概述 在图论中,BLAS(Basic Linear Algebra Subprograms)并不直接应用于图论的计算,而是作为一套线性代数计算中通用的基本运算操作函数集合,用于进行向量和矩阵的基本运算。然而,这些基本运算在图论的相…...
【MySQL】(基础篇五) —— 排序检索数据
排序检索数据 本章将讲授如何使用SELECT语句的ORDER BY子句,根据需要排序检索出的数据。 排序数据 还是使用上一节中的例子,查询employees表中的last_name字段 SELECT last_name FROM employees;输出结果: 发现其输出并没有特定的顺序。其实…...
C++ C_style string overview and basic Input funcitons
write in advance 最近在做题,遇到一个简单的将console的输入输出到文件中的简单题目,没有写出来。悔恨当初没有踏实地总结string 相关的 I/O 以及与文件的操作。这篇文章旨在记录基础的字符I/O, 简单常用的文件I/O操作函数。 当然,你会说C…...
VS2022+Qt雕刻机单片机马达串口上位机控制系统
程序示例精选 VS2022Qt雕刻机单片机马达串口上位机控制系统 如需安装运行环境或远程调试,见文章底部个人QQ名片,由专业技术人员远程协助! 前言 这篇博客针对《VS2022Qt雕刻机单片机马达串口上位机控制系统》编写代码,代码整洁&a…...
Android Ble低功耗蓝牙开发
一、新建项目 在Android Studio中新建一个项目,如下图所示: 选择No Activity,然后点击Next 点击Finish,完成项目创建。 1、配置build.gradle 在android{}闭包中添加viewBinding,用于获取控件 buildFeatures {viewB…...
Visual Studio的快捷按键
Visual Studio的快捷按键对于提高编程效率至关重要。以下是一些常用的Visual Studio快捷按键,并按照功能进行分类和归纳: 1. 文件操作 Ctrl O:打开文件Ctrl S:保存文件Ctrl Shift S:全部保存Ctrl N:…...
【WEB系列】过滤器Filter
Filter,过滤器,属于Servlet规范,并不是Spring独有的。其作用从命名上也可以看出一二,拦截一个请求,做一些业务逻辑操作,然后可以决定请求是否可以继续往下分发,落到其他的Filter或者对应的Servl…...
[书生·浦语大模型实战营]——LMDeploy 量化部署 LLM 实践
1.基础作业 1.1配置 LMDeploy 运行环境 创建开发机 创建新的开发机,选择镜像Cuda12.2-conda;选择10% A100*1GPU;点击“立即创建”。注意请不要选择Cuda11.7-conda的镜像,新版本的lmdeploy会出现兼容性问题。其他和之前一样&…...
TiDB-从0到1-配置篇
TiDB从0到1系列 TiDB-从0到1-体系结构TiDB-从0到1-分布式存储TiDB-从0到1-分布式事务TiDB-从0到1-MVCCTiDB-从0到1-部署篇TiDB-从0到1-配置篇 一、系统配置 TiDB的配置分为系统配置和集群配置两种。 其中系统配置对应TiDB Server(不包含TiKV和PD的参数࿰…...
微信小程序按钮设计与交互:打造极致用户体验
微信小程序作为一种流行的应用形式,其界面设计和交互体验对于用户吸引力和留存率至关重要。其中,按钮作为用户与小程序进行交互的主要方式之一,其设计和实现直接影响到用户体验的质量。在本文中,我们将探讨微信小程序按钮的设计与…...
ES6中如何使用class和extends关键字实现继承?
在ES6中,可以使用class关键字来定义类,使用extends关键字来实现继承。下面是一个示例: // 父类 class Parent {constructor(name) {this.name name;}sayHello() {console.log(Hello, my name is ${this.name});} }// 子类 class Child ex…...
Linux:基本指令
文章目录 ls指令pwd指令cd指令touch指令mkdir指令rmdir指令 && rm指令cp指令man指令echo指令输出重定向追加重定向 cat指令输入重定向 mv指令which指令alias指令more && less指令head && tail指令事件相关的指令date显示时间戳 cal指令find指令grep指令…...
商业C++静态代码检测工具PC-lint Plus 、 polysace和sonarqube对比
商业C静态代码检测工具PC-lint Plus 、 polysace和sonarqube对比 特性/工具PC-lint PlusPolyspaceSonarQube主要功能高精度静态代码分析、编码标准检查高级静态分析和形式验证、优化嵌入式系统综合性代码质量管理、静态分析、技术债务管理集成方式可集成到IDE和构建系统与开发…...
邬家桥公园
文|随意的风 原文地址 我游览过现存规模最大、保存最完整的皇家园林颐和园,瞻仰过拥有世界上最大祭天建筑群的天坛公园,那都是多年前的事情了。 邬家桥公园相比颐和园、天坛公园,气势雄伟倒谈不上。它没有西湖的水平如镜ÿ…...
Flutter 中的 RenderObjectToWidgetAdapter 小部件:全面指南
Flutter 中的 RenderObjectToWidgetAdapter 小部件:全面指南 Flutter 是一个功能强大的 UI 框架,由 Google 开发,允许开发者使用 Dart 语言构建跨平台的移动、Web 和桌面应用。在 Flutter 的渲染体系中,RenderObjectToWidgetAdap…...
Chapter03-Authentication vulnerabilities
文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...
Frozen-Flask :将 Flask 应用“冻结”为静态文件
Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是:将一个 Flask Web 应用生成成纯静态 HTML 文件,从而可以部署到静态网站托管服务上,如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...
基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解
JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用,结合SQLite数据库实现联系人管理功能,并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能,同时可以最小化到系统…...
基于Java+MySQL实现(GUI)客户管理系统
客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息,对客户进行统一管理,可以把所有客户信息录入系统,进行维护和统计功能。可通过文件的方式保存相关录入数据,对…...
Kubernetes 网络模型深度解析:Pod IP 与 Service 的负载均衡机制,Service到底是什么?
Pod IP 的本质与特性 Pod IP 的定位 纯端点地址:Pod IP 是分配给 Pod 网络命名空间的真实 IP 地址(如 10.244.1.2)无特殊名称:在 Kubernetes 中,它通常被称为 “Pod IP” 或 “容器 IP”生命周期:与 Pod …...
零知开源——STM32F103RBT6驱动 ICM20948 九轴传感器及 vofa + 上位机可视化教程
STM32F1 本教程使用零知标准板(STM32F103RBT6)通过I2C驱动ICM20948九轴传感器,实现姿态解算,并通过串口将数据实时发送至VOFA上位机进行3D可视化。代码基于开源库修改优化,适合嵌入式及物联网开发者。在基础驱动上新增…...
前端高频面试题2:浏览器/计算机网络
本专栏相关链接 前端高频面试题1:HTML/CSS 前端高频面试题2:浏览器/计算机网络 前端高频面试题3:JavaScript 1.什么是强缓存、协商缓存? 强缓存: 当浏览器请求资源时,首先检查本地缓存是否命中。如果命…...
Monorepo架构: Nx Cloud 扩展能力与缓存加速
借助 Nx Cloud 实现项目协同与加速构建 1 ) 缓存工作原理分析 在了解了本地缓存和远程缓存之后,我们来探究缓存是如何工作的。以计算文件的哈希串为例,若后续运行任务时文件哈希串未变,系统会直接使用对应的输出和制品文件。 2 …...
uni-app学习笔记三十五--扩展组件的安装和使用
由于内置组件不能满足日常开发需要,uniapp官方也提供了众多的扩展组件供我们使用。由于不是内置组件,需要安装才能使用。 一、安装扩展插件 安装方法: 1.访问uniapp官方文档组件部分:组件使用的入门教程 | uni-app官网 点击左侧…...
aardio 自动识别验证码输入
技术尝试 上周在发学习日志时有网友提议“在网页上识别验证码”,于是尝试整合图像识别与网页自动化技术,完成了这套模拟登录流程。核心思路是:截图验证码→OCR识别→自动填充表单→提交并验证结果。 代码在这里 import soImage; import we…...
