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

news2024/11/20 17:38:44

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

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

一、数据库备份的重要性

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

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

容灾

二、数据库备份的分类

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

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


 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

关系型数据库mysql(7)sql高级语句

目录 一.MySQL常用查询 1.按关键字&#xff08;字段&#xff09;进行升降排序 按分数排序 &#xff08;默认为升序&#xff09; 按分数升序显示 按分数降序显示 根据条件进行排序&#xff08;加上where&#xff09; 根据多个字段进行排序 ​编辑 2.用或&#xff08;or&…

centos 7 安装磐维(PanWeiDB)数据库(单机)

前置环境准备 文件系统环境要求 文件系统环境所要求的扇区必须为512bytes&#xff0c;查看方法如下&#xff1a; [rootdevops-core-highapp3-b-32 ~]#df -h /apps/ [rootdevops-core-highapp3-b-32 ~]#ll /dev/mapper/vg--docker-lvapp [rootdevops-core-highapp3-b-32 ~]#f…

Apache ActiveMQ OpenWire 协议反序列化命令执行漏洞分析 CVE-2023-46604

Apache ActiveMQ 是美国阿帕奇&#xff08;Apache&#xff09;软件基金会所研发的一套开源的消息中间件&#xff0c;它支持Java消息服务、集群、Spring Framework等。 OpenWire协议在ActiveMQ中被用于多语言客户端与服务端通信。在Apache ActiveMQ 5.18.2版本及以前&#xff0…

小程序富文本图片宽度自适应

解决这个问题 创建一个util.js文件,图片的最大宽度设置为100%就行了 function formatRichText(html) {let newContent html.replace(/\<img/gi, <img style"max-width:100%;height:auto;display:block;");return newContent; }module.exports {formatRichT…

2024-03-26 Android8.1 px30 WI-FI 模块rtl8821cu调试记录

一、kernel 驱动&#xff0c;我这里使用v5.8.1.2_35530.20191025_COEX20191014-4141这个版本&#xff0c;下载这个版本的驱动可以参考下面的文章。 2021-04-12 RK3288 Android7.1 USB wifi bluetooth 模块RTL8821CU 调试记录_rk平台rtl8821cu蓝牙调试-CSDN博客 二、Makefile文…

基于nodejs+vue考试信息报名系统python-flask-django-php

本文拟采用nodejs技术和express 搭建系统框架&#xff0c;后台使用MySQL数据库进行信息管理&#xff0c;设计开发的考试信息报名系统。通过调研和分析&#xff0c;系统拥有管理员、学生和教师三个角色&#xff0c;主要具备登录注册、个人信息修改、对系统首页、个人中心、学生管…

在项目中数据库如何优化?【MySQL主从复制(创建一个从节点复制备份数据)】【数据库读写分离ShardingJDBC(主库写,从库读)】

MySQL主从复制 MySQL主从复制介绍MySQL复制过程分成三步&#xff1a;1). MySQL master 将数据变更写入二进制日志( binary log)2). slave将master的binary log拷贝到它的中继日志&#xff08;relay log&#xff09;3). slave重做中继日志中的事件&#xff0c;将数据变更反映它自…

JS等比压缩图片方法

AI给出来的答案&#xff0c;AI真的能改变世界&#xff0c;以后程序员这个职业真的有可能不存在了。 function compressImage(image, callback) {// 创建一个 canvas 元素const canvas document.createElement(canvas);canvas.width 48;canvas.height 48;// 获取 canvas 的绘…

【学海拾贝】| 关于Python的 PEP 484规则了解:类型提示,函数注解

在实际的工厂在实际的工程代码的开发中&#xff0c;常常可以碰到这种情况 上网查了之后发现这是PEP484规则~ 文章目录 1 Type Hints for Variables&#xff08;变量在这里插入图片描述2 Function Annotations&#xff08;函数注解&#xff09;3 Type Checking Tools&#xff08…

【比特币】比特币的奥秘、禁令的深层逻辑与风云变幻

导语&#xff1a; 比特币(Bitcoin)&#xff0c;这个充满神秘色彩的数字货币&#xff0c;自诞生以来便成为各界瞩目的焦点。它背后所蕴含的Mining机制、禁令背后的深层逻辑以及市场的风云变幻&#xff0c;都让人欲罢不能。今天&#xff0c;我们将深入挖掘比特币的每一个角落&…

视觉图像处理与FPGA实现第七次作业——生成512深度、8位宽度的双端口存储器IP,并分析IP包资料构成

一、生成IP 打开Vivado&#xff0c;点击IP Catalog&#xff0c;搜索memory&#xff0c;双击对应IP核 调整参数为——512深度、8位宽度&#xff0c;双端口&#xff0c;然后一直默认点击OK 二、分析IP构成 查看IP细节&#xff0c;查看设计资源和仿真资源 双击打开文件 设计文件…

代码随想录 图论-并查集

代码随想录 (programmercarl.com) 寻找图中是否存在路径这道题中的类可看做并查集的标准类 目录 1971.寻找图中是否存在路径 684.冗余连接 685.冗余连接II 1971.寻找图中是否存在路径 1971. 寻找图中是否存在路径 已解答 简单 相关标签 相关企业 有一个具有 n 个顶…

NOIP,CSP-J,CSP-S——输入输出进阶

一、输入scanf 格式&#xff1a; int a,b; scanf("%d%d", &a, &b) 类似于 int a,b; cin>>a,b; 双引号里面的两个“%d”表示要输入两个int类型的变量的占位符。然后是要输入的变量名&#xff0c;前面要加“&”&#xff0c;如果有多个变量则用…

SystemUI修改系统状态栏右边的ICON背景颜色

文件在 status_bar.xml 。 如下&#xff1a; <com.android.keyguard.AlphaOptimizedLinearLayout android:id"id/system_icon_area"android:layout_width"0dp"android:layout_height"match_parent"android:background"#ff0000"andr…

我的 Android 性能书上架了!内附书籍介绍

大家好&#xff0c;我是拭心。 很高兴地向大家宣布&#xff0c;我的新书《Android 性能优化入门与实战》上架了&#xff01; 点击下面的小程序进行购买&#xff1a; 封面介绍 这本书的封面来自之前的投票文章 # 投票啦&#xff01;最新安卓进阶书籍封面由你来定&#xff0c;从四…

基于SIR模型的疫情发展趋势预测算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 基于SIR模型的疫情发展趋势预测算法.对病例增长进行SIR模型拟合分析&#xff0c;并采用模型参数拟合结果对疫情防控力度进行比较。整体思路为采用SIR微分方程模型…

小迪安全48WEB 攻防-通用漏洞Py 反序列化链构造自动审计 bandit魔术方法

#知识点&#xff1a; 1、Python-反序列化函数使用 2、Python-反序列化魔术方法 3、Python-反序列化 POP 链构造&#xff08;payload构造&#xff09; 4、Python-自动化审计 bandit 使用 #前置知识&#xff1a; 函数使用&#xff1a; pickle.dump(obj, file) : 将对…

pdfjs 实现给定pdf数据切片高亮并且跳转

pdfjs 实现给定pdf数据切片高亮并且跳转 pdfjs 类的改写基本展示需求的实现高亮功能的实现查询功能分析切片数据处理 pdfjs 类的改写 需求&#xff1a; pdf文件被解析成多个分段&#xff0c;每个分段需要能够展示&#xff0c;并且通过点击分段实现源pdf内容的高亮以及跳转需求…

深度学习十大算法之图神经网络(GNN)

一、图神经网络的基础 图的基本概念 图是数学中的一个基本概念&#xff0c;用于表示事物间复杂的关系。在图论中&#xff0c;图通常被定义为一组节点&#xff08;或称为顶点&#xff09;以及连接这些节点的边。每个边可以有方向&#xff0c;称为有向边&#xff0c;或者没有方向…

分布式系统面试全集通第一篇(dubbo+redis+zookeeper----分布式+CAP+BASE+分布式事务+分布式锁)

目录 分布式系统面试全集通第一篇什么是分布式?和微服务的区别什么是分布式分布式与微服务的区别 什么是CAP?为什么不能三者同时拥有分区容错性一致性可用性 Base理论了解吗基本可用软状态最终一致性 什么是分布式事务分布式事务有哪些常见的实现方案?2PC&#xff08;Two Ph…