Linux节点知识归纳

一、选择题

1.数据库事务的特性有(ABCD)
A.原子性
B.一致性
C.隔离性
D.持久性

事务是并发控制的基本单位,保证事务ACID的特性是事务处理的重要任务,而并发操作有可能会破坏其ACID特性。
所以事务是针对并发而言的,即 对 数据 在并发操作时保驾护航。

原子性(Atomicity):事务开始后所有操作,要么全部做完,要么全部不做,不可能停滞在中间环节。事务执行过程中出错,会回滚到事务开始前的状态,所有的操作就像没有发生一样。也就是说事务是一个不可分割的整体,就像化学中学过的原子,是物质构成的基本单位。

一致性(Consistency):事务开始前和结束后,数据库的完整性约束没有被破坏 。比如A向B转账,不可能A扣了钱,B却没收到。

隔离性(Isolation):同一时间,只允许一个事务请求同一数据,不同的事务之间彼此没有任何干扰。比如A正在从一张银行卡中取钱,在A取钱的过程结束前,B不能向这张卡转账。

持久性(Durability):事务完成后,事务对数据库的所有更新将被保存到数据库,不能回滚。

2.以下关于Mysql的事务隔离级别说法正确的是(AB)
A 未提交读:容许脏读,其他事务只要修改了数据,即使未提交,本事务也能看到修改后的数据值。
B未提交读:可能读取到其他会话中未提交事务修改的数据。
C提交读:容许脏读,其他事务只要修改了数据,即使未提交,本事务也能看到修改后的数据值。
D.提交读:可能读取到其他会话中未提交事务修改的数据。
在这里插入图片描述

事务的并发问题:
1、脏读:事务A读取了事务B更新的数据,然后B回滚操作,那么A读取到的数据是脏数据
2、不可重复读:事务 A 多次读取同一数据,事务 B 在事务A多次读取的过程中,对数据作了更新并提交,导致事务A多次读取同一数据时,结果 不一致。
3、幻读:系统管理员A将数据库中所有学生的成绩从具体分数改为ABCDE等级,但是系统管理员B就在这个时候插入了一条具体分数的记录,当系统管理员A改结束后发现还有一条记录没有改过来,就好像发生了幻觉一样,这就叫幻读。

小结:
不可重复读的和幻读很容易混淆,不可重复读侧重于修改,幻读侧重于新增或删除。解决不可重复读的问题只需锁住满足条件的行,解决幻读需要锁表

补充:
1、事务隔离级别为读提交时,写数据只会锁住相应的行
2、事务隔离级别为可重复读时,如果检索条件有索引(包括主键索引)的时候,默认加锁方式是next-key 锁;如果检索条件没有索引,更新数据时会锁住整张表。一个间隙被事务加了锁,其他事务是不能在这个间隙插入记录的,这样可以防止幻读。
3、事务隔离级别为串行化时,读写数据都会锁住整张表
4、隔离级别越高,越能保证数据的完整性和一致性,但是对并发性能的影响也越大。

3.以下关于数据库索引的说法正确的是(ABD)
A.数据库索引是数据库管理系统中一个排序的数据结构,以协助快速查询、更新数据库中数据。
B.B_TREE索引加速了数据访问,因为存储引擎不会再去扫描整张表得到需要的数据。
C.B_TREE从子节点开始,子节点保存了根节点的指针,存储引擎会根据指针快速寻找数据。
D.MyISAM和InnoDB都使用B_TREE作为引擎结构。

索引是数据库中一列或者多列的值进行排序的一种结构,使用索引可提高数据库中特定数据的查询速
度。
MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度。
索引分单列索引和组合索引。单列索引,即一个索引只包含单个列,一个表可以有多个单列索引,但这
不是组合索引。组合索引,即一个索引包含多个列。

创建索引时,你需要确保该索引是应用在 SQL 查询语句的条件(一般作为 WHERE 子句的条件)。

实际上,索引也是一张表,该表保存了主键与索引字段,并指向实体表的记录。

上面都在说使用索引的好处,但过多的使用索引将会造成滥用。因此索引也会有它的缺点:虽然索引大
大提高了查询速度,同时却会降低更新表的速度,如对表进行INSERT、UPDATE和DELETE。因为更新
表时,MySQL不仅要保存数据,还要保存一下索引文件。
建立索引会占用磁盘空间的索引文件。

4.关于数据库存储引擎MyISAM和InnoDB的区别说法正确的是(BC)
A InnoDB和MyISAM都支持事务。
B MyISAM适合查询以及插入为主的应用,InnoDB适合频繁频繁修改以及设计到安全性较高的应用。
CMyISAM支持全文类型索引,而InnoDB不支持全文索引。
Dselect count(*) from table where id=101时,InnoDB需要扫描整个表计算行数,MyISAM只需要独处保存好的总行数。

事务:
MyISAM存储引擎不支持事务,它强调的是高性能的查询,适合读多写少、原子性要求低的情形。
对于InnoDB存储引擎则提供了较为完善的事务支持,一共支持4个等级的事务隔离级别:未提交读(ISOLATION_READ_UNCOMMITTED)、已提交读(ISOLATION_READ_COMMITTED)、可重复读(ISOLATION_REPEATABLE_READ)、可序列化(ISOLATION_SERIALIZABLE)。

未提交读是最低的隔离级别,允许读取未提交的事务变更,会导致脏读、不可重复读和幻读。
已提交读是MySQL默认的隔离级别,允许读取事务提交后的结果,但是依然可能发生不可重复读和幻读问题。
可重复读对同一字段多次读取都是一致的,但是由于Inno DB的Gap Lock算法的存在,并不会导致幻读问题,但是对于Oracle或者SQL Server,则会发生幻读。
可序列化是最高级别的隔离级别,它要求同一时间最多只能有一个事务在执行,但是会严重影响数据库的性能。
同时,对于较高的隔离级别可能更容易造成锁冲突和死锁。

存储结构
(1)MyISAM存储引擎
MyISAM将一张表的结构和内容分为三个文件:
1、表结构文件,后缀名为frm
2、索引文件,后缀名为MYI
3、数据文件,后缀名为MYD
索引文件保存记录所在的数据文件的位置,通过读取索引文件获取到位置信息后,再通过读取数据文件快速取得数据。
在这里插入图片描述
上图中,user_id为主键,绿色的表格代表数据文件,索引文件只记录user_id的值及其数据文件的物理位置。
(2)InnoDB存储引擎
相比MyISAM,InnoDB只有两个文件:
1、表结构文件,后缀名为frm
2、数据、索引文件,后缀名为ibd
InnoDB采用了聚簇索引的方式实现B-Tree索引,聚簇索引的实现方式是将数据行和相邻主键紧凑地存入文件中。
对于主键索引,即存储索引值(主键的值),也存储每列的数据。如果没有设置主键,那么会尝试将外键作为主键。如果也没有外键,那么会自动生成一个隐藏的ROWID做主键。在这里插入图片描述
可以看出,数据文件本身也是索引文件。

MySQL一共提供了四种索引实现:
B-Tree索引:最常见的索引类型,通过B树来实现数据的快速访问
HASH索引:通过构造哈希表来实现数据的快速访问,只有Memory引擎支持
R-Tree索引:通过空间索引来实现数据快速访问
Full-Text索引:全文索引,用于快速检索较长的文本。
在这里插入图片描述
1、InnoDB支持外键,MyISAM不支持外键。
2、对于SQL语句SELECT COUNT(*) FROM table,InnoDB需要对整张表进行读取才能得出结果。而MyISAM不同,MyISAM文件保存了整张表的记录,可以直接给出结果。但是如果加上了where条件,InnoDB和MyISAM都需要扫描整表给出结果。
3、对多CPU的优化
在单线程的情况下,MyISAM读取、修改速度要比InnoDB快,但是在多线程的情况下,InnoDB读取、修改速度显著提升,而MyISAM在多CPU的情况下几乎没有提升:
4、对于SQL语句DELETE FROM table,InnoDB不会直接删除数据文件,而是一行行删除。对于MyISAM则是直接删除文件重新建立表
5、InnoDB存储引擎的表有着可靠的崩溃恢复机制,数据较容易恢复。MyISAM数据恢复较为困难。

使用场景
1、如果应用程序对数据的一致性要求比较高,那么需要选择InnoDB,因为InnoDB支持事务和外键
2、以读操作为主的业务,适合使用MyISAM。对于读多写多的业务,适合使用InnoDB。

5.关于delete、drop、truncate的区别,以下描述正确的是(ABCD)
A truncate和delete只删除数据,不删除表结构,drop删除表结构,并且释放所占空间。
B数据删除的速度,drop>truncate>delete。
C delete属于DML语言,需要事务管理,commit之后才能生效。drop和truncate数据DDL语言,操作立刻生效,不可回滚。
D 对于有外键关系的表,不能使用truncate而应该使用不带where子句的delete语句。

1)DELETE语句执行删除的过程是每次从表中删除一行,并且同时将该行的删除操作作为事务记录在日志中保存以便进行进行回滚操作。
TRUNCATE TABLE 则一次性地从表中删除所有的数据并不把单独的删除操作记录记入日志保存,删除行是不能恢复的。并且在删除的过程中不会激活与表有关的删除触发器。执行速度快。
(2)表和索引所占空间。
当表被TRUNCATE 后,这个表和索引所占用的空间会恢复到初始大小,
DELETE操作不会减少表或索引所占用的空间。
drop语句将表所占用的空间全释放掉。
(3)一般而言,drop > truncate > delete
(4)应用范围。
TRUNCATE 只能对TABLE; DELETE可以是table和view
(5)TRUNCATE 和DELETE只删除数据, DROP则删除整个表(结构和数据)。
(6)truncate与不带where的delete :只删除数据,而不删除表的结构(定义)drop语句将删除表的结构被依赖的约束(constrain),触发器(trigger)索引(index);依赖于该表的存储过程/函数将被保留,但其状态会变为:invalid。
(7)delete语句为DML(data maintain Language),这个操作会被放到 rollback segment中,事务提交后才生效。如果有相应的 tigger,执行的时候将被触发。
(8)truncate、drop是DLL(data define language),操作立即生效,原数据不放到 rollback segment中,不能回滚
(9)在没有备份情况下,谨慎使用 drop 与 truncate。要删除部分数据行采用delete且注意结合where来约束影响范围。回滚段要足够大。要删除表用drop;若想保留表而将表中数据删除,如果于事务无关,用truncate即可实现。如果和事务有关,或老师想触发trigger,还是用delete。
(10) Truncate table 表名 速度快,而且效率高,因为:
truncate table 在功能上与不带 WHERE 子句的 DELETE 语句相同:二者均删除表中的全部行。但 TRUNCATE TABLE 比 DELETE 速度快,且使用的系统和事务日志资源少。DELETE 语句每次删除一行,并在事务日志中为所删除的每行记录一项。TRUNCATE TABLE 通过释放存储表数据所用的数据页来删除数据,并且只在事务日志中记录页的释放。
(11) TRUNCATE TABLE 删除表中的所有行,但表结构及其列、约束、索引等保持不变。新行标识所用的计数值重置为该列的种子。如果想保留标识计数值,请改用 DELETE。如果要删除表定义及其数据,请使用 DROP TABLE 语句。
(12) 对于由 FOREIGN KEY 约束引用的表,不能使用 TRUNCATE TABLE,而应使用不带 WHERE 子句的 DELETE 语句。由于 TRUNCATE TABLE 不记录在日志中,所以它不能激活触发器。

6.关于char(4)和varchar(4)的差别描述正确的是(AC)
A.char(4)定义的是固定长度4,存储时,如果字符数不够4位,会在后面用空格补全存入数据库。
B.varchar(4)定义的是固定长度4,存储时,如果字符数不够4位,会在后面用空格补全存入数据库。
C.varchar(4)定义的是边长长度,存储时,如果字符没有达到定义的位数4时,也不会在后面补空格。
D.char(4) 定义的是边长长度,存储时,如果字符没有达到定义的位数4时,也不会在后面补空格。

varchar :对字符占用2个字节,对一个汉字也占用两个字节
char :对字符占用1个字节,对一个汉字占用两个字节
char:使用指定长度的固定长度表示bai的字符串;比如char(du8),则数据库会使zhi用固定的8个字节来存储数据
,不足8为的字符串dao在其后补空字符;
varchar长度是可变的(在设定内)

7.以下检查mysql端口是否运行正常的方法正确的是(ABC)
A lsof -i 3306
B netstat -tunlp|grep 3306
C ss -tulnp|grep 3306
D ps –ef |grep mysql

在终端下输入lsof即可显示系统打开的文件,因为 lsof 需要访问核心内存和各种文件,所以必须以 root 用户的身份运行它才能够充分地发挥其功能。

netstat命令用于显示与IP、TCP、UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况。netstat是在内核中访问网络及相关信息的程序,它能提供TCP连接,TCP和UDP监听,进程内存管理的相关报告。

ss是Socket Statistics的缩写。顾名思义,ss命令可以用来获取socket统计信息,它可以显示和netstat类似的内容。ss的优势在于它能够显示更多更详细的有关TCP和连接状态的信息,而且比netstat更快速更高效。
当服务器的socket连接数量变得非常大时,无论是使用netstat命令还是直接cat /proc/net/tcp,执行速度都会很慢。
ss快的秘诀在于,它利用到了TCP协议栈中tcp_diag。tcp_diag是一个用于分析统计的模块,可以获得Linux 内核中第一手的信息,这就确保了ss的快捷高效。

Linux中的ps命令是Process Status的缩写。ps命令用来列出系统中当前运行的那些进程。ps命令列出的是当前那些进程的快照,
就是执行ps命令的那个时刻的那些进程,如果想要动态的显示进程信息,就可以使用top命令。
要对进程进行监测和控制,首先必须要了解当前进程的情况,也就是需要查看当前进程,而 ps 命令就是最基本同时也是非常强大的进程查看命令。使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等等。总之大部分信息都是可以通过执行该命令得到的。

8.一下属于nginx的特点的是(ABD)
A.处理高并发请求
B.本身是反向代理服务器
C.可实现分布式架构及高可用集群
D.是邮件代理服务器
E.架构采用epoll模型,内在处理机制是线性轮询

Nginx特点:
1,跨平台:Nginx 能够在大多数 Unix like OS编译执行,并且也有Windows的移植版本号。
2,配置异常简单:很easy上手。配置风格跟程序开发一样,神一般的配置。
3,非堵塞、高并发连接:数据复制时,磁盘I/O的第一阶段是非堵塞的。官方測试能够支撑5万并发连接,在实际生产环境中跑到2~3万并发连接数.(这得益于Nginx使用了最新的epoll模型)。
4,事件驱动:通信机制採用epoll模型,支持更大的并发连接。
5,master/worker结构:一个master进程,生成一个或多个worker进程。
6,内存消耗小:处理大并发的请求内存消耗很小。在3万并发连接下,开启的10个Nginx 进程才消耗150M内存(15M*10=150M)。
7,成本低廉:Nginx为开源软件,能够免费使用。而购买F5 BIG-IP、NetScaler等硬件负载均衡交换机则须要十多万至几十万人民币。
8,内置的健康检查功能:假设 Nginx Proxy 后端的某台 Web server宕机了,不会影响前端訪问。
9,节省带宽:支持 GZIP 压缩,能够加入浏览器本地缓存的 Header 头。
10,稳定性高:用于反向代理,宕机的概率微乎其微。
11,nginx代理和后端webserver间无需长连接。
12,接收用户请求是异步的,即先将用户请求所有接收下来,再一次性发送后后端webserver,极大的减轻后端webserver的压力。
13,发送响应报文时,是边接收来自后端webserver的数据,边发送给client的。
14,网络依赖型低。NGINX对网络的依赖程度很低,理论上讲,仅仅要能够ping通就能够实施负载均衡,并且能够有效区分内网和外网流量。
15,支持server检測。NGINX能够依据应用server处理页面返回的状态码、超时信息等检測server是否出现问题,并及时返回错误的请求又一次提交到其他节点上。
16、热部署:在master管理进程与worker工作进程的分离设计,使的Nginx具有热部署的功能,那么在7×24小时不间断服务的前提下,升级Nginx的可执行文件。也可以在不停止服务的情况下修改配置文件,更换日志文件等功能。
在这里插入图片描述

9.nginx的location的优先级规则是(C)
A.= ^~ > ||!|!* > /
B.= ^~ > || > !|!* /
C.= > ^~ > ||!|!* /
D./ > = ^~ > ||!|!*
10.对于以下location的地址重写,当输入http://www.xingyun.com/2015/ccc/bbb/2.html时,将地址重写成(B)
location /2015 {
rewrite ^/2015/(.*)$ /2014/$1 permanent;
}
A.http://www.xingyun.com/2015/ccc/2.html
B.http://www.xingyun.com/2014/ccc/bbb/2.html
C.http://www.xingyun.com/2015/2.html
D.http://www.xingyun.com/2015/bbb/2.html
11.以下哪些是memcache的的特点(ABC)
A.自由开源
B.高性能
C.分布式内存对象缓存系统
D.实例间可通信,提高性能
E.本身可实现数据持久化

在这里插入图片描述

12.以下哪些是redis的的特点(ABCD)
A.支持数据持久化
B.支持的数据类型丰富
C.支持数据备份
D.读写性能高
E.是一个开源的,R语言编写的,支持网络的非关系型数据库

在这里插入图片描述

13.以下那些软件能实现负载均衡(ACEF)
A.LVS
B.Keepalived
C.Haproxy
D.kafka
E.F5
F.nginx
G.keepalived

F5的全称是F5-BIG-IP-GTM,是最流行的硬件负载均衡设备,其并发能力达到百万级。F5的主要特性包括:
多链路的负载均衡和冗余
(1)可以接入多条ISP链路,在链路之间实现负载均衡和高可用。
(2)防火墙负载均衡
(3)F5具有异构防火墙的负载均衡与故障自动排除能力。
(4)服务器负载均衡
这是F5最主要的功能,F5可以配置针对所有的对外提供服务的服务器配置Virtual Server实现负载均衡、健康检查、回话保持等。
(5)高可用
F5设备自身的冗余设计能够保证99.999%的正常运行时间,双机F5的故障切换时间为毫秒级。
使用F5可以配置整个集群的链路冗余和服务器冗余,提高可靠的健康检查机制,以保证高可用。
(6)安全性
与防火墙类似,F5采用缺省拒绝策略,可以为任何站点增加额外的安全保护,防御普通网络攻击,包括DDoS、IP欺骗、SYN攻击、teartop和land攻击、ICMP攻击等。
(7)易于管理
F5提供HTTPS、SSH、Telnet、SNMP等多种管理方式,包含详尽的实时报告和历史纪录报告。同时还提供二次开发包(i-Control)。
(8)其他
F5还提供了SSL加速、软件升级、IP地址过滤、带宽控制等辅助功能。

LVS
基于不同的网络技术,LVS支持多种负载均衡机制。包括:VS/NAT(基于网络地址转换技术)、VS/TUN(基于IP隧道技术)和VS/DR(基于直接路由技术)。不管使用哪种机制,LVS都不直接处理请求,而是将请求转发到后面真正的服务器(Real Server)。不同的机制,决定了响应包如何返回到客户端。

HAProxy的特点是:
1、HAProxy是支持虚拟主机的;
2、能够补充Nginx的一些缺点比如Session的保持,Cookie的引导等工作;
3、支持url检测后端的服务器出问题的检测会有很好的帮助;
4、它跟LVS一样,本身仅仅就只是一款负载均衡软件;
5、HAProxy可以对Mysql读进行负载均衡,对后端的MySQL节点进行检测和负载均衡,不过在后端的MySQL slaves数量超过10台时性能不如LVS;
6、HAProxy的算法多;

Keepalived是Linux下一个轻量级别的高可用解决方案。高可用(High Avalilability,HA),其实两种不同的含义:广义来讲,是指整个系统的高可用行,狭义的来讲就是之主机的冗余和接管,
Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写。Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者在网站中的所有动作流数据。 这种动作(网页浏览,搜索和其他用户的行动)是在现代网络上的许多社会功能的一个关键因素。 这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决。 对于像Hadoop一样的日志数据和离线分析系统,但又要求实时处理的限制,这是一个可行的解决方案。Kafka的目的是通过Hadoop的并行加载机制来统一线上和离线的消息处理,也是为了通过集群来提供实时的消息

14.下列关于nginx控制型号解释正确的是(ABCD)
A. HUP: 这个是重新加载nginx配置文件
B. QUIT:杀死nginx进程
C. USR1:切换日志文件
D. USR2:平滑升级发送信号
15、关于Nginx中worker_processes、worker_cpu_affinity、worker_rlimit_nofile、worker_connections配置项含义解释正确的是(ABCD)?
A. worker_processes:nginx工作进程数量
B. worker_cpu_affinity:cpu个数
C.worker_rlimit_nofile:一个nginx工作进程数量打开文件数量限制
D.worker_connections:每个进程连接最大数量

二、解答题

1.mysql8如何授权anliu用户从172.16.1.0/24访问数据库?

update user set host=’172.16.1.0/24’ where user=‘anliu02’;

2.误操作执行了一个drop库SQL语句,如何完整恢复?

方法一:关闭mysql服务
移除mysql的data目录及数据
将备份的数据恢复到mysql的data目录
启动mysql服务
方法二:用二进制日志恢复。

3.如果发现mysql服务器CPU,或者IO压力很大,怎么定位问题?

首先我会用top命令和iostat命令,定位是什么进程在占用cpu和磁盘io;
如果是mysql的问题,我会登录到数据库,通过show full processlist命令,看现在数据库在执行什么sql语句,是否有语句长时间执行使数据库卡住;
执行show engine innodb status\G命令,查看数据库是否有锁资源争用;
查看mysql慢查询日志,看是否有慢sql;
(开启慢查询日志方法:
log_output=file
slow_query_log=on
long_query_time = 1
slow_query_log_file=/var/log/mysql-slow.log
log_queries_not_using_indexes=on
在mysql中执行 set global slow_query_log=1; 修改全局变量
)找到引起数据库占用资源高的语句,进行优化,该建索引的建索引,索引不合适的删索引,或者根据情况kill掉耗费资源的sql语句等。

4.如何实现nginx的平滑升级?

第一步:编译新的Nginx源码,安装路径需要与旧版本一致
第二步:向主进程发送USR2信号,Nginx会启动一个新版本的Master进程和工作进程,和旧版本一起处理请求。
第三步:向原Nginx主进程发送WINCH信号,它会逐步关闭其下的工作进程(主进程不退出),这时所有请求都会由新版本处理。
第四步:如果需要回退,可向原Nginx主进程发送HUP信号,它会重新启动工作进程,任使用旧版本配置文件。然后可以将新版本Nginx进程杀死(使用QUIT,TERM,或者KIll)
如果不需要回滚,可以将原nginx进程杀死,至此完成热升级。

5.请解释 Nginx 如何处理 HTTP 请求?

首先,nginx在启动时,会解析配置文件,得到需要监听的端口与ip地址,然后在nginx的master进程里面先初始化好这个监控的socket,再进行listen,然后再fork出多个子进程出来, 子进程会竞争accept新的连接。此时,客户端就可以向nginx发起连接了。当客户端与nginx进行三次握手,与nginx建立好一个连接后,此时,某一个子进程会accept成功,然后创建nginx对连接的封装,即ngx_connection_t结构体,接着,根据事件调用相应的事件处理模块,如http模块与客户端进行数据的交换。最后,nginx或客户端来主动关掉连接,到此,一个连接就寿终正寝了。

6.什么是动态资源,什么是静态资源,什么是伪静态?

• 静态资源:一般客户端发送请求到web服务器,web服务器从内存取到相应的文件,返回给客户端,客户端解析并渲染显示出来。
• 动态资源:一般客户端请求的动态资源,先将请求交于web容器,web容器连接数据库,数据库处理数据之后,将内容交给web服务器,web服务器返回给客户端解析渲染处理。
• 伪静态即是网站本身是动态网页如.php、.asp、.aspx等格式动态网页有时这类动态网页还跟“?”加参数来读取数据库内不同资料。

** 7.描述Nginx中 remote_addr、status、http_referer、http_user_agent等变量的含义? **

$http_user_agent:
判断客户端手机什么型号或者浏览器什么类型,可以给指定的型号给定不同的页面。
$http_referer:访问控制返回状态码
$status:查看网站的访问状态等信息,比如连接多少,多少次握手,响应多少请求,
$remote_addr:可以在后面指定ip,如果匹配到这个ip可以通过port_pass代理到
自定义的机器组。

8.常见的Mysql客户端工具有哪些?简述其用途?

Mysql:交互
Mysqladmin:管理
Mysqldump: 备份

9.简述mysql的复制原理及过程?

三个线程:
在主库上把数据更改记录到二进制日志(Binary Log)中。
备库将主库上的日志复制到自己的中继日志(Relay Log)中。
备库读取中继日志中的事件,将其重放到备库数据库之上。

10.解释MySQL外连接、内连接的区别?

内连接:是只有条件的交叉连接,根据某个条件筛选出符合条件的记录,不符合条件的记录不会出现在结果集中,即内连接只连接匹配的行。
外连接:其结果集中不仅包含符合连接条件的行,而且还会包括左表、右表或两个表中的所有数据行,这三种情况依次称之为左外连接,右外连接,和全外连接。左链接以左表为主,右链接以右表为主。

11.如何为MySQL8设置或更新密码?

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql> 
mysql> alter user 'root'@'%' identified with mysql_native_password by "ABC123.com";
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)

12.请解释全备、增备、冷备、热备概念及企业实践经验?

全备:数据库所有数据的一次完整备份,也就是备份当前数据库的所有数据
增备:就在上次备份的基础上备份到现在所有新增的数据
冷备:停止服务的基础上进行备份操作
热备:实行在线进行备份操作,不影响数据库的正常运行
全备在企业中基本上是每周或天一次,其它时间是进行增量备份
热备使用的情况是有两台数据库在同时提供服务的情况,针对归档模式的数据库
冷备使用情况有企业初期,数据量不大且服务器数量不多,可能会执行某些库、表结构等重大操作时

13.MySQL高可用方案有哪些,各自特点,企业如何选择?

低读低写并发、低数据量方案
(1)方案一:双机高可用:
技术:主从复制
特点:从库只是一个备份,在主库正常工作是,存库不承载业务。(存库资源没有充分利用)
(2)主从结构方案
技术:主从复制,读写分离(mycat(点单故障)),故障转移(keepalived)
特点:主库承载写的操作,从库承载读的操作,只有主库故障时,存库承载读写业务。
高读低写并发、低数据量方案
(3)一主多从+读写分离
技术:主从技术,读写分离(mycat(点单故障)),故障转移(keepalived),MHA
特点:当主节点故障时候,从从节点中选举一个主节点。
高读高写并发、低数据量方案
(4)MariaDB Galera Cluster方案
技术:,主从复制,Galera,负载均衡技术(Haproxy,nginx,LVS),高可靠技术(keepalived)
特点:通过Galera 的集群技术来将多个数据库节点组成一个集群,集群中的每个节点
都可接受读写请求,节点之间通过同步的方式保证数据完整可靠;结合(负载均衡和
高可靠技术保证集群节点的正常运行。)剔除异常节点。
高读高写并发、高数据量方案
(5)数据库中间件
技术:主从复制;读写分离(mycat(点单故障)),故障转移(keepalived);MHA;数据分片(mycat)
特点:通过mycat可将数据在不同的集群中分片存取,读写分技术实现读和写的请求分离,需要多个读
写分离集群,然后MHA保证每个集群的主从健壮。

14.如何查看CPU的型号、核心数、线程数?

cat /proc/cpuinfo | grep ‘model name’ |uniq //查看cup型号
cat /proc/cpuinfo | grep “cpu cores” | uniq //查看cpu核心数
grep ‘processor’ /proc/cpuinfo | sort -u | wc -l //cpu线程数

15.解释如何在Nginx服务器上添加模块?

第一步:查看已安装模块以及安装路径。
第二步:编译需添加的模块。
第三步:拷贝新生成的nginx二进制主程序文件。

16.nginx的地址重写功能如何实现,有那些用途?

配置相应的Location规则。
(1)实现伪静态
(2)有效保护网页文件被攻击或jiequ
(3)可实现地址跳转

17.nginx的全局变量request_uri和$request_filename有何区别?

$request_uri :当前请求的文件路径名(不带root指定的路径 /images/a.jpg)
$request_filename :当前请求的文件路径名(带root指定的路径)

18.例举你知道的nginx模块有哪些,其作用是什么?

在这里插入图片描述
19.memcached是如何实现分布式缓存的?

哈希,或者hash
高可用的实现---->一致性hash

20.简述memcached的内存管理机制?

(1) 为了解决数据频繁读写而导致的内存碎片化问题,引入了slab的概念。
(2) 存储过程,通过数据的大小来找slab,对应的slab类型中有空闲块则存储,没有创建一个新的slab。
(3) 这样的存储方式弊端是浪费资源,因此需要根据实际业务优化,设定初始数据的块大小和递增倍数。
(4) 内存的清理机制,“延迟过期”,在没有内存空间的情况下存储数据,
检查有没有过期数据,有覆盖过期数据,没有启动LRU算法,清理最近一次调运时间最长的数据。

21.简述redis的数据持久化原理?

snapshotting : RDB模式:
(1)间歇的持久化,在系统故障时,最近一次快照之后的数据就会丢失。
(2)快照持久化操作是有子线程完成的,主线程任然在处理客户端的请求。
(3)客户端可以出发持久化—“save”: 主线程发起,此时会影响其他客户端的链接,此外该过程不是增量的。
append-only file: AOF模式:
(1)实时的数据持久化,当主线程处理一个客户端请求时,回调一个writer()将命令写入到.aof的文件中。
(2)受OS的影响,writer写入数据到文件时可能数据被操作系统缓存而没有立即存入到文件中;
appendfsync always #接受一次,同步一次
appendfsync everysec #每一秒同步一次数据
appendfsync no #完全取决于操作系统
(3)如何保证持久化的文件中的命令是 有效的,没有冗余的?
主线程产生的子线程快照内存数据,并将其翻译成含命令的临时文件,当临时文件产生后,发送信号给主线程,
下次写时写入到临时文件中,最后用临时文件替换旧的aof文件。

22.简述redis的复制过程和集群原理?

1:当一个从数据库启动时,会向主数据库发送sync命令。
2:主数据库接收到sync命令后会开始在后台保存快照(执行rdb操作),并将保存期间接收到的命令缓存起来
3:当快照完成后,redis会将快照文件和所有缓存的命令发送给从数据库。
4:从数据库收到后,会载入快照文件并执行收到的缓存的命令。

23.简述LVS的三种工作模式的工作过程与原理?

NAT模式的主要实现原理是通过网络地址转换,LB重写请求报文的目标地址(包括IP和MAC),根据预设的调度算法,将请求分派给后端的RS;RS的响应报文通过LB返回时,报文的源地址被重写,修改为LB的MAC和IP,再返回给客户,完成整个负载调度过程。
当用户访问服务器群集提供的服务时,发往虚拟服务器IP(VIP/LB的外部IP地址)的数据包将到达LB
LB检查数据包的目标地址和端口号。如果符合在LVS的规则表中定义添加的服务,则根据调度算法从后端群集中选择一个RS,并将该连接添加到记录已建立连接的哈希表中
然后,将数据包的目标地址和端口重写为所选RS的地址和端口,然后将数据包转发到RS
当传入的数据包符合在LVS的规则表中定义添加的服务并且可以在哈希表中找到所选的RS时,该数据包将被重写并直接转发到所选的RS
当RS处理完请求之后,会把回复数据包返回给LB,此时LB会将数据包的源地址和端口重写为虚拟服务的源地址和端口,然后发送给客户端
连接终止或超时后,连接记录将在哈希表中删除在这里插入图片描述
LVS的NAT模式需要开启LB的内核中的ip_forward功能
echo 1 > /proc/sys/net/ipv4/ip_forward

TUN模式:
客户端请求LVS集群提供的服务,数据包发送到VIP
LB检查数据包的目的地址和端口,如果符合在LVS的规则表中定义添加的服务,则根据调度算法从后端群集中选择一个RS,并将该连接添加到记录已建立连接的哈希表中
LB对请求的数据包进行封装,在VIP外面再封装一层目标RS的IP地址,然后将它发送到对应的RS上
当传入的数据包符合在LVS的规则表中定义添加的服务并且可以在哈希表中找到所选的RS时,该数据包将被直接封装IP并转发到所选的RS
RS接收到数据包后,对其进行解封并且处理请求,然后将响应数据包直接发送到客户端
连接终止或超时后,连接记录将在哈希表中删除在这里插入图片描述
注意在这种模式下的RS可以是在物理位置上分离的服务器(如可以分布在不同地区的机房),只要拥有在任意网络中的任意真实IP即可(相对VIP而言)。此外,此时的RS需要支持IP封装协议并且需要和LB直接配置好IP隧道,同时VIP需要配置到非ARP响应的网卡设备上。

DR模式:
VS/DR通过改写请求报文的MAC地址,将请求发送到RS,而RS将响应直接返回给客户。和VS/TUN技术一样,VS/DR技术可极大地提高集群系统的伸缩性。这种方法没有IP隧道的开销,对集群中的RS也没有必须支持IP隧道协议的要求,但是因为使用的是MAC地址进行二层转发,所以要求LB和RS都有一块网卡连在同一物理网段上。
客户端请求LVS集群提供的服务,数据包发送到VIP
LB检查数据包的目的地址和端口,如果符合在LVS的规则表中定义添加的服务,则根据调度算法从后端群集中选择一个RS,并将该连接添加到记录已建立连接的哈希表中
LB对请求的数据包进行封装,在VIP外面再封装一层目标RS的MAC地址,然后将它发送到对应的RS上
当传入的数据包符合在LVS的规则表中定义添加的服务并且可以在哈希表中找到所选的RS时,该数据包将被直接封装IP并转发到所选的RS
由于RS的本地lo接口上面绑定了VIP,且这时MAC地址是RS自身的MAC地址,所以RS接收到数据包后会处理请求,然后将响应数据包直接发送到客户端
连接终止或超时后,连接记录将在哈希表中删除在这里插入图片描述
由于LB只是简单地对数据包的MAC地址更改为RS的MAC地址并且将其重新发送到局域网中,所以要求LB和RS必须要在同一个局域网中,这样才能直接利用MAC来进行二层传输。

24.简述Keepalived故障切换与健康检查原理?

(1)健康检查
通过TCP/IP模型,在网络层,传输层,应用层探测数据传输的状态判断节点状态是否正常。
(2)故障切换
Keepalived dirctors之间的故障切换转移,是通过VRRP协议来实现的。

25.描述LAMP及LNMP的对比?

LAMP:apache和php的结合,lamp结合的更加紧密,而lnmp需要fpm来连接nginx和php。
lamp相比于lnmp更加稳定。
lnmp占用内存较少,高并发配置比较方便。

三.材料分析

1.材料

location / {
    
    
              echo "/";
      }
      location =/ {
    
    
              echo "=/";
      }
      location =/nginx {
    
    
              echo "nginx";
      }
      location ~ \.(gif|jpg|png|css|js)$ {
    
    
              echo "small: gif/jpg/png/js";
      }
      location ~* \.png$ {
    
    
              echo "all:png";
      }
      location ^~ /static/ {
    
    
              echo "static";
      }
}

1.curl http://www.anttech.com
2.curl http://www.anttech.com/jpg
3.curl http://www.anttech.com/nginx
4.curl http://www.anttech.com/nginx/111
5.curl http://www.anttech.com/static
6.curl http://www.anttech.com/static/
7.curl http://www.anttech.com/static/222
8.curl http://www.anttech.com/11.jpg
9.curl http://www.anttech.com/11.JPG
10.curl http://www.anttech.com/11.png
11.curl http://www.anttech.com/11.PNG
分析以上访问结果是分别什么?

1.curl http://www.anttech.com =/
2.curl http://www.anttech.com/jpg /
3.curl http://www.anttech.com/nginx nginx
4.curl http://www.anttech.com/nginx/111 /
5.curl http://www.anttech.com/static /
6.curl http://www.anttech.com/static/ static
7.curl http://www.anttech.com/static/222 static
8.curl http://www.anttech.com/11.jpg small: gif/jpg/png/js
9.curl http://www.anttech.com/11.JPG /
10.curl http://www.anttech.com/11.png small: gif/jpg/png/js
11.curl http://www.anttech.com/11.PNG all:png

2.材料:
在这里插入图片描述
以上拓扑是某生产环境的web数据链路,Web中传输内容可能包括:文本、图像、文件、音频、等等,在应用效能优化上,不同传输内容将直接影响到客户终端的使用感受。
请从图中的三个位置分析导致web访问慢的问题,并给出解决方案?

(缓存)
位置1:DNS缓存,路由规则
位置2:CDN,边缘节点
位置3:redis,memcache

3.材料:
某企业环境接入权限管控主机因为要承载web的访问请求,同时也承载客户的ssh链接请求的转发。随着公司业务的壮大,使用客户剧增,该控制主机服务性能不够导致web请求包502,偶发会发生ssh中断或延时。
请分析出现以上问题的原因,同时利用所学知识给出解决方案?

在这里插入图片描述

四、思维拓展

1.数据库备份恢复失败应如何处理?

第一步:锁表
第二步:找故障原因,(看日志,drop,恢复数据的线程是不是正常,负载)恢复备份。
第三步:数据补全
第四步:解表

2.如何加强MySQL安全,请给出可行的具体措施?

A.添加访问权限。(避免直接从互联网访问mysql数据库,确保特定主机才拥有访问权限。)
B.定期备份数据库
C.绑定访问IP,在my.cnf文件里设置bind-address指定ip
D.移除test数据库(默认匿名用户可以访问test数据库)mysql_secure_installation
E. 禁用local infile
mysql> select load_file("/etc/passwd");
在my.cnf里[mysqld]下添加local-infile=0
F. 移除和禁用.mysql_history文件
#cat ~/.mysql_history
#export MYSQL_HISTFILE=/dev/null

3.假如给你一千台服务器你如何管理,请给出管理思路?

(1) 资源统计,上架—>资产—>机房.机柜.机位(1,2,3,4,…),服务器的型号,资产编号,。。,CMDB
(2) 组raid,装机,(批量装机)
(3) 系统初始化:安全,网络,系统(调整参数)
(4) 业务初始化
(5) 添加监控、日志平台
(6) 交付

猜你喜欢

转载自blog.csdn.net/weixin_45961525/article/details/107962532
今日推荐