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

news2024/11/13 10:01:31

一、数据库管理-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://www.coloradmin.cn/o/1970015.html

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

相关文章

《看漫画学Python》全彩PDF教程,495页深度解析,零基础也能轻松上手!

前言 说起编程语言,Python 也许不是使用最广的,但一定是现在被谈论最多的。随着近年大数据、人工智能的兴起,Python 越来越多的出现在人们的视野中。 在各家公司里,Python 还常被用来做快速原型开发,以便更快验证产品…

PyCharm 中如何使用驭码CodeRider?

极狐GitLab 在 5 月 28 日正式发布了 AI 产品驭码CodeRider,可以使用驭码CodeRider 进行AI 编程 & DevOps 流程处理。现已开启免费试用,登录官网:https://coderider.gitlab.cn/ 即可申请试用。 GitLab 中文版学习资料 驭码CodeRider 官…

【论文学习】基于序列统计的未知无线协议特征提取方法

【参考文献】刘治国,蔡文珠,李运琪,等.基于序列统计的未知无线协议特征提取方法[J].计算机工程,2021,47(11):192-197.DOI:10.19678/j.issn.1000-3428.0059551.【注】本文仅为作者个人学习笔记,如有冒犯,请联系作者删除。 这篇题为《基于序列统计的未知无…

U-Net++原理与实现(含Pytorch和TensorFlow源码)

U-Net原理与实现 引言1. U-Net简介1.1 编码器(Encoder)1.2 解码器(Decoder)1.3 跳跃连接(Skip Connections) 2. U-Net详解2.1 密集跳跃连接2.2 嵌套和多尺度特征融合2.3 参数效率和性能2.4 Pytorch代码2.5 …

conda搭建环境,pycham使用

相信学习了tensorflowjs后一定不会满足,毕竟tensorflowjs使用场景以及开源度远不及pyhton的tensorflow,所以不要犹豫,开始使用python吧,有ChatGPT帮助,比想象的简单很多 python环境安装 conda环境安装 推荐大家直接…

[STM32][Bootloader][教程]STM32 HAL库 Bootloader开发和测试教程

0. 项目移植 对于不想知道其执行过程的朋友来说,可以直接移植,我的板子是STM32F411CER6, 512K M4内核 项目地址: Bootloader(可以自己写标志位用于自测,项目中这部分代码已经被注释,可以打开自行测试&…

中国智能物流头部集成商的“江湖地位”及其“独门秘笈”

导语 大家好,我是社长,老K。专注分享智能制造和智能仓储物流等内容。 物流仓储自动化领域犹如一片充满机遇与挑战的江湖,各大企业群雄逐鹿,各展所长。这些企业,如同金庸小说中的武林高手,不仅拥有深厚的内功…

后台列表复制功能

html&#xff1a; <el-button click"copy(row)">复制</el-button><!-- 复制弹框 --> <el-dialog :close-on-click-modal"false" title"复制" width"600px" :visible.sync"copyVisible" append-to-bod…

博世战胜三星,577亿最大笔收购,豪赌杀入自动化新业务

导语 大家好&#xff0c;我是社长&#xff0c;老K。专注分享智能制造和智能仓储物流等内容。 新书《智能物流系统构成与技术实践》 德国工业巨头博世再次震惊业界&#xff01;近日&#xff0c;这家总部位于斯图加特的科技公司以74亿欧元&#xff08;约合人民币577亿&#xff09…

自动化测试常用函数(Java方向)

目录 一、元素的定位 1.1 cssSelector 1.2 xpath 1.2.1 获取HTML页面所有的节点 1.2.2 获取HTML页面指定的节点 1.2.3 获取⼀个节点中的直接子节点 1.2.4 获取⼀个节点的父节点 1.2.5 实现节点属性的匹配 1.2.6 使用指定索引的方式获取对应的节点内容 二、操作测试对…

麒麟系统如何删除光盘刻录痕迹??

&#x1f3c6;本文收录于《CSDN问答解惑-专业版》专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收…

一文解读ReentrantLock

本期说一下ReentrantLock的相关面试题。 Lock接口 是JDK层面锁 悲观锁 可重入锁。&#xff08;可重入锁&#xff08;Reentrant Lock&#xff09;是一种支持线程重复获取锁的锁机制。当一个线程已经获得了可重入锁后&#xff0c;它可以再次请求该锁而不会被阻塞&#xff0c;这就…

第G6周:CycleGAN实战

本文为365天深度学习训练营 中的学习记录博客 原作者&#xff1a;K同学啊 可参考论文&#xff1a;《Unpaired Image-to-Image Translation》 1、CycleGAN 能做什么&#xff1f; CycleGAN的一个重要应用领域是Domain Adaptation&#xff08;域迁移&#xff1a;可以通俗的理解为…

Stable Diffusion 使用详解(5)---- 光影效果与场景融入

目录 背景 底模选取 提示词 ControlNet openpose illumination 效果 背景 有一家服装品牌店&#xff0c;需要绘制一款模特穿着某个英文LOG的漂亮服装&#xff0c;这是一种很常见UI作画需求&#xff0c;这类需求实际上可以透过选取正确的底模 controlNet 进行完美的实现…

vite vue3 Webstorm multiple export width the same name “default“

系统格式不一样&#xff0c;导致代码文件格式冲突导致的&#xff0c;解决方法找到对应的文件&#xff0c;将文件类型切换成LF。

软件测试--兼容性测试

兼容性测试综述 软件兼容性测试是指检查软件之间是否能够正确的交互和共享信息 交互可以同时运行于同一台计算机上的两个程序之间&#xff0c;甚至在相隔几千公里通过因特网连接的不同计算机上的两个程序之间进行。还可以离线介质如导出到介质然后导入到其他计算机的其他软件…

2024年最新护眼台灯攻略:孩视宝、飞利浦和书客护眼台灯哪个好

在当今数字时代&#xff0c;无论是工作还是学习&#xff0c;长时间面对电子屏幕已成为日常。这对眼睛健康提出了挑战&#xff0c;尤其是对于成长中的孩子&#xff0c;正确的照明环境对保护视力至关重要。因此&#xff0c;选择一款高质量的护眼台灯成为了许多家庭的刚需。 如今…

OPenCV高级编程——OPenCV形态学之腐蚀、膨胀、开运算、闭运算、形态学梯度等详解

目录 引言 形态学基础 结构元素&#xff08;Structuring Element&#xff09; 基本形态学操作 腐蚀&#xff08;Erosion&#xff09; 膨胀&#xff08;Dilation&#xff09; 开运算&#xff08;Opening&#xff09; 闭运算&#xff08;Closing&#xff09; 高级形态学…

读零信任网络:在不可信网络中构建安全系统06授权

1. 授权 1.1. 授权决策不容忽视&#xff0c;所有访问请求都必须被授权 1.2. 数据存储系统和其他各支撑子系统是授权的基石 1.2.1. 子系统提供访问控制的权威数据源和评估依据&#xff0c;直接影响授权决策 1.2.2. 谨慎区分各子系统的职责和能力&#xff0c;需要将其严格隔离…

高数经典反例记录(持续更新)

这篇博客总结了一些易混淆的概念以及经典反例&#xff0c;全部看完会有收获的&#xff0c;后期可能会继续补充&#xff01; 1.概念模糊 2.极限存在/不存在问题