Mysql运维篇(三) MySQL备份与恢复

2024-01-29 07:28

本文主要是介绍Mysql运维篇(三) MySQL备份与恢复,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一路走来,所有遇到的人,帮助过我的、伤害过我的都是朋友,没有一个是敌人。如有侵权,请留言,我及时删除!

一、物理备份与逻辑备份

1、物理备份:备份数据文件,转储数据库物理文件到某一目录。物理备份恢复速度比较快,但占  用空间比较大,MySQL中可以用 xtrabackup 工具来进行物理备份。

2、逻辑备份:对数据库对象利用工具进行导出工作,汇总入备份文件内。逻辑备份恢复速度慢,但占用空间小,更灵活。MySQL 中常用的逻辑备份工具为 mysqldump 。逻辑备份就是 备份sql语句 ,在恢复的时候执行备份的sql语句实现数据库数据的重现。

二、MySQL实现逻辑备份

1、备份全部数据库

基本语法:
mysqldump –u 用户名称 –h 主机名称 –p密码 待备份的数据库名称[tbname, [tbname...]]> 备份文件名称.sql

说明: 备份的文件并非一定要求后缀名为.sql,例如后缀名为.txt的文件也是可以的。
 

2、备份全部数据库

使用mysqldump备份整个实例,可以使用 --all-databases 或 -A 参数:

mysqldump -uroot -pxxxxxx --all-databases > all_database.sql
mysqldump -uroot -pxxxxxx -A > all_database.sql
示例:

[root@mysql8 backdata]# mysqldump -uroot -p --all-databases > all-databasesv2.sql

3、备份指定的数据库

使用 --databases 或 -B 参数了,该参数后面跟数据库名称,多个数据库间用空格隔开。如果指定
databases参数,备份文件中会存在创建数据库的语句,如果不指定参数,则不存在。

语法如下:
mysqldump –u user –h host –p --databases [数据库的名称1 [数据库的名称2...]] > 备份文件名
称.sql
示例:备份test数据库

[root@mysql8 backdata]# mysqldump -uroot -hlocalhost -p --databases test > test-db-v1.sql

[root@mysql8 backdata]# mysqldump -uroot -hlocalhost -p -B test > test-db-v2.sql

4、备份指定数据库的部分表
语法如下:

mysqldump –u user –h host –p 数据库的名称 [表名1 [表名2...]] > 备份文件名称.sql
示例:备份单个表

备份test数据库-my_table 表

[root@mysql8 backdata]# mysqldump -uroot -hlocalhost -p  test my_table > test-db-my_table.sql

备份多个表

[root@mysql8 backdata]# mysqldump -uroot -hlocalhost -p  test my_table sales > test-db-my_tablev1.sql

[root@mysql8 backdata]# vi  test-db-my_tablev1.sql
--------------------------------------------

5.备份单表的部分数据
有些时候一张表的数据量很大,我们只需要部分数据。这时就可以使用 --where 选项了。where后面附带需要满足的条件。
示例:备份sales表中id = '1'的数据

[root@mysql8 backdata]# mysqldump -uroot -hlocalhost -p  test sales --where="id=1" > test-salesv1.sql

6 数据库排除某些表的备份

如果我们想备份某个库,但是某些表数据量很大或者与业务关联不大,这个时候可以考虑排除掉这些表,同样的,选项 --ignore-table 可以完成这个功能。
示例:备份test数据库,备份中不包含my_table表

[root@mysql8 backdata]# mysqldump -uroot -hlocalhost -p test --ignore-table test.my_table > bknomy_tablev1.sql

7 只备份结构或只备份数据

只备份结构的话可以使用 --no-data 简写为 -d 选项;

[root@mysql8 backdata]# mysqldump -uroot -hlocalhost -p test --no-data > nodatav1.sql

只备份数据可以使用 --no-create-info 简写为-t 选项。
[root@mysql8 backdata]# mysqldump -uroot -hlocalhost -p test  --no-create-info  > nocreatev1.sql

8 备份中包含存储过程、函数、事件
mysqldump备份默认是不包含存储过程,自定义函数及事件的。可以使用 --routines 或 -R 选项来备份存储过程及函数,使用 --events 或 -E 参数来备份事件。
举例:备份整个atguigu库,包含存储过程及事件:
---后续补齐----
9 mysqldump常用选项
mysqldump 命令参数详解-腾讯云开发者社区-腾讯云

MySQL–mysqldump命令详解-CSDN博客

三、数据库逻辑恢复

数据库恢复基本语法:
mysql –u root –p [dbname] < backup.sql

1、使用备份恢复单库

使用root用户,将之前练习中备份的all.sql文件中的备份导入数据库中,命令如下:
如果备份文件中包含了创建数据库的语句,则恢复的时候不需要指定数据库名称.

示例:备份全部数据库,删除test数据库,然后使用备份恢复

[root@mysql8 backdata]#  mysqldump -uroot -p123456 --all-databases > all-databasesv3.sql

删除前 VS 删除后


使用 all-databasesv3.sql进行恢复

[root@mysql8 backdata]# mysql -u root -p123456 < all-databasesv3.sql 

2、从全量备份中恢复单库

示例:删除test数据库,从全量备份中只恢复test数据库

步骤一、删除test库并从全量备份中分离出test数据库数据信息。

将test数据库恢复信息与全量备份分离

sed -n '/^-- Current Database: `test`/,/^-- Current Database: `/p' all-databasesv3.sql > test.sql 

步骤二、使用分离的 test.sql数据信息进行数据库恢复

[root@mysql8 backdata]# mysql -uroot -p123456 < test.sql 

报错网络说是时区的问题,有待验证?

Mysqldump时区差问题_!40103 set @old_time_zone=@@time_zone-CSDN博客

https://www.cnblogs.com/mr-totoro/p/5807636.html

3、从单库备份中恢复单表

步骤一:

获取MySQL 表结构

[root@mysql8 backdata]#  cat all-databasesv3.sql | sed -e '/./{H;$!d;}' -e 'x;/CREATE TABLE `my_table`/!d;q' >my_table.sql

获取MySQL 表中的数据

[root@mysql8 backdata]# cat all-databasesv3.sql | grep --ignore-case 'insert into `my_table`' > my_table_data.sql

步骤二、使用生成的数据进行恢复

-rw-r--r-- 1 root root     431 Jan 29 01:51 my_table.sql
-rw-r--r-- 1 root root      64 Jan 29 01:51 my_table_data.sql

四、物理备份:直接复制整个数据库 (InnoDB存储引擎的表不适用)

物理恢复:直接复制到数据库目录

这篇关于Mysql运维篇(三) MySQL备份与恢复的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/656164

相关文章

Springboot中分析SQL性能的两种方式详解

《Springboot中分析SQL性能的两种方式详解》文章介绍了SQL性能分析的两种方式:MyBatis-Plus性能分析插件和p6spy框架,MyBatis-Plus插件配置简单,适用于开发和测试环... 目录SQL性能分析的两种方式:功能介绍实现方式:实现步骤:SQL性能分析的两种方式:功能介绍记录

使用 sql-research-assistant进行 SQL 数据库研究的实战指南(代码实现演示)

《使用sql-research-assistant进行SQL数据库研究的实战指南(代码实现演示)》本文介绍了sql-research-assistant工具,该工具基于LangChain框架,集... 目录技术背景介绍核心原理解析代码实现演示安装和配置项目集成LangSmith 配置(可选)启动服务应用场景

oracle DBMS_SQL.PARSE的使用方法和示例

《oracleDBMS_SQL.PARSE的使用方法和示例》DBMS_SQL是Oracle数据库中的一个强大包,用于动态构建和执行SQL语句,DBMS_SQL.PARSE过程解析SQL语句或PL/S... 目录语法示例注意事项DBMS_SQL 是 oracle 数据库中的一个强大包,它允许动态地构建和执行

SQL 中多表查询的常见连接方式详解

《SQL中多表查询的常见连接方式详解》本文介绍SQL中多表查询的常见连接方式,包括内连接(INNERJOIN)、左连接(LEFTJOIN)、右连接(RIGHTJOIN)、全外连接(FULLOUTER... 目录一、连接类型图表(ASCII 形式)二、前置代码(创建示例表)三、连接方式代码示例1. 内连接(I

在MySQL执行UPDATE语句时遇到的错误1175的解决方案

《在MySQL执行UPDATE语句时遇到的错误1175的解决方案》MySQL安全更新模式(SafeUpdateMode)限制了UPDATE和DELETE操作,要求使用WHERE子句时必须基于主键或索引... mysql 中遇到的 Error Code: 1175 是由于启用了 安全更新模式(Safe Upd

轻松上手MYSQL之JSON函数实现高效数据查询与操作

《轻松上手MYSQL之JSON函数实现高效数据查询与操作》:本文主要介绍轻松上手MYSQL之JSON函数实现高效数据查询与操作的相关资料,MySQL提供了多个JSON函数,用于处理和查询JSON数... 目录一、jsON_EXTRACT 提取指定数据二、JSON_UNQUOTE 取消双引号三、JSON_KE

MySql死锁怎么排查的方法实现

《MySql死锁怎么排查的方法实现》本文主要介绍了MySql死锁怎么排查的方法实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录前言一、死锁排查方法1. 查看死锁日志方法 1:启用死锁日志输出方法 2:检查 mysql 错误

MySQL数据库函数之JSON_EXTRACT示例代码

《MySQL数据库函数之JSON_EXTRACT示例代码》:本文主要介绍MySQL数据库函数之JSON_EXTRACT的相关资料,JSON_EXTRACT()函数用于从JSON文档中提取值,支持对... 目录前言基本语法路径表达式示例示例 1: 提取简单值示例 2: 提取嵌套值示例 3: 提取数组中的值注意

MySQL修改密码的四种实现方式

《MySQL修改密码的四种实现方式》文章主要介绍了如何使用命令行工具修改MySQL密码,包括使用`setpassword`命令和`mysqladmin`命令,此外,还详细描述了忘记密码时的处理方法,包... 目录mysql修改密码四种方式一、set password命令二、使用mysqladmin三、修改u

查询SQL Server数据库服务器IP地址的多种有效方法

《查询SQLServer数据库服务器IP地址的多种有效方法》作为数据库管理员或开发人员,了解如何查询SQLServer数据库服务器的IP地址是一项重要技能,本文将介绍几种简单而有效的方法,帮助你轻松... 目录使用T-SQL查询方法1:使用系统函数方法2:使用系统视图使用SQL Server Configu