55 、mysql的存储引擎、备份恢复以及日志备份、恢复

news2024/12/23 19:14:26

一、数据库的存储引擎:

1.1、存储引擎的概念

概念:存储引擎,就是一种数据库存储数据的机制,索引的机制,索引的技巧,锁定水平。

存储的方式和存储的格式。

存储引擎也属于mysql当中的组件,实际上操作的,执行的就是数据的读写I/O。

1.2、mysql的存储引擎的分类:

  • mysql5.5之后默认开始使用innodb,事务型速记存储引擎。支持ACID,支持行锁定。
  • myisam:mysql5.5之前的存储引擎,插入的速度和查询速度很快,但是不支持事务。
  • memory:内存型存储引擎,数据在写时,都保存在内存当中,一旦重启,所有数据全部消失。
  • csv:逗号分割数据的存储引擎,数据文件.csv文件保存的,execl.保存的文件就是一个普通的文本文件。
  • 不支持索引。

1.2.1、INNODB存储引擎:

show ENGINES;##查看存储引擎
/etc/my.cnf##配置文件也可以查看和更改
default-storage-engine=#更改默认的存储引擎

1、读写阻塞(锁表)和事务的隔离级别。

2、能够高效缓存数据和支持多种类索引。

3、表的索引的类型默认时BTREE

4、支持外键,支持全文索引。

5、对硬件的资源要求比较高。

6、行级锁定,会把行锁住,禁止操作。

1.2.2、模糊查询:

like进行查询时,会进行全表扫描,在扫描的过程中会锁定整个表。

没有创建索引的列,进行查询时,也会锁定整个表。

使用的是索引列,锁定条件的行,行锁定。

show ENGINES;
CREATE DATABASE xy102;
CREATE TABLE student(
id int(5),
name char(10),
age int(3),
sex char(2)
);
ALTER TABLE student add PRIMARY KEY(id);
show INDEX from student;
INSERT INTO student VALUES(1,'ly1',18,'男');
insert into student values(1,'小明',18,'男');
insert into student values(2,'小红',19,'女');
insert into student values(3,'小刚',19,'男');
insert into student values(4,'小绿',17,'女');
insert into student values(5,'小黑',20,'男');
SELECT * from student;
SELECT * from student WHERE id=1;
create table t1(id int primary key, name char(3), age int);
insert into t1 values(1,'aaa',22);
insert into t1 values(2,'bbb',23);
insert into t1 values(3,'aaa',24);
insert into t1 values(4,'bbb',25);
insert into t1 values(5,'ccc',26);
insert into t1 values(6,'zzz',27);
SELECT * from t1;

innodb行锁和索引的关系:

行锁是通过索引来实现的。

如果没有索引,innodb会使用默认的隐藏索引来对记录进行加锁。

加了索引就是所行。

不加索引就是锁表。

mysql默认就是自动提交写入。

oracle是提交才写入。

当指定条件是索引的时候,会锁住索引行。

1.3、innodb行锁和索引

CREATE table student(
id int(5),
name char(10),
age int(3),
sex CHAR(2)
);
insert into student values(1,'小明',18,'男');
insert into student values(2,'小红',19,'女');
insert into student values(3,'小刚',19,'男');
insert into student values(4,'小绿',17,'女');
insert into student values(5,'小黑',20,'男');
ALTER table student add PRIMARY key(id);

xhell:

begin;

delete from student where id =1;


navicat:

UPDATE student SET age = 26 where name = '小明';
以上是操作索引列的行,导致整行锁定。

mysql> begin;##begin开始,commit提交才写入,若不begin,直接命令行,自动写入。
Query OK, 0 rows affected (0.00 sec)

mysql> delete from student where name ='小明';
Query OK, 1 row affected (0.00 sec)

navicat:
UPDATE student SET age=23 WHERE id = 3;
以上是操作非索引列的行,导致全文锁定。


delete from t1 where id =1;

update t1 set age=20 where id=1;

update t1 set age=20 where id=1;

在这里插入图片描述

当指定条件不是索引的时候,会锁住全表。

1.4、死锁

死锁:事务相互等待对方的资源,最后形成一个环路造成的。

create table t1(id int primary key, name char(3), age int);
insert into t1 values(1,'aaa',22);
insert into t1 values(2,'bbb',23);
insert into t1 values(3,'aaa',24);
insert into t1 values(4,'bbb',25);
insert into t1 values(5,'ccc',26);
insert into t1 values(6,'zzz',27);

mysql> begin;
Query OK, 0 rows affected (0.05 sec)

mysql> delete from t1 where id = 5;
Query OK, 1 row affected (0.00 sec)

begin;
SELECT * from t1 WHERE id =1 for UPDATE;
UPDATE t1 SET name = 'asd' WHERE id = 5;

mysql> delete from t1 where id = 1;
Query OK, 1 row affected (0.00 sec)


在这里插入图片描述

在这里插入图片描述

发生了死锁,数据会自动选择一个事务作为受害者,回滚该事务以解除死锁。

mysql会终止其中一个事务,但是不会回滚。

for update 排他锁,当一个事务的操作未完成时,其他事务可以读取但是不能写入。

如何避免死锁的情况出现:

1、以固定的顺序访问表和行

2、大事务尽量拆陈小事务

3、为表添加一个合理的索引

二、mysql的备份和恢复和日志管理(配置文件当中的设置)

1、备份的目的

备灾 ,在生产环境中,数据的安全性非常重要。

造成数据丢失的原因:

1、程序出错

2、人为的问题

3、磁盘的故障。

备份的分类:

物理备份:对磁盘或者文件直接进行备份。

冷备份:脱机备份,先把指定的程序关闭,然后对资料进行备份。

热备份:

  • 联机备份,不用关闭程序就可以对资料进行备份。
  • 逻辑备份:根据数据库文件当中保存的sql语句,表结构,等等,以特定格式和命令对文件的内容进行还原。热备份的一种。只能对表备份,库没了没有办法恢复。主从复制可以恢复。

物理备份 全量备份:

把数据库的内容整个一次性的做备份。

CREATE DATABASE xy103;
create table if not exists info1 (
id int(4) not null auto_increment,
name varchar(10) not null,
sex char(10) not null,
hobby varchar(50),
primary key (id));





systemctl stop firewalld;
systemctl stop mysqld

cd /usr/local/mysql/data

在这里插入图片描述

在这里插入图片描述

yum -y install xz

`xz:`压缩工具,大文件的压缩比较快。

## 2.1、打包整个数据库

`tar -jcvf /opt/mysql_all_$(date +%F).xz /usr/local/mysql/data`##打包mysql整个文件的数据文件到/opt目录下。

cd /opt

在这里插入图片描述

### 2.1.1、scp的备份

scp root@192.168.168.11:/opt/mysql_all_2024-07-19.xz /opt/##远程复制

cd /opt/

tar -xf mysql_all_2024-07-19.xz 

systemctl stop mysqld.service ##物理备份需要关闭服务。

cd /usr/local/mysql/

rm -rf data/

cd /opt/usr/local/mysql/

cp -a data/ /usr/local/mysql/

systemctl restart mysqld

2.2、mysql自带的备份

mysql自带的备份命令。可以备份库,也可以备份库里面的表。热备份

备份数据库xy102

mysqsldump -u root -p --databases xy102 > /opt/xy102.sql##必须要以sql为结尾。

备份完成,删除表

mysql -u root -p < /opt/xy102.sql
Enter password: 123456

刷新即可完成恢复。

备份多个数据库

mysqldump -u root -p --databases xy102 xy103 > /opt/xy_all.sql
Enter password: 123456
[root@mysql1 opt]# mysql -u root -p < /opt/xy_all.sql 
Enter password: 123456

备份全部的库和表

 mysqldump -u root -p --all-databases > /opt/all.sql
Enter password: 123456

[root@mysql1 opt]# mysql -u root -p < /opt/all.sql 
Enter password: 123456





去另外一台mysql

scp root@192.168.168.11:/opt/all.sql /opt/
root@192.168.168.11's password: 123

mysql -u root -p < /opt/all.sql 
Enter password: 123456

备份库里面的单表

mysqldump -u root -p 库名 表名 > /opt/xy102_t1.sql

mysqldump -u root -p xy102 t1 > /opt/xy102_t1.sql
Enter password: 
[root@mysql1 opt]# mysql -u root -p < /opt/xy102_t1.sql 
Enter password: 
ERROR 1046 (3D000) at line 22: No database selected
[root@mysql1 opt]# mysql -u root -p xy102 < /opt/xy102_t1.sql 
Enter password: 

备份库里面的多个表

mysql -u root -p xy102 < /opt/xy102_t1_student.sql 
Enter password: 
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
[root@mysql1 opt]# mysql -u root -p xy102 < /opt/xy102_t1_student.sql


备份的表在其他库恢复表

mysql -u root -p xy103 < /opt/xy102_t1_student.sql 
Enter password: ##xy102里面的t1表和student表在xy103库里面恢复。

2.3、增量备份:1、2、3

2.3.1、开启二进制日志的功能:

binlog 逻辑备份,会生成一个文件,这个里面包含了sql语句,要使用特定的方式和语句才能恢复。

/etc/my.cnf

log-bin=mysql-bin
#开启二进制日志功能
binlog_format=MIXED
#记录二进制日志的文件格式

statement基于sql语句:只是记录用户操作的sql语句,高并发的情况下,记录操作的sql的语句的顺序可能会出错。导出数据时,就会有丢失,或者误差。效率高。

row基于行,记录每一行的数据,准确,高并发也不会出错,但是恢复的效率低。

mixed混合模式,正常情况下使用statement,高并发使用row,智能判断。

cd /usr/local/mysql/data/

在这里插入图片描述

mysqladmin -u root -p flush-logs
##刷新生成新文件进行记录mysql日志文件


create table if not exists info1 (
id int(4) not null auto_increment,
name varchar(10) not null,
sex char(10) not null,
hobby varchar(50),
primary key (id));

insert into info1 values(1,'user1','male','running');
insert into info1 values(2,'user2','female','singing');
insert into info1 values(3,'user3','female','singing');
insert into info1 values(4,'user4','female','singing');
insert into info1 values(5,'user5','female','singing');
insert into info1 values(6,'user6','female','singing');
insert into info1 values(7,'user7','female','singing');
insert into info1 values(8,'user8','female','singing');

mysqladmin -u root -p flush-logs
##设置断点,再次刷新,日志更换保存文件
mysqlbinlog --no-defaults /usr/local/mysql/data/mysql-bin.000005 | mysql -u root -p
##恢复数据到数据库中,之前怎么建的,就怎么恢复

mysqlbinlog --no-defaults --base64-output=decode-rows -v mysql-bin.000001##使用解码工具对二进制日志文件查看

2.3.2、指定位置恢复

从指定位置1956恢复到结束

mysqlbinlog --no-defaults --start-position='1956' mysql-bin.000005 | mysql -u root -p
Enter password: 123456
##恢复从指定位置1956到结束

从1956-2774恢复

 mysqlbinlog --no-defaults --start-position='1956' --stop-position='2774' mysql-bin.000005 | mysql -u root -p
Enter password: 123456

2.3.3、按时间位置恢复

根据时间,时间外部格式####-#-##

 mysqlbinlog --no-defaults --start-datetime='####-#-## ##:##:##' --stop-datetime='####-#-## ##:##:##' mysql-bin.000005 | mysql -u root -p
Enter password: 123456

mysqlbinlog --no-defaults --start-datetime='2024-7-20  1:27:20' mysql-bin.000005 | mysql -u root -p
##开始到结束

mysqlbinlog --no-defaults --start-datetime='2024-7-20  1:27:20' --stop-datetime='2024-7-20  1:27:23' mysql-bin.000005 | mysql -u root -p
##时间间隔

/etc/my.cnf

log-bin=mysql-bin
#开启二进制日志功能
binlog_format=MIXED
#记录二进制日志的文件格式

打开通用查询日志

general_log=ON

查询日志的保存位置

general_log_file=/usr/local/mysql/data/mysql_general.log

错误的保存位置,错误日志默认是开启的

log-error=/usr/local/mysql/data/mysql_error.log

开启慢查询日志

slow_query_log=0N

设置慢查询的位置

slow_query_log_file=/usr/local/mysql/data/mysql_slow_query.log

#默认的慢查询时间是10秒,超过5秒的记录都会保存。

long_query_time=5

在这里插入图片描述

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

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

相关文章

Python游戏开发之制作捕鱼达人游戏-附源码

制作一个简单的“捕鱼达人”游戏可以使用Python结合图形界面库&#xff0c;比如Pygame。Pygame是一个流行的Python库&#xff0c;用于创建视频游戏&#xff0c;它提供了图形、声音等多媒体的支持。以下是一个基础的“捕鱼达人”游戏框架&#xff0c;包括玩家控制一个炮台来射击…

小程序博客搭建分享,纯微信小程序原生实现

本项目代码已开源&#xff0c;具体见&#xff1a; 前端工程&#xff1a;vue3-ts-blog-frontend 后端工程&#xff1a;express-blog-backend 小程序源码&#xff1a;blog-weapp 数据库初始化脚本&#xff1a;关注公众号程序员白彬&#xff0c;回复关键字“博客数据库脚本”&…

【ML练习】决策树

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 一、决策树算法概述 二、代码实现 代码目标&#xff1a;我们希望通过鸢尾花数据&#xff0c;训练一个决策树模型&#xff0c;之后应用该模型&#xff0c;可以…

新的铸造厂通过 PROFIBUS 技术实现完全自动化

钢铁生产商某钢以其在厚钢板类别中极高的产品质量而闻名。其原材料&#xff08;板坯连铸机&#xff09;在钢铁厂本地生产&#xff0c;该厂最近新建了一座垂直连铸厂。该项目的一个主要目标是从一开始就完全自动化这座新工厂和整个铸造过程&#xff0c;以高成本效率实现最佳产品…

ue5 使用动画蒙太奇,混合上半身持枪姿势

ue5 使用动画蒙太奇 1.创建动画蒙太奇 添加上半身插槽&#xff0c;在添加持枪动画 搜索equip stand,t&#xff0c;添加进上半身插槽 2.设置动画蓝图 3.播放动画蒙太奇

AFAC2024-基于保险条款的问答 比赛日记 llamafactory qwen npu 910B1

AFAC2024: 基于保险条款的问答挑战——我的实战日记 概述 在最近的AFAC2024竞赛中&#xff0c;我参与了基于保险条款的问答赛道。这是一次深度学习与自然语言处理的实战演练&#xff0c;旨在提升模型在复杂保险文本理解与问答生成方面的能力。本文将分享我的参赛过程&#xf…

C语言 #字符指针

文章目录 前言 一、指针概念简述 二、字符指针 二、字符在内存中的存储 总结 前言 以例子为导向来分析字符指针的中存的是什么&#xff0c;以及常量字符串在内存中是如何存储的。 一、指针概念简述 想要详细地了解指针的概念可以戳此链接&#xff08;详细的万字讲解&#xff…

机器学习基础入门(1)

最近也在努力的想要学习些机器学习的知识&#xff0c;目前正在了解各个概念及术语&#xff0c;下面就把学习到的概念都列出来。 人工智能 (AI) Artificial intelligence 人工智能生成内容&#xff08;AIGC&#xff09; 机器学习&#xff08;ML&#xff09; Machine Learning …

《汇编语言 基于x86处理器》- 读书笔记 - Visual Studio 2019 配置 MASM环境

安装 Visual Studio 2019 配置 MASM环境 下载 Visual Studio Installer安装 Visual Studio 20191. 双击运行2. 自定义安装内容3. 修改 MSVC 工具集版本4. 设置主题&#xff08;可选&#xff09;5. 安装代码高亮插件 AsmDude&#xff08;可选&#xff09;6. 通义灵码&#xff08…

【AI学习】关于Scaling Law的相关学习

一、苦涩的教训 首先&#xff0c;学习一段重要话语&#xff1a; The biggest lesson that can be read from 70 years of AI research is that general methods that leverage computation are ultimately the most effective, and by a large margin. 从70年的人工智能研究中…

服务器借助笔记本热点WIFI上网

一、同一局域网环境 1、当前环境&#xff0c;已有交换机组网环境&#xff0c;服务器已配置IP信息。 设备ip服务器125.10.100.12交换机125.10.100.0/24笔记本125.10.100.39 2、拓扑图 #mermaid-svg-D4moqMym9i0eeRBm {font-family:"trebuchet ms",verdana,arial,sa…

FastAPI(六十五)实战开发《在线课程学习系统》基础架构的搭建

在之前三篇&#xff0c;我们分享的就是需求的分析&#xff0c;基本接口的整理&#xff0c;数据库链接的配置。这次我们分享项目的基本框架&#xff0c;目录结构大致如下&#xff1a; common目录&#xff1a; 通用目录&#xff0c;放一些通用的处理 models目录&#xf…

达梦数据库(一)mysql2dm

达梦数据库(一)mysql2dm 文章目录 达梦数据库(一)mysql2dm一、安装篇ForWindows二、数据库初始化篇三、数据迁移篇出现的问题找不到对应表或者视图 注意字符集模式迁移出错大小写敏感解决方案 四、 代码修改篇group_concatGROUP BY方法一方法二(最笨)方法补充 多表联查更新参考…

【AI资讯】7.19日凌晨OpenAI发布迷你AI模型GPT-4o mini

性价比最高的小模型 北京时间7月19日凌晨&#xff0c;美国OpenAI公司推出一款新的 AI 模型“GPT-4o mini”&#xff0c;即GPT-4o的更小参数量、简化版本。OpenAI表示&#xff0c;GPT-4o mini是目前功能最强大、性价比最高的小参数模型&#xff0c;性能逼近原版GPT-4&#xff0…

python--实验15 数据分析与可视化

目录 知识点 1 数据分析概述 1.1流程 1.2定义 1.3数据分析常用工具 2 科学计算 2.1numpy 2.1.1定义 2.1.2创建数组的方式 2.1.3np.random的随机数函数 3 数据可视化 3.1定义 3.2基本思想 3.3Matplotlib库 3.3.1模块 4 数据分析 4.1Pandas 4.2数据结构 4.3基…

RE学习7.16-17

[HDCTF 2023]买了些什么呢 是一个经典的算法题吧 物品的重量和价值为: | 物品编号 | 重量 | 价值 | | 1 | 2 | 8 | | 2 | 5 | 1 | | 3 | 10 | 5 | | 4 | 9 | 9 | | 5 | 3 | 5 | | 6 | 6 | 6 | | 7 | 2 | 8 | | 8 | 2 | 2 | | 9 | 6 | 3 | | 10 | 8 | 7 | | 11 | 2 | 5 | | 1…

在 PostgreSQL 中怎样进行数据库的容量规划?

&#x1f345;关注博主&#x1f397;️ 带你畅游技术世界&#xff0c;不错过每一次成长机会&#xff01;&#x1f4da;领书&#xff1a;PostgreSQL 入门到精通.pdf 文章目录 在 PostgreSQL 中怎样进行数据库的容量规划&#xff1f;一、为什么容量规划如此重要&#xff1f;二、影…

探索 JavaScript Polyfill:跨越浏览器兼容性的桥梁

&#x1f389; 博客主页&#xff1a;【剑九 六千里-CSDN博客】 &#x1f3a8; 上一篇文章&#xff1a;【构建高效Node.js中间层&#xff1a;探索请求合并转发的艺术】 &#x1f3a0; 系列专栏&#xff1a;【面试题-八股系列】 &#x1f496; 感谢大家点赞&#x1f44d;收藏⭐评…

【Linux系统化学习】数据链路层

目录 数据链路层解决的问题 以太网 认识局域网 以太网帧格式 两个问题 认识MAC地址 认识MTU ARP协议 ARP协议的作用 ARP数据报格式 ARP协议的工作流程 数据链路层解决的问题 对于TCP/IP四层协议来说&#xff0c;数据链路层才是真正从传送数据进行跑腿办事情的&…

display: flex 和 justify-content: center 强大居中

你还在为居中而烦恼吗&#xff0c;水平居中多个元素、创建响应式布局、垂直和水平同时居中内容。它&#xff0c;display: flex 和 justify-content: center 都可以完成&#xff01; display: flex&#xff1a;将元素定义为flex容器 justify-content&#xff1a;定义项目在主轴…