【MySQL】4.MySQL日志管理与数据库的备份和恢复

备份的目的只要是为了灾难恢复,备份还可以测试应用,回滚数据,修改和查询历史数据,审计等

日志在备份、恢复中起着重要作用

一、数据库备份的重要性

在生产环境中,数据的安全性至关重要
任何数据丢失都可能产生严重的后果

造成数据丢失的原因有:
程序错误
人为操作错误
运算错误
磁盘错误
灾难(如火灾、地震)和盗窃

容灾

二、数据库备份的分类

数据库备份可以分为物理备份逻辑备份

1.物理备份:

对数据库操作系统的物理文件(如:数据文件、日志文件等)进行备份;适用于在出现问题的时候需要快速恢复的大型重要数据库

物理备份又分为:

冷备份(脱机备份):需要关闭数据库才能进行tar打包备份

热备份(联机备份):数据库处于运行状态,依赖于数据库的日志文件(mysqlhotcopy mysqlbackup)

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

2.逻辑备份:

逻辑备份是对数据库逻辑组件的备份,表示为逻辑数据库结构;这种类型的备份适用于可以编辑数据值或表结构

从数据库的备份策略来看,逻辑备份又分为完全备份、差异备份和增量备份

①完全备份

每次都对整个数据库进行完整的备份(包括数据库结构和文件结构);
缺点:有大量重复数据,占用磁盘空间最大;
优点:结构完整,恢复时速度快,直接把文件导入即可;

②差异备份

备份自从上次完全备份之后修改过的文件;后续的差异备份都会备份前面差异备份的内容,导致出现重复的数据,占用额外的磁盘空间;恢复时会先恢复完全备份,再导入最后一次差异备份的数据即可;

③增量备份

只有在上次完全备份或者增量备份后 被修改的数据(或文件)才会被备份;不会出现重复数据(导致额外占用磁盘空间);恢复时要先恢复完全备份,再按次序恢复增量备份

备份方式的比较
备份方式          完全备份            差异备份      增量备份
完全备份时的状态  表1、表2             表1、表2      表1、表2
第1次添加内容     创建表3              创建表3       创建表3
备份内容          表1、表2、表3        表3           表3
第2次添加内容     创建表4              创建表4       创建表4
备份内容          表1、表2、表3、表4   表3、表4      表4
逻辑备份的策略

逻辑备份策略的选择(频率)

一周一次进行完全备份,全备的时间需要再不提供业务或访问量少的时间区间进行,例:PM 10:00 到AM 5:00(看你公司情况)
增量备份:3天/2天/1天 一次增量备份
差异备份:选择特定的场景进行备份(比较少用到)

通过配置NFS可以提供额外的空间给mysql服务器使用;NFS严格上说不算是共享存储,知识共享了文件;

三、常见的备份方法

1.物理冷备

备份时,数据库要处于关闭状态,直接打包数据库文件;备份速度快,恢复也简单

2.专用备份工具mysqldump和mysqlhotcopy

mysqldump常用的逻辑备份工具;mysqlhotcopy仅拥有备份MyISAM和ARCHIVE表

3.启用二进制日志进行增量备份

进行增量备份时,需要刷新二进制文件

4.第三方工具备份

Navicat、免费的MySQL热备份软件Percona XtraBackup

四、数据库完全备份分类

是对整个数据库、数据库结构和文件结构的备份;保存的是备份完成时刻的数据库;是差异备份和增量备份的基础
优点:备份和恢复操作简单方便
缺点:数据大量重复,占用额外的磁盘空间,备份与恢复时等待时间长

物理冷备与恢复

关闭MySQL数据库
使用tar命令打包数据库文件夹
恢复:直接替换现有MySQL目录即可

mysqldump备份与回复

MySQL自带的备份工具,可以方便实现对MySQL的备份
可以见指定的库、表导出为SQL脚本文件
恢复:使用命令导入备份的数据

实验

环境准备

建库、建表,插入数据;

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| test               |
+--------------------+
6 rows in set (0.00 sec)mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| test           |
| test1          |
+----------------+
2 rows in set (0.00 sec)mysql> select * from test;
+------+----------+-------+--------------+
| id   | name     | score | address      |
+------+----------+-------+--------------+
| 0001 | zhangsan |   100 | 地址不详     |
| 0002 | lisi     |    85 | bijing       |
| 0003 | wangwu   |    91 | 地球村       |
| 0004 | laoliu   |    75 | nanjing      |
+------+----------+-------+--------------+
4 rows in set (0.00 sec)mysql> select * from test1;
+------+----------+-------+-------+
| id   | name     | score | phone |
+------+----------+-------+-------+
| 0001 | zhangsan | 82.50 |   111 |
| 0002 | lisi     | 85.00 |   222 |
| 0003 | wangwu   | 91.00 |   333 |
+------+----------+-------+-------+
3 rows in set (0.00 sec)mysql> 

mysql完全备份与恢复

1.物理冷备与恢复

第一步关闭mysqld

tar zxvf 直接备份指定路径的文件,不包括路径tar jxvf
按路径备份,会将整个路劲备份下来,但不会备份路径中其他的数据
第一种 zxvf

冷备

#关闭mysqld
systemctl stop mysqld
#
[root@test2 mysql]# cd /usr/local/mysql/
[root@test2 mysql]# tar zcvf data.tar.gz data/ -C /opt/mysql.bak/

恢复

 
第二种 jxvf
关闭mysql,安装 xz 压缩
systemctl stop mysqld
yum -y install xz

压缩备份
tar jcvf /opt/mysql_data_$(date +%F).tar.xz /usr/local/mysql/data/#j    表示按路径备份(打包)数据

解压恢复
[root@test2 ~]# tar jxvf /opt/mysql_data_.tar.xz -C /usr/local/mysql/[root@test2 ~]# cd /usr/local/mysql/[root@test2 mysql]# mv usr/local/mysql/data /usr/local/mysql/

2.mysqldump备份与恢复

完全备份

建库、建表,插入数据
create database school;
use school;
create table class (id int(4) zerofill not null,name char(10),score decimal(5,2),address varchar(80));
insert into class values (1,'yiyi',78,'shanghai');
insert into class values (2,'lizi',92,'henan');
insert into class values (3,'monor',88,'nanjing');
select * from class;完成后,quit退出MySQL

完全备份一个或多个完整的库(包括其中所有的表)
备份多个表
mysqldump -u用户名 -p密码 --databases 库1 库2 > 备份路径/备份文件名.sql

例:

[root@test2 ~]# mysqldump -uroot -p123456 --databases school test > /opt/mysql.bak/school.test_$(date +%F).sql备份成功后可以通过 vim 来查看备份表的内容
[root@test2 ~]# vim /opt/mysql.bak/school.test_2024-03-25.sql

删除数据库

备份恢复
[root@test2 ~]# mysql -uroot -p123456 < /opt/mysql.bak/school.test_2024-03-25.sql 
mysql: [Warning] Using a password on the command line interface can be insecure.

查看数据库和表

使用 -e 可以在bash环境中使用sql语句;

ps:报错
[root@test2 data]# mysql -uroot -p123456 < /opt/mysql.bak/school.test_2024-03-25.sql 
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 1030 (HY000) at line 66: Got error 168 from storage engine1.检查mysql用户是否有数据目录的读写权限
2.或导入的数据库引擎不匹配(把报错行下的引擎改为InnoDB或MyISAM试试)另一种情况
df -h看一下磁盘空间是否有余,
若是不足的话        show variables like '%log';    查看general_log状态
关闭日志记录模式    set global general_log = OFF
清理日志            echo "" > mysql.log
再开启日志          set global general_log = OFF

完全备份MySQL服务器中所有库
mysqldump -u用户名 -p密码 --all-databases > /备份路径/备份文件名.sql

mysqldump -uroot -p123456 --all-databases > /opt/mysql.bak/all.$(date +%F).sql

完全备份指定库中的部份表
mysqldump -u用户名 -p密码 库名 表名1 表名2 > 备份路径/备份文件名.sql

例:

mysqldump -uroot -p123456 test test class > /opt/mysql.bak/table.test.class.$(date +%F).sql

保存数据库的表结构
#使用"-d"或"-t"选项,表示只保存数据库的表结构
#不使用"-d"或"-t"选项,说明表数据也要进行备份
#可以用来当作一个表结构模板
查看备份文件
grep -v "^--" 备份文件名| grep -v "^/" | grep -v "^$"#-v "^$"    表示非空行

例:

grep -v "^--" /opt/mysql.bak/school.test_2024-03-25.sql| grep -v "^/" | grep -v "^$"

mysql完全恢复(有问题,搞不懂,重做)

恢复数据库

1.使用mysqldump导出的文件,可导入的方法有:

source命令
mysql命令

2.使用source 恢复数据库的步骤

登录mysql数据库

执行source备份sql脚本的路径

3.source 恢复的示例

MySQL [(none)]> source /backup/all-data.sql

使用 source 命令恢复数据

1.模拟数据库出现问题
[root@server1 backup]# mysql -uroot -pabc123 登录数据库
mysql> show databases;  查看数据库信息
mysql> drop database school;  删除数据库school
mysql> show databases; 
2.应用实例

创建备份(对表进行备份)

备份表
mysqldump -uroot -p12356 school class > /opt/mysql.bak/class.sql删除表(模拟故障)
mysql -uroot -p123456恢复表
mysq 
mysql> select * from info;  查询所有字段
mysql> show tables; 查看表信息
或免交互l> source /opt/info.sql  
mysql -uroot -p123123 -e 'show tables from school;'
3.方式二:
#恢复class表
mysql -uroot -p123456 school < /opt/mysql.bak/school.class.sql
#查看class表
mysql -uroot -p123456 school -e 'show tables from school;'

PS:mysqldump 严格来说属于温备份,会需要对表进行写入的锁定
在全量备份与恢复实验中,假设现有school库,school库中有一个class表,需要注意的一点为:
① 当备份时加 --databases ,表示针对于school库
#备份命令
mysqldump -uroot -p123456 --databases school > /opt/mysql.bak/school.01.sql 备份库后
#恢复命令过程为:
mysql -uroot -p123456
drop database school;
exit
mysql -uroot -p12356 < /opt/mysql.bak/school.01.sql
② 当备份时不加 --databases,表示针对test库下的所有表
#备份命令
mysqldump -uroot -p123456 test > /opt/mysql.bak/test.02.sql
#恢复过程:
mysql -uroot -p123456
drop database test;
create database test;
exit
mysql -uroot -p123456 test < /opt/mysql.bak/test.02.sql 

#查看school.01.sql 和test.02.sql 
主要原因在于两种方式的备份(前者会从"create databases"开始,而后者则全是针对表格进行操作) 

4.自动化备份
0 1 * * 6 /usr/local/mysql/data/ mysqldump -uroot -p123456 库1 库2 > ./备份命$(date +%Y%m%d).sql ;/usr/local/mysql/bin/mysqladmin -u root -p flush-logs

MySQL 增量备份与恢复

一、增备实验

1.开启二进制日志功能

二进制日志(binlog)有3种不同的记录格式:

STATEMENT (基于SQL语句)、ROW(基于行)、MIXED(混合模式),默认格式是STATEMENT

[root@test2 ~]# vim /etc/my.cnf
[mysqld]
log-bin=mysql-bin
#可选,指定二进制日志(binlog)的记录格式为MIXED(混合输入)
binlog_format = MIXED
#可加可不加该命令
server-id = 1
①statement(基于sql语句):

每一条涉及到被修改的sql都会记录在binlog中;
缺点:日志量大;如:sleep()函数,主从复制等架构记录日志时会出现问题
总结:增删改查通过sql语句来实现记录,高并发时会出错(有时间差异和延迟),记录的数据不一定会按顺序记录;准确率低

②row(基于行)

只记录变动的记录,不记录sql的上下文环境
缺点:如遇到update、set、wehere true那么binlog的数据量会越来越大
总结:update、delete等以多行数据起作用,被记录下来时;只会记录变动的记录,不记录sql的上下文环境;比如sql语句记录一行,但是row就很可能记录10行,准确性高;但高并发时由于操作量大,所有记录都被记录下来,性能会变低

③mixde 混合;推荐使用

一般的语句使用statement ,函数使用row方式存储

systemctl restart mysqld

2.查看二进制文件

cp /usr/local/mysql/data/mysql-bin.000002 /opt/

mysqlbinlog --no-defaults --base64-output=decode-rows -v /opt/mysql-bin.000002

#--base64-output=decode-rows:使用64位编码机制去解码(decode)并按行读取(rows)
#-v: 显示详细内容
#--no-defaults : 默认字符集(不加会报UTF-8的错误)
PS: 可以将解码后的文件导出为txt格式,方便查阅
mysqlbinlog --no-defaults --base64-output=decode-rows -v /opt/mysql-bin.000002 > /opt/mysql-bin.000002

二进制日志中需要关注的部分

开始的位置点    at
结束的位置点    end_log_pos
时间戳          210712 11:50:30
SQL语句

2.进行完全备份

增量备份是基于完全备份的,所以需要先完全备份一次数据库

mysqldump -uroot -p school class > /opt/school.class.$(date +%F).sql
mysqldump -uroot -p123456 school > /opt/school.all.$(date +%F).sql

3.可每天进行增量备份操作,生成新的二进制日志文件002

mysqladmin -uroot -p123456 flush-logs

4.插入新数据,模拟数据的增加或变更

ps:在第一次完全备份之后刷新二进制文件,在第二个二进制文件中记载着“增量备份的数据”

建库、建表、添加数据

5.再次生成新的二进制日志文件003

mysqladmin -uroot -p123456 flush-logs

#之前的步骤4的数据库操作会保存到mysql-bin.000002文件中,之后我们测试删除ky13库的操作会保存在mysql-bin.000003文件中 (以免当我们基于mysql-bin.000002日志进行恢复时,依然会删除库)

MySQL增量恢复

一、一般恢复

1、模拟丢失更改的数据库的就恢复步骤(直接使用恢复即可)


 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/287977.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

详解U-Net分割网络,提供详细代码技术细节及完整项目代码

一. 原始模型整体概述 U-Net网络是Ronneberger等人在2015年发表于计算机医学影像顶刊 MICCAI上的一篇论文&#xff0c;该论文首次提出了一种U型结构来进行图像的语义分割&#xff0c;论文的下载链接如下&#xff1a;U-Net: Convolutional Networks for Biomedical Image Segme…

高中数学:抽象函数难点突破(拔高)

例题1 只证明前3个小题&#xff0c;4,5比较简单&#xff0c;不给与证明 这里&#xff0c;第3小题&#xff0c;难度最高 例题2 证明单调性的方法&#xff1a; 1、观察图像法&#xff1a;前提有具体解析式&#xff0c;且能画出图像 2、导数法&#xff1a;高三才学&#xff0c;且…

python和Vue开发的RBAC用户角色权限管理系统

后端框架&#xff1a;python的FastAPI作为后端服务和python-jose作为JWT认证 前端框架&#xff1a;Vue3构建页面和Vue Router作为路由管理&#xff0c;Pinia作为数据存储&#xff0c;Vite作为打包工具 可以实现菜单控制和路由控制&#xff0c;页面里面有按钮权限控制&#xf…

信息化平台管理系统智能引擎,互联网企业转型升级的新篇章-亿发

企业管理系统一直在伴随着中国互联网企业的发展而不断进步。过去&#xff0c;企业管理主要依赖于传统的表格和图表记录&#xff0c;但随着互联网企业的崛起&#xff0c;他们开始尝试自己开发简易的管理系统以满足业务需求。随着企业规模和业务复杂度的增加&#xff0c;互联网企…

【分享贴】多项目并行,如何做好项目管理?

对于项目经理来说&#xff0c;多项目并行管理是工作中的常态&#xff0c;也是一大难点。当多个项目共同推进时&#xff0c;项目经理经常会出现手忙脚乱、四处救火的情形&#xff0c;例如&#xff1a; A.资源管理难&#xff1a;资源冲突、资源分配不合理会导致项目延期。 B.进度…

【STM32嵌入式系统设计与开发】——12IWDG(独立看门狗应用)

这里写目录标题 一、任务描述二、任务实施1、ActiveBeep工程文件夹创建2、函数编辑&#xff08;1&#xff09;主函数编辑&#xff08;2&#xff09;USART1初始化函数(usart1_init())&#xff08;3&#xff09;USART数据发送函数&#xff08; USART1_Send_Data&#xff08;&…

苹果App Store上架工具介绍

文章目录 摘要引言正文1. Xcode2. [appuploder](https://www.applicationloader.net/)3. [克魔助手](https://keymob.com/) 4.[ipa guard](https://www.ipaguard.com/)总结参考资料 摘要 苹果App Store作为iOS应用程序的主要分发渠道&#xff0c;上架应用程序需要遵守规定和通…

Hive3.0.0出库库表中timestamp字段读取为null

在利用sqoop1.99.7做数据迁移的时候&#xff0c;从mysql导出表格到hive建立对应的表格&#xff0c;字段中使用了timestamp类型&#xff0c;在读取数据的时候&#xff0c;发现数据为null。查找问题方法如下&#xff1a; 1、查询库表字段类型 命令&#xff1a;desc tablen…

00000基础搭建vue+flask前后端分离项目

我完全是参考的这个vue3flask前后端分离环境速建_flask vue3-CSDN博客 安装了node_js&#xff08;添加了环境变量&#xff09; 环境变量 把原来的镜像源换成了淘宝镜像源 npm config set registry https://registry.npmmirror.com/ 查看版本证明安装成功 npm - v 安装npm i…

正则表达式不会用?一篇教你快速搞懂 !

目录 前言一、基础字符二、一系列常用的字符&#xff1b;1、一些元字符&#xff08;Meta-characters&#xff09; 三、一些高级概念1、贪婪与懒惰匹配2、两个实例加深理解1.颜色值的匹配&#xff1a;RGBS值2.ipv4 地址匹配 四、正则表达式常用语法**1.Flags&#xff08;标志符或…

c语言中动态内存管理

说到内存&#xff0c;大家一定都知道。但是有一种函数可以实现动态内存管理&#xff0c;下面大家一起学习。 文章目录 一、为什么要有动态内存管理&#xff1f;二、malloc 和 free1.malloc2.free 三、calloc 和 realloc1.calloc2.realloc3.常见的动态内存的错误3.1对NULL指针的…

面试题 之 webpack

1.说说你对webpack理解&#xff1f;解决什么问题&#xff1f; Webpack 是实现前端项目的模块化&#xff0c;用于现代 JavaScript 应用程序的静态模块打包工具&#xff0c;被webpack 直接引用的资源打包进 bunde.js的资源&#xff0c;当webpack 处理应用程序时,它会在内部构建一…

理解CPU与执行指令原理

本文侧重介绍cpu的工作任务&#xff0c;与cpu执行指令的过程是怎么样的&#xff1f; 目录 1.理解CPU 1.1.CPU的功能 1.2.CPU的逻辑构成 2.认识指令 2.1.什么是指令 2.2.CPU执行指令的准备工作(重点) 3.指令的执行过程 前景知识&#xff1a; 什么是计算机 就是遵循冯诺依…

阿里云部署宝塔,设置了安全组还是打不开。

1.在安全组是开放正确的端口好。8888要开&#xff0c;但是不只是开放8888&#xff0c;举个例子&#xff0c;https://47.99.53.222:17677/49706cf7这个&#xff0c;要开放17677这个端口号。 2.安全组要挂载到实例上&#xff0c;从三个点的进入点击管理实例&#xff0c;加到对应的…

深入聊聊企业数字化转型这个事儿

01 什么是数字化&#xff1f; 聊数字化&#xff0c;就不得不聊聊信息化、智能化。佛性的说&#xff1a;信息化是数字化的前世&#xff0c;智能化是数字化的来生&#xff01;我习惯用一个结构化的图形来表示事物之间的关系&#xff0c;信息化、数字化、智能化的关系如下&#…

[flask] flask的基本介绍、flask快速搭建项目并运行

笔记 Flask Flask 本身相当于一个内核&#xff0c;其他几乎所有的功能都要用到扩展&#xff08;邮件扩展Flask-Mail&#xff0c;用户认证Flask-Login&#xff0c;数据库Flask-SQLAlchemy&#xff09;&#xff0c;都需要用第三方的扩展来实现。比如可以用 Flask 扩展加入ORM、…

JVM本地方法

本地方法接口 NAtive Method就是一个java调用非java代码的接口 本地方法栈&#xff08;Native Method Statck&#xff09; Java虚拟机栈用于管理Java方法的调用&#xff0c;而本地方法栈用于管理本地方法的调用。 本地方法栈&#xff0c;也是线程私有的。 允许被实现成固定或…

想做抖音小店又不会该怎么办?先学会做店出单逻辑,再入门

大家好&#xff0c;我是电商花花。 现在在这个巨大的电商市场中&#xff0c;很多人都被电商的巨大红利给勾起来了&#xff0c;在这个抖音小店的黑马项目中&#xff0c;很多人都在其中赚钱获利&#xff0c;吸引了一批又一批商家。 相信现在对电商感兴趣的仍不在少数&#xff0…

Navicat BI 工具 | 连接数据

早前&#xff0c;海外 LearnBI online 博主 Adam Finer 对 Navicat Charts Creator 这款 BI&#xff08;商业智能&#xff09;工具进行了真实的测评。上一期&#xff0c;我们介绍了这位博主对 Navicat BI 工具的初始之感。今天&#xff0c;我们来看看从连接数据的角度&#xff…

Tomcat 下载以及安装

Tomcat安装及配置教程主要分为四步&#xff1a; 步骤一&#xff1a;首先确认自己是否已经安装JDK 1. cmd&#xff1a;查看java的版本 步骤二&#xff1a;下载安装Tomcat 1. 下载tomcat :Apache Tomcat - Welcome! 2. 选择对应的tomcat版本&#xff1a; 3. 进行安装&#…