【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 engine


1.检查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、模拟丢失更改的数据库的就恢复步骤(直接使用恢复即可)


 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数组的常见算法

数组的常见算法 数值型数组特征值统计 这里的特征值涉及到&#xff1a;平均值、最大值、最小值、总和等 举例1&#xff1a;数组统计&#xff1a;求总和、均值 public class TestArrayElementSum {public static void main(String[] args) {int[] arr {4,5,6,1,9};//求总和、…

Android 性能优化实例分享-内存优化 兼顾效率与性能

背景 项目上线一段时间后,回顾重要页面 保证更好用户体验及生产效率&#xff0c;做了内存优化和下载导出优化&#xff0c;具体效果如最后的一节的表格所示。 下面针对拍摄流程的两个页面 预览页 导出页优化实例进行介绍&#xff1a; 一.拍摄前预览页面优化 预览效果问题 存在…

实时通讯技术实现

实时通讯技术实现 前言 在CS架构中&#xff0c;经常会有实时通信的需求。客户端和服务端建立连接&#xff0c;服务端实时推送数据给客户端。本文介绍几种常见的实现方式&#xff0c;希望能给读者们一点点参考。 实时通讯的主要实现技术 长轮询(Long Polling) WebSocket 服务器发…

搜索(find a way, Pots)

Find a way 思路&#xff1a;这一题看似简单其实不然&#xff0c;有很多特办条件&#xff0c;如果当这个M和Y都在KFC的时候就会导致步数为0 &#xff0c;或者可以这样说&#xff1a;只有两人都能到达才能算入答案。 我们可以使用bfs来写这道题&#xff0c;这不过这道题目不需…

ChatGPT,来一份3·28雷布斯米时捷上市发布会即时发言稿

你新招了一个秘书。上班第一天&#xff0c;你对他说&#xff1a;“3月28号我可能会受邀参加雷老板的米时捷’上市发布会&#xff0c;届时我可能会有十分钟的发言机会&#xff0c;你现在准备一篇演讲稿。” 秘书问你有何指导意见&#xff1f; 你自己都不知说啥子&#xff0c;能…

探秘 RabbitMQ 的设计理念与核心技术要点

目录 一、消息中间件介绍 1.1 消息中间件的作用 二、RabbitMQ 2.1 核心概念 2.2 生产者发送消息过程 2.3 消费者接收消息过程 2.4 RabbitMQ 为何要引入信道(channel) 2.5 消费模式 一、消息中间件介绍 消息队列中间件&#xff08;message queue middleWare, MQ&#xff09;指…

前端发版上线出现白屏问题

目录 路由配置问题资源缓存问题首屏加载过慢 &#xff1a;喂&#xff0c;你的页面白啦&#xff01; 出现上线白屏的问题有很多&#xff0c;如&#xff1a;配置错误、缓存问题、浏览器兼容问题&#xff0c;根据不同情况去解决。 路由配置问题 问题描述&#xff1a; 在vue开发…

ValueError: Cannot load file containing pickled data when allow_pickle=False

问题描述 遇到报错&#xff1a;ValueError: Cannot load file containing pickled data when allow_pickleFalse 解决方案 经过查阅有人说是与numpy的版本有关&#xff0c;但是还是不要轻易改变环境中的版本&#xff0c;不一定哪个地方就会报错。这里放个解决方案&#xff1a;…

【详细讲解yarn的安装和使用】

&#x1f308;个人主页:程序员不想敲代码啊&#x1f308; &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家&#x1f3c6; &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提…

探索MongoDB:发展历程、优势与应用场景

一、MongoDB简介 MongoDB 始于 2007 年&#xff0c;由 Dwight Merriman、Eliot Horowitz 和 Kevin Ryan –&#xff08;DoubleClick 的主理团队&#xff09;共同创立。 DoubleClick 是一家互联网广告公司&#xff08;现隶属于 Google&#xff09;&#xff0c;公司团队开发并利…

数字化转型的密码:传统企业转型路径的深度剖析

引言&#xff1a;数字经济浪潮下的新资产形态 传统行业&#xff0c;如零售、金融、教育等&#xff0c;在如今这场数字化浪潮中&#xff0c;同样需要积极拥抱变革&#xff0c;探索适合自身的转型之路。本文将结合制造业的转型经验&#xff0c;深入探讨传统行…

电脑开机0x0000007B蓝屏怎么办?

电脑开机0x0000007B蓝屏怎么办啊?相信很多用户的电脑都有遇到过蓝屏的问题,最近有用户电脑一开机就蓝屏,并且显示0x0000007B错误代码,原本想通过安全模式进行修复,结果发现安全模式进不去,不知道该怎么解决。这可能与我们的内存或硬盘有关,尝试设置一下硬盘模式,看看是…

嵌入式软件工程师都需要安装哪些软件

文章目录 一、编程软件1.keil2.vscode①Chinese&#xff1a;中文②C/C、C/C Extension Pack③CMake、CMake Tools等代码调试运行的工具④Remote-SSH等&#xff0c;关于远程登录linux服务器的插件 3.Pycharm和Anaconda&#xff0c;用来写python脚本和配置环境&#xff0c;PYQT上…

【Python】搭建 Python 环境

目 录 一.安装 Python二.安装 PyCharm 要想能够进行 Python 开发&#xff0c;就需要搭建好 Python 的环境 需要安装的环境主要是两个部分&#xff1a; 运行环境: Python开发环境: PyCharm 一.安装 Python (1) 找到官方网站 (2) 找到下载页面 选择 “Download for Windows”…

[蓝桥杯 2022 省 A] 求和

[蓝桥杯 2022 省 A] 求和 题目描述 给定 n n n 个整数 a 1 , a 2 , ⋯ , a n a_{1}, a_{2}, \cdots, a_{n} a1​,a2​,⋯,an​, 求它们两两相乘再相加的和&#xff0c;即 S a 1 ⋅ a 2 a 1 ⋅ a 3 ⋯ a 1 ⋅ a n a 2 ⋅ a 3 ⋯ a n − 2 ⋅ a n − 1 a n − 2 ⋅ a…

C语言:动态内存管理(malloc,calloc,realloc,free)

目录 前言 malloc函数 free函数 calloc函数 realloc函数 前言 在这一章节将讲解动态内存分配&#xff0c;它可以在程序的堆区创建一块内存&#xff0c;在这块内存中存什么值就是由自己决定的了 开辟的空间有两个特点&#xff1a; 1. 空间开辟的大小是固定的 2. 数组在…

零基础学习挖掘PHP网站漏洞

教程介绍 本套课程&#xff0c;分为三个阶段&#xff1a;第一阶段&#xff1a;基础篇 学习PHP开发的基础知识&#xff0c;对PHP常见的漏洞进行分析&#xff0c;第二阶段&#xff1a;进阶篇 实战PHP漏洞靶场&#xff0c;了解市面上的PHP主流网站开发技术&#xff0c;并对市面上…

JAVA获取免费天气

JAVA调用天气代码示例 前沿&#xff1a;最近在开发任务中需要获取每日的实时天气和天气预报&#xff0c;要求还是免费的。在网络上搜索了一下免费的API并有了以下思路 免费API网址&#xff1a;https://dev.qweather.com/docs/api/grid-weather/grid-weather-now/ 调用格林天…

工程企业的未来选择:Java版工程项目管理系统平台与数字化管理的融合

在现代化的工程项目管理中&#xff0c;一套功能全面、操作便捷的系统至关重要。本文将介绍一个基于Spring Cloud和Spring Boot技术的Java版工程项目管理系统&#xff0c;结合Vue和ElementUI实现前后端分离。该系统涵盖了项目管理、合同管理、预警管理、竣工管理、质量管理等多个…

基于Colab训练的yolov4-tiny自定义数据集(可用于OpenCV For Unity)

参考资料文档和视频。 1.打开文档,点击【文件】【在云端硬盘中保存一份副本】,即将文档复制到自己云端硬盘。 2.打开该文件,按文中提示进行。 【代码执行程序】【更改运行时类型】修改运行时为GPU(免费的GPU不好用,收费的好用,某宝上几十元就可用一个月) 步骤1) !git…