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存储引擎的表不适用)

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

相关推荐
深盾科技_Virbox16 分钟前
软件授权工具静默安装实践
java·运维·数据库·安全·软件需求
延凡科技44 分钟前
延凡科技综合监控预警处置平台—— 一体化视频AI安防闭环系统设计与功能实现[特殊字符]️
数据库·人工智能·科技·安全·能源
老马聊技术1 小时前
Rocky Linux 9.0 安装 MySQL8.x详细教程
linux·数据库
醇氧1 小时前
主流 Agent 开发框架全解析(2026 最新)
大数据·数据库·人工智能·开源
吴声子夜歌1 小时前
Redis 6.x——整合SpringBoot
数据库·spring boot·redis
ATA88881 小时前
AI辅助生成SQL实战从连接配置到执行计划优化的完整技术流程
数据库·人工智能·智能问数
咏方舟【长江支流】1 小时前
【开源】跨语言·跨平台·跨数据库(4) ——用宝框架 ORM 数据源适配器
数据库·开源·ai编程·orm·咏方舟-长江支流·用宝框架·用宝框架orm
JZC_xiaozhong1 小时前
OA调价审批后,采购调价单如何自动同步到ERP?解决漏录错价难题
大数据·linux·服务器·前端·数据库·数据孤岛解决方案·数据集成与应用集成
渣渣灰飞2 小时前
MySQL 系统学习 第五阶段:企业级 MySQL 实战开发 第一章:企业数据库设计规范
数据库·学习·mysql