百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

MySQL的备份与恢复 mysql数据库的备份与恢复的常用方法

bigegpt 2024-10-24 09:00 10 浏览

数据库备份类型:

· 冷备份:在数据库关闭状态下进行备份操作

· 热备份:在数据库处于运行状态时进行备份操作

· 温备份:数据库锁定表格(不可写入但可读取)的状态下进行备份操作


数据库完全备份操作

1. 物理冷备份与恢复 使用tar命令

1)备份数据库

[root@localhost /]# systemctl stop mysqld

[root@localhost /]# mkdir /backup

[root@localhost /]# tar zcf /backup/mysql_all-$(date +%F).tar.gz /usr/local/mysql/data/

tar: 从成员名中删除开头的"/"

· /usr/local/mysql/data/:mysql的数据库文件夹

[root@localhost /]# ls -l /backup/

总用量 724

-rw-r--r--. 1 root root 741318 8月 10 08:29 mysql_all-2020-08-10.tar.gz

2) 恢复数据库

执行以下操作将数据库文件夹移除到bak目录,模拟丢失文件故障

[root@localhost /]# mkdir /bak

[root@localhost /]# mv /usr/local/mysql/data/ /bak/

执行以下操作从备份文件恢复数据

[root@localhost /]# mkdir /restore

[root@localhost /]# tar zxf /backup/mysql_all-2020-08-10.tar.gz -C /restore/

[root@localhost /]# mv /restore/usr/local/mysql/data/ /usr/local/mysql/

[root@localhost /]# systemctl start mysqld

[root@localhost /]# netstat -anput |grep 3306

tcp6 0 0 :::3306 :::* LISTEN 3970/mysqld

2. mysqldump备份与恢复

通过此命令可以将指定的库,表或全部的库导出为SQL脚本,便于该命令在不同版本的MySQL服务器上使用。例如,当需要升级mysql服务器时,可以先使用mysqldump命令将原有库信息导出,然后直接在升级后的MySQL服务器导入即可。

[root@localhost /]# mysqladmin -u root -p password '123456'

1) 备份数据库

格式一:将mysql库中的user表导出为mysql-user.sql

[root@localhost /]# mysqldump -u root -p mysql user > mysql-user.sql

Enter password: 输入密码

格式二:将整个test库导出为test.sql尾巴文件,所有操作均以root用户身份验证

[root@localhost /]# mysqldump -u root -p --databases test > test.sql

Enter password:

格式三:备份导出整个MySQL服务器中的库。使用—opt优化执行速度

[root@localhost /]# mysqldump -u root -p --opt --all-databases > all-data.sql

Enter password:


2) 查看备份文件

[root@localhost /]# grep -v "^–" 备份完成的名称


3) 恢复数据库

使用sqldump命令导出的SQL备份脚本,在恢复时通过mysql命令对其进行导入操作。

格式:mysql 【选项】【库名】【表名】< /备份路径/备份文件名


模拟故障:删除上述三个备份的原文件,使用dump导入恢复。

mysql> drop table user;

Query OK, 0 rows affected (0.00 sec)


[root@localhost /]# mysql -u root -p mysql < /mysql-user.sql

Enter password:

备份的文件

数据库


查询是否恢复

mysql> show tables;

+---------------------------+

| Tables_in_mysql |

+---------------------------+ |

………

| user |

+---------------------------+

28 rows in set (0.00 sec)


模拟故障:删除test数据库,再导入恢复。

mysql> drop database test;

Query OK, 0 rows affected (0.01 sec)

导入备份数据恢复


3. MySQL的增量备份与恢复(重点)


增量备份没有重要数据,备份量不大,时间短;但恢复及其麻烦,需要上次完全备份+之后所有的增量备份才能恢复,需要对所有增量备份进行逐个反推恢复。Mysql没有提供直接的增量备份办法,可以通过mysql提供的二进制日志间接实现增量备份。

Mysql的增量备份需要开启二进制功能。

[root@localhost /]# vim /etc/my.cnf

log-bin=/usr/local/mysql/mysql-bin 添加

[root@localhost /]# systemctl restart mysqld

[root@localhost /]# ls -l /usr/local/mysql/mysql-bin.*

-rw-rw----. 1 mysql mysql 120 8月 10 09:43 /usr/local/mysql/mysql-bin.000001

-rw-rw----. 1 mysql mysql 34 8月 10 09:43 /usr/local/mysql/mysql-bin.index


MySQL企业备份案例

1、 一般恢复

1) 添加数据库、表、录入信息

mysql> create database local;

mysql> use local;

Database changed

mysql> create table test(id int);

Query OK, 0 rows affected (0.00 sec)


mysql> insert into test values(1);

Query OK, 1 row affected (0.00 sec)


mysql> insert into test values(2);

Query OK, 1 row affected (0.01 sec)


2) 先进行一次完全备份

[root@localhost ~]# mkdir /mysql_back

[root@localhost ~]# mysqldump -uroot -p local test >/mysql_back/local_test-$(date +%F).sql

Enter password:

[root@localhost ~]# ls /mysql_back/

local_test-2020-08-10.sql

[root@localhost ~]# mysqladmin -uroot -p flush-logs 生产新的二进制文件

Enter password:

[root@localhost ~]# ls -l /usr/local/mysql/mysql-bin.*

-rw-rw----. 1 mysql mysql 894 8月 10 10:03 /usr/local/mysql/mysql-bin.000001

-rw-rw----. 1 mysql mysql 120 8月 10 10:03 /usr/local/mysql/mysql-bin.000002

-rw-rw----. 1 mysql mysql 68 8月 10 10:03 /usr/local/mysql/mysql-bin.index


3) 继续录入新的数据并进行增量备份

mysql> insert into test values(3);

Query OK, 1 row affected (0.01 sec)


mysql> insert into test values(4);

Query OK, 1 row affected (0.00 sec)


[root@localhost ~]# mysqladmin -uroot -p flush-logs

Enter password:

[root@localhost ~]# ls -l /usr/local/mysql/mysql-bin.*

-rw-rw----. 1 mysql mysql 894 8月 10 10:03 /usr/local/mysql/mysql-bin.000001

-rw-rw----. 1 mysql mysql 595 8月 10 10:06 /usr/local/mysql/mysql-bin.000002

-rw-rw----. 1 mysql mysql 120 8月 10 10:06 /usr/local/mysql/mysql-bin.000003

-rw-rw----. 1 mysql mysql 102 8月 10 10:06 /usr/local/mysql/mysql-bin.index

[root@localhost ~]# cp /usr/local/mysql/mysql-bin.000002 /mysql_back/

如此00003就保留插入2个数据的操作。


4) 模拟误操作删除test表

[root@localhost ~]# mysql -uroot -p -e 'drop table local.test;' 删除

Enter password:

[root@localhost ~]# mysql -uroot -p -e 'select * from local.test;' 查询

Enter password:

ERROR 1146 (42S02) at line 1: Table 'local.test' doesn't exist


5) 恢复操作

在执行恢复操作时,需要先恢复完全备份,然后恢复增量备份。

[root@localhost mysql_back]# mysql -uroot -p local </mysql_back/local_test-2020-08-10.sql

Enter password:

[root@localhost mysql_back]# mysql -uroot -p -e ' select * from local.test;'

Enter password:

+------+

| id |

+------+

| 1 |

| 2 |

+------+ 注意:缺少3.4数据使用增量备份恢复

[root@localhost mysql_back]# mysqlbinlog --no-defaults /mysql_back/mysql-bin.000002 | mysql -u root -p

Enter password:

[root@localhost mysql_back]# mysql -uroot -p -e ' select * from local.test;'

Enter password:

+------+

| id |

+------+

| 1 |

| 2 |

| 3 |

| 4 |

+------+


2、 给予位置恢复

由于前面做过备份操作,接下来直接进行模拟故障与数据恢复的操作。

+------+

[root@localhost mysql_back]# mysql -uroot -p -e 'drop table local.test;'

Enter password: //模拟误操作删除test表

[root@localhost mysql_back]# mysql -uroot -p -e 'select * from local.test;'

Enter password: //查看test表是否存在

ERROR 1146 (42S02) at line 1: Table 'local.test' doesn't exist

[root@localhost mysql_back]# mysql -uroot -p local </mysql_back/local_test-2020-08-10.sql

Enter password: //恢复完全备份

想要实现基于位置或时间点恢复数据,必须先通过查看二进制日志文件确定恢复的位置或时间点。

[root@localhost /]# mysqlbinlog --no-defaults --stop-position='548' /mysql_back/mysql-bin.000002 | mysql -uroot -p

Enter password:

[root@localhost /]# mysql -uroot -p -e ' select * from local.test;'

Enter password:

+------+

| id |

+------+

| 1 |

| 2 |

| 3 |

| 3 |

| 4 |

+------+


3、 基于时间点恢复 只恢复10:05:19的数据,即不恢复4的信息

mysql> drop tables test; 删除test表

Query OK, 0 rows affected (0.00 sec)

[root@localhost ~]# mysqlbinlog --no-defaults --stop-datetime='2020-8-10 10:05:21' /mysql_back/mysql-bin.000002 | mysql -uroot -p

Enter password:

执行以上操作就是恢复在10:05:21之前的所有数据。

4、 制定企业备份策略的思路

相关推荐

得物可观测平台架构升级:基于GreptimeDB的全新监控体系实践

一、摘要在前端可观测分析场景中,需要实时观测并处理多地、多环境的运行情况,以保障Web应用和移动端的可用性与性能。传统方案往往依赖代理Agent→消息队列→流计算引擎→OLAP存储...

warm-flow新春版:网关直连和流程图重构

本期主要解决了网关直连和流程图重构,可以自此之后可支持各种复杂的网关混合、多网关直连使用。-新增Ruoyi-Vue-Plus优秀开源集成案例更新日志[feat]导入、导出和保存等新增json格式支持...

扣子空间体验报告

在数字化时代,智能工具的应用正不断拓展到我们工作和生活的各个角落。从任务规划到项目执行,再到任务管理,作者深入探讨了这款工具在不同场景下的表现和潜力。通过具体的应用实例,文章展示了扣子空间如何帮助用户...

spider-flow:开源的可视化方式定义爬虫方案

spider-flow简介spider-flow是一个爬虫平台,以可视化推拽方式定义爬取流程,无需代码即可实现一个爬虫服务。spider-flow特性支持css选择器、正则提取支持JSON/XML格式...

solon-flow 你好世界!

solon-flow是一个基础级的流处理引擎(可用于业务规则、决策处理、计算编排、流程审批等......)。提供有“开放式”驱动定制支持,像jdbc有mysql或pgsql等驱动,可...

新一代开源爬虫平台:SpiderFlow

SpiderFlow:新一代爬虫平台,以图形化方式定义爬虫流程,不写代码即可完成爬虫。-精选真开源,释放新价值。概览Spider-Flow是一个开源的、面向所有用户的Web端爬虫构建平台,它使用Ja...

通过 SQL 训练机器学习模型的引擎

关注薪资待遇的同学应该知道,机器学习相关的岗位工资普遍偏高啊。同时随着各种通用机器学习框架的出现,机器学习的门槛也在逐渐降低,训练一个简单的机器学习模型变得不那么难。但是不得不承认对于一些数据相关的工...

鼠须管输入法rime for Mac

鼠须管输入法forMac是一款十分新颖的跨平台输入法软件,全名是中州韵输入法引擎,鼠须管输入法mac版不仅仅是一个输入法,而是一个输入法算法框架。Rime的基础架构十分精良,一套算法支持了拼音、...

Go语言 1.20 版本正式发布:新版详细介绍

Go1.20简介最新的Go版本1.20在Go1.19发布六个月后发布。它的大部分更改都在工具链、运行时和库的实现中。一如既往,该版本保持了Go1的兼容性承诺。我们期望几乎所...

iOS 10平台SpriteKit新特性之Tile Maps(上)

简介苹果公司在WWDC2016大会上向人们展示了一大批新的好东西。其中之一就是SpriteKitTileEditor。这款工具易于上手,而且看起来速度特别快。在本教程中,你将了解关于TileE...

程序员简历例句—范例Java、Python、C++模板

个人简介通用简介:有良好的代码风格,通过添加注释提高代码可读性,注重代码质量,研读过XXX,XXX等多个开源项目源码从而学习增强代码的健壮性与扩展性。具备良好的代码编程习惯及文档编写能力,参与多个高...

Telerik UI for iOS Q3 2015正式发布

近日,TelerikUIforiOS正式发布了Q32015。新版本新增对XCode7、Swift2.0和iOS9的支持,同时还新增了对数轴、不连续的日期时间轴等;改进TKDataPoin...

ios使用ijkplayer+nginx进行视频直播

上两节,我们讲到使用nginx和ngixn的rtmp模块搭建直播的服务器,接着我们讲解了在Android使用ijkplayer来作为我们的视频直播播放器,整个过程中,需要注意的就是ijlplayer编...

IOS技术分享|iOS快速生成开发文档(一)

前言对于开发人员而言,文档的作用不言而喻。文档不仅可以提高软件开发效率,还能便于以后的软件开发、使用和维护。本文主要讲述Objective-C快速生成开发文档工具appledoc。简介apple...

macOS下配置VS Code C++开发环境

本文介绍在苹果macOS操作系统下,配置VisualStudioCode的C/C++开发环境的过程,本环境使用Clang/LLVM编译器和调试器。一、前置条件本文默认前置条件是,您的开发设备已...