大厂linux面试题攻略五之数据库管理

一、数据库管理-MySQL语句

0.MySQL基本语句:

1.SQL语句-增
创建xxx用户:
mysql>create user xxx@ '%' indentified by '123456';
xxx表示用户名
'%'b表示该用户用来连接数据库的方式(远程或本地连接)
indentified by '123456'设置密码创建数据库:
mysql>create database web;web数据库名创建数据表(创建表要先use 数据库):
mysql>create table a1 (id int,name char(30));插入数据:
mysql>insert into a2(id,name,age) values (1,'sdds',21);2.SQL语句-删
删除用户:
mysql>drop user aaa@ '%';删除数据库:
mysql>drop database web;删除数据表:
mysql>drop table a1;删除数据:
mysql>delete from a2 where id=5;
mysql>delete from a2 where age between 23 and 25;3.SQL语句-改
修改表中的数据:
mysql>update a2 set age=21 where id=3;修改数据表的名称:
mysql>alter table a2 rename a1;修改数据表的字段类型:
mysql>describe a1;查看表的字段结构和类型
mysql>alter table a1 modify name char(50);modify表示字段
mysql>describe a1;修改数据表的字段类型:
mysql>alter a1 change name username char(50) not null default '';(change相当于rename+modify)
mysql>describe a1;添加删除字段:
mysql>alter table a1 add time datetime;(datatime时间格式类型)
mysql>alter table a1 drop time;4.SQL语句-查
查看所有数据库:
mysql>show databases;查看指定xxx库内的所有数据表:
mysql>use xxx;
mysql>show tables;查看指定数据表a1的字段结构:
mysql>describe a1;查看所有MySQL用户密码及登陆方式:
mysql>select User,Password,Host from mysql.user;5.SQL语句-授权
授予用户全部权限:
mysql>grant all on aa.a1 aaa@ '%';#aa库a1表
#给已存在的aaa用户授权
mysql>grant all on aa.a1 to aa@ '%' identified by '123456';
#创建aa用户并授权取消abc用户的删除库、表、表中数据的权限(回收权限):
mysql>revoke drop,delete on aa.a1 from abc@ '%';
#取消删除权限(登陆abc测试)
mysql>show grants for abc@ '%';
#查看指定aaa用户的授权
mysql>show grants for aaa@ '%';6.SQL语句-启动关闭
启动:
service mysqld start
/etc/init.d/mysqld start
mysqld_safe &关闭:
service mysqld stop
/etc/init.d/mysqld stop
mysqladmin -uroot -p123456 shutdown

1.库表student.repprt,有3个字段,姓名、学科、成绩,记录如下,根据要求完成SQL语句

1.查询姓李的同学的个数

select count(*) from student.report where Name like '李%';

2.查询表中成绩前2名同学的名字,并按分数从大到小的顺序排列

select Name from report ORDER BY Result DESC limit 2;

二、数据库管理-MySQL集群

0.MySQL集群知识

MySQL主从工作原理:

MySQL主从复制是一种数据同步机制,它允许将一个MySQL数据库服务器(主服务器)的数据复制到其他MySQL服务器(从服务器)。下面是MySQL主从工作原理的概述:

  1. 配置主服务器:在主服务器上,需要开启二进制日志(binary logging)。二进制日志记录对数据库的所有修改操作(如插入、更新、删除),并将这些操作以二进制格式存储到日志文件中。

  2. 配置从服务器:在从服务器上,需要配置主服务器的相关信息,包括主服务器的IP地址、端口号、用户名和密码等。从服务器会连接到主服务器,并从主服务器上获取二进制日志文件。

  3. 同步数据:从服务器连接到主服务器后,会请求主服务器上的二进制日志文件,并从指定的位置开始读取。从服务器会执行这些日志文件中的操作,将主服务器上的修改操作应用到自己的数据库中,从而与主服务器保持数据一致。

  4. 异步复制:主从复制是异步的,即主服务器上的修改操作不会立即同步到从服务器上。相反,主服务器会将修改操作写入二进制日志,并通知从服务器有新的日志文件可用。从服务器会定期检查是否有新的日志文件可用,并下载、解析并执行新的日志文件。

  5. 主从延迟:由于主从复制是异步的,从服务器上的数据可能会有一定的延迟。这意味着从服务器上的数据可能不是实时的,可能会滞后于主服务器。这种延迟的程度取决于网络延迟、主服务器的负载以及从服务器的处理能力等因素。

总结来说,MySQL主从复制是通过记录和复制二进制日志(bin-log日志)来实现数据同步的。主服务器将修改操作写入日志文件,从服务器则通过获取和执行这些日志文件来同步主服务器上的数据。这种机制可以实现数据备份、读写分离以及负载均衡等应用场景。

1.MYSQL一主多从,主库宕机,如何合理切换到从库,其它从库如何处理?

从服务器切换为主服务:

登陆所有从库查看post信息,使用POST最大的做为新的主库,然后将从为提升为新的主库,登陆从库(新的主库) 执行stop slave(停止从服务)

修改my.cnf配置文件,开启log-bin并重新启动数据库服务,登陆数据库执行restet master ,show master status\G;查看主库信息,最后创建授权同步用户与权限和网站使用数据库的用户与权限,最后修改对应服务器的IP地址等信息

登陆其它从库,执行change master操作,查看同步状态

2.单台MySQL达到性能瓶颈时,如何击碎性能瓶颈?

数据库代理工具:Amoeba
Amoeba致力于MySQL的分布式数据库前端代理层,它主要在应用层访问MySQL的时候充当SQL路由功能,专注于分布式数据库代理层 (Database Proxy)开发。具有负载均衡、高可用性、SQL 过滤、读写分离、可路由相关的到目标数据库、可并发请求多台数据库合并结果。 通过Amoeba你能够完成多数据源的高可用、负载均衡、数据切片的功能。

三、数据库管理-MySQL索引

0.索引的基本知识

什么是索引:

索引本质是数据结构,排好序的快速查找数据结构,可以提高查找效率
数据分身之外,数据库还维护着一个满足特定查找算法的数据结构,这些数据结构可以在这些数据结构的基础上实现高级查找算法,这种数据结构就是索引

索引的分类:

主键索引
单值索引 一个索引只包含单个列,一个表可以有多个单列索引。如果字段会被经常用来检索就可以用单值索引
复合索引,一个索引包含多个列 如电话簿上姓+名字。最好不超过5个字段
唯一索引,所有列的值必须唯一,但是允许有空值
普通索引和唯一索引可以称为辅助索引

劣势是什么:

实际上索引也是一张表,该表保存了主键与索引字段,并指向实体表的记录,索引列也是要占用空闻的。
虽然索引大大提高了查询速度,但是会降低更新表的速度,如对表进行INSERT,UPDATE,DELETE。因为更新表示,MySQL不仅要保存数据,还要保存一下索引文件,每次更新添加了索引列的字段,都会调整因为更新所带来的键值变化后的索引信息
索引只是提高效率的一个因素,如果MySQL有大数据量的表,就需要花时间研究建立最优秀的索引,或优化查询

哪些情况不要创建索引

表记录太少,如果才几万条数据,不要建索引。三百万数据量创建索引
频繁更新的字段不适合创建索引,因为每次更新不单单是更新了记录还会更新索引
性别,国籍字段。有个公式索引的选择性 段中不同的值个数除以总行数。

1.MySQL什么时候创建索引?

主键自动建立唯一索引
频繁作为查询条件的字段应该创建索引
查询中与其他表关联的字段,外键关系建立索引
频繁更新的字段不适合创建索引,因为每次更新不单单是更新了记录还会更新索引
where条件里用不到的字段不创建索引
单键/组合索引的选择问题,在高并发下倾向创建组合索引
查询中排序的字段,排序字段若通过索引去访问将大大提高排序速度
查询中统计或者分组字段(group by)

2.误操作drop语句导致数据库数据破坏,请给出恢复的实际大体步骤

手动切割binlog日志并记好切割好的binlog日志文件位置,这里假设为009,备份全部binlog日志
找到之前全备数据最后备份到的binlog文件位置并记好位置,这里假设为005
用mysqladmin命令将005到008binlog文件中的SQL语句分离出来,并找到drop库的语句将其删掉
将之前全备数据导入mysq服务器
将步骤3中分离出的SQL语句导入mysq1服务器
将009binlog文件删除,再次刷新binlog日志,到此数据库已恢复成功

四、数据库管理-Redis

0.Redis工作原理

Redis是一个key-value存储系统,它支持的value类型相对较多,包括string、list、set和zset,这些数据都支持push/pop/add/remove及交并补等操作,而且这些操作都是原子性的,在此基础上,redis支持各种不同方式的排序。为了保证效率,数据是缓存在内存中的,Redis会周期性的把数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave同步。

原子性(Atomicity)是指一个操作或一组操作要么全部执行成功,要么全部不执行,不会出现部分执行的情况。换句话说,原子性操作是不可分割的,要么完全执行,要么不执行,不存在中间状态。在并发编程中,原子性是一种非常重要的概念,用于确保多个线程或进程对共享数据的访问不会导致数据不一致或不确定的结果。如果多个线程同时访问和修改相同的数据,而没有保证原子性,可能会导致数据损坏、计算错误或其他异常结果。原子性是并发编程中保证数据一致性和正确性的重要手段。通过使用锁或原子类型等方法,可以确保操作在并发环境下以原子方式执行,从而避免数据竞争和不一致的结果。正确地处理并发访问共享数据的问题,可以提高代码的正确性和可靠性。

1.如何保证Redis能永久(持久化)保存数据?

Redis持久化方案:

方法一

Redis持久化-RDB:
在Redis运行时,RDB程序将当前内存中的数据库快照保存到磁盘中,当Redis需要重启时,RDB程序会通过重载RDB文件来还原数据库。

保存(rdbSave)
rdbSave负责将内存中的数据库数据以RDB格式保存到磁盘中,如果RDB文件已经存在将会替换已有的RDB文件。保存RDB文件期间会阻塞主进程,这段时间期间将不能处理新的客户端请求,直到保存完成为止
读取(rdbLoad)
当Redis启动时,会根据配置的持久化模式,决定是否读取RDB文件,并将其中的对象加载到内存中。

方法二

Redis持久化-AOF:
以协议文本的方式,将所有对数据库进行的写入命令记录到AOF文件,达到记录数据库状态的目的。

AOF的保存
        1.将客户端请求的命令转换为网络协议格式
        2.将协议内容字符串追加到变量server.aof_buf中
        3.当AOF系统达到设定的条件时,会调用aof_fsync(文件描述符号)将数据写入磁盘

AOF的读取
        1.AOF保存的是数据协议格式的数据,所以只要将AOF中的数据转换为命令,模拟客户端重新执行一遍,就可以还原所有数据库状态
        2.创建模拟的客户端
        3.读取AOF保存的文本,还原数据为原命令和原参数。然后使用模拟的客户端发出这个命令请求
        4.继续执行第二步,直到读取完AOF文件

AOF重写流程
        1.AOF重写完成会向主进程发送一个完成的信号
        2.会将AOF重写缓存中的数据全部写入到文件中
        3.用新的AOF文件,覆盖原有的AOF文件

2.如何利用Redis对MySQL进行性能优化?

Redis 是一个高性能的内存数据库,可以用作缓存层,提升 MySQL 的性能。以下是一些利用 Redis 对 MySQL 进行性能优化的方法:

  1. 缓存查询结果:将经常被查询的数据结果缓存到 Redis 中,避免反复查询 MySQL 数据库。当需要该数据时,先从 Redis 中查询,如果存在则直接返回,如果不存在再从 MySQL 中查询。

  2. 缓存数据对象:将经常被查询的数据对象缓存到 Redis 中,可以以 JSON 或其他格式存储。当需要该对象时,先从 Redis 中查询,如果存在则直接返回,如果不存在再从 MySQL 中查询并将结果存储到 Redis 中。

  3. 缓存热点数据:将热点数据缓存到 Redis 中,例如热门商品、最新动态等。通过定期刷新缓存保持数据的最新性。

  4. 缓存查询条件:将经常被使用的查询条件缓存到 Redis 中。当需要执行该查询时,先从 Redis 中获取查询条件,然后执行查询。

  5. 使用消息队列:将写操作转化为消息,通过消息队列将写操作同步到 MySQL 和 Redis 中。这样可以避免直接操作 MySQL 和 Redis 造成的性能瓶颈。

  6. 数据预加载:在系统启动时,将常用数据加载到 Redis 中,以减少后续查询 MySQL 的次数。

  7. 分布式缓存:使用 Redis Cluster 或者 Redis Sentinel 部署多个 Redis 实例,提高缓存的可用性和性能。

需要注意的是,使用 Redis 缓存数据时需要考虑数据一致性的问题。读写分离、缓存过期时间和缓存更新机制都是需要注意的地方。此外,适合缓存的数据对象大小也是需要考虑的因素,大型对象不适合直接缓存到 Redis 中。

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

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

相关文章

Reranker技术

文章目录 Reranker技术0. 什么是RAG1. 什么是Reranker?2. Reranker在RAG技术中的应用3.使用 Reranker 的优缺点4.总结参考:知乎 Reranker技术 0. 什么是RAG 基础 RAG 的操作流程大致如下:首先,你需要将文本切分成小段&#xff0…

centos7 docker空间不足

今天在使用docker安装镜像的时候,出现报错 查看原因,发现是分区空间不足导致的 所以考虑进行扩容 首先在vmware扩容并没有生效 因为只是扩展的虚拟空间,并不支持扩展分区大小,下面对分区进行扩容 参考: 分区扩容 主…

细说MCU的DAC改变输出信号频率的方法

目录 一、参考硬件 二、改变输出信号的频率 1.建立新工程 2.配置TIM3 三、代码修改 四、查看结果 一、参考硬件 本项目依赖的软件和硬件工程参考本文作者写的文章:细说MCU的DAC1和DAC2各自输出一通道模拟信号的方法-CSDN博客 https://wenchm.blog.csdn.net/a…

【初阶数据结构篇】二叉树算法题

文章目录 二叉树算法题前言单值二叉树相同的树对称二叉树另一棵树的子树二叉树的前序遍历 二叉树算法题 前言 本篇的算法题涉及到链式结构二叉树的实现方法可参考:二叉链实现方法上篇二叉链实现方法下篇 单值二叉树 如果二叉树每个节点都具有相同的值,…

什么情况?我代码没了

前两天检视代码时,发现PR里面有两个提交的描述信息一模一样,于是我提出应该将这两个提交合并成一个,保持提交树的清晰。 1 先储存起来! 而同事这时正在开发别的特性,工作区不是干净的,没法直接执行 git r…

APDL(ANSYS Parametric Design Language)初识

APDL(ANSYS Parametric Design Language)编写涉及使用ANSYS的参数化设计语言来创建、修改和执行有限元分析(FEA)任务。以下是一些关于APDL编写的基本步骤、技巧和示例: 一、基本步骤 了解APDL基础: 熟悉AP…

如何在 Kali Linux 上安装和使用 Docker 和 Docker Compose

Docker 和 Docker Compose 是现代开发者必备的工具,特别是当你需要在不同的环境中部署应用时。本文将详细介绍如何在 Kali Linux 上安装 Docker 和 Docker Compose,并使用它们启动服务。即使你是个技术小白,也能轻松跟随这篇指南完成操作。 …

轻松搞定 Nginx 在 CentOS 和 Ubuntu 上的安装与配置

注:这是对我以前博客进行优化后再次发布的,博客中的截图为以前的。原博客已删除。 如何安装nginx nginx是一款开源、高性能的Web和反向代理服务器,支持HTTP、HTTPS、SMTP、POP3和IMAP协议。由于其轻量级、资源占用少和强大的并发能力&#…

基于vue2 + Ant Design 封装input(输入)下拉Table表格

封装 AInputTable 组件 <!--下拉Table--> <template><div class"input-select-table" ref"inputTableRef" v-clickoutside"handleHide"><div class"input-select-table-input" click"disabled?this:hand…

【C++] 认识C++(二)

前言 &#x1f4da;作者简介&#xff1a;爱编程的小马&#xff0c;是一名大厂后端c程序员。 &#x1f4da;本文收录于C系列&#xff0c;本专栏主要是分享我所了解的c知识&#xff0c;带领大家慢慢从了解c到认识c&#xff0c;持续更新&#xff01; &#x1f4da;相关专栏Linux正…

Base64解码时Illegal base64 character 20问题解决

一&#xff0c;问题 在使用Base64解码的时候 // 这里的keyContent是公钥&#xff0c;一般配置到配置中心里&#xff0c;然后注入到容器里 String publicKeyString keyContent .replaceAll("\\n", "") .replace("-----BEGIN PUBLIC KEY-----",…

sqli-labs(6-10)关通关讲解

sqli-labs(6-10)关通关讲解 Less-6 方法一&#xff1a;手工注入 1.判断闭合 http://localhost/sqli-labs/Less-6/?id1" //报错 http://localhost/sqli-labs/Less-6/?id1" -- //正常 http://localhost/sqli-labs/Less-6/?id1" and 11 -- http://localhos…

Vue Amazing UI:高颜值、高性能的前端组件库

Vue Amazing UI&#xff1a;高颜值、高性能的前端组件库 在当今前端开发中&#xff0c;Vue Amazing UI 作为一款功能强大的 UI 组件库&#xff0c;为开发者提供了全面的解决方案。本文将介绍 Vue Amazing UI 的基本信息、特点以及如何快速部署和使用。 软件简介 Vue Amazing U…

Win11没有记事本怎么办?更新至win11无法右键新建txt文件?

博主更新至Win11系统后目前用了不到一个月时间&#xff0c;今天突然发现 鼠标右键无法新建txt文件 了&#xff0c;一开始还以为Win11系统不支持txt类型文件&#xff0c;遂查找各种网上恢复教程。本文综合了多篇教程的方法&#xff0c;力求一文解决所有可能出现的情况&#xff0…

多路径TCP(MPTCP)研究概述

翻译自《A Brief Review of Multipath TCP for Vehicular Networks》一文的第2节&#xff08;Chao L, Wu C, Yoshinaga T, et al. A brief review of multipath tcp for vehicular networks[J]. Sensors, 2021, 21(8): 2793&#xff09;。 2.2. MPTCP概述 如今&#xff0c;大…

通知:全国135G大流量卡要统一下调至80G,大家抓紧下单!

通知&#xff1a;全国135G大流量卡要统一下调至80G&#xff0c;大家抓紧下单&#xff01; 接运营商最新通知&#xff01;&#xff01; 7月27日起&#xff0c;全国互联网电话流量卡产品市场迎来了新一轮的调整&#xff0c;超过135G的流量卡将陆续下架&#xff0c;现有大流量卡流…

谷粒商城实战笔记-92~96-商品发布和查询

文章目录 Spu列表检索接口。Sku列表检索接口。仓库列表接口。问题记录 这一篇包含如下内容&#xff1a; 92-商品服务-API-新增商品-商品保存其他问题处理93-商品服务-API-商品管理-SPU检索94-商品服务-API-商品管理-SKU检索95-仓储服务-API-仓库管理-整合ware服务&获取仓库…