广州网站建设设计,wordpress 去版权,wordpress站点制作,WordPress修改用户IP插件题目目录1.简述DNS分离解析的工作原理#xff0c;关键配置2.apache有几种工作模式#xff0c;分别简述两种工作模式及其优缺点#xff1f;3.写出172.0.0.38/27 的网络id与广播地址4.写出下列服务使用的传输层协议#xff08;TCP/UDP#xff09;及默认端口5.在局域网想获得…
题目目录1.简述DNS分离解析的工作原理关键配置2.apache有几种工作模式分别简述两种工作模式及其优缺点3.写出172.0.0.38/27 的网络id与广播地址4.写出下列服务使用的传输层协议TCP/UDP及默认端口5.在局域网想获得192.168.1.2的MAC地址在系统中如何操作6.TCP通信建立在连接的基础上TCP连接的建立要使用 次握手的过程需要经过 次断开的过程7. TCP和UDP的区别8.TCP对应的应用层协议有哪些 UDP对应的应用层协议有哪些9.访问百度网站有什么方法可以跟踪经过了哪些网络节点?10. 使用awk统计httpd访问日志中每个客户端IP的出现次数11.正则表达式符号: *、、、[]、[^]、{n}分别代表什么含义12.Shell中对变量字串进行截取的方式有哪些13. 编写脚本自动生成一个8位随机密码14.从日志/opt/bjca3/logs/ca_access.log中截取14点到16点的日志将截取的日志导入到/tmp/ca_access.txt中日志格式如下15.编写脚本使用ping命令检测一组IP地址判断是否处于活跃状态。16.如何查看httpd访问日志文件access.log中哪个IP访问最多17.如何修改Linux内核参数调整进程可以打开的最大文件数量18. 如何将一个源码包软件转换称为一个RPM软件包19.简述什么是CDN20.用什么命令可以查看上一次服务器启动时间、上一次谁登陆过服务器?21.Linux系统路由的查看和添加使用什么命令?22.下面哪条命令用来显示一个程序所使用的库文件23.Nginx配置文件中location匹配数据的优先级24.怎么监控Tomcat的内存使用情况25.nginx的优化你都做过哪些26.Tomcat你做过哪些优化27.关于nginx access模块的面试题28.Nginx防盗链防止其他网址链接我的图片或视频资源29.如何加强MySQL安全请给出可行的具体措施30.MySQL数据库cpu飙升到500%的话他怎么处理31.请写出创建存储过程的语法格式32.请描述下列命令在配置MHA集群时的作用33.存储过程与函数的区别34.请阐述MySQL服务有哪些日志文件35.请阐述MySQL主从同步复制的工作过程36.MySQL主从原理37.MySQL主从复制存在哪些问题38.主从延迟产生的原因及解决方案39.判断主从延迟的方法40.Binlog工作模式有哪些各什么特点企业如何选择41.生产一主多从从库宕机如何手工恢复42.误执行drop数据如何通过xtrabackup恢复43.如何做主从数据一致性校验44.MySQL的MHA如何实现45.redis数据持久化的2种方式分别是什么46.简述redis支持的数据类型 至少3种47.请在横线处填写符合题意的答案48.什么是缓存雪崩49.什么是缓存穿透50.什么是缓存击穿1.简述DNS分离解析的工作原理关键配置
答案 DNS分离解析针对同一个域名为不同的客户机提供不同的解析结果 关键配置通过view语句为客户端分类在每个视图内使用match-client来匹配客户机的来源地址每 个视图内都定义目标DNS区域但调用不同的地址库文件
2.apache有几种工作模式分别简述两种工作模式及其优缺点
答案 Prefork、Worker和Event Prefork模式为Apache默认使用的工作模式在该模式下采用的机制是预派生子进程的方式使用单 独的进程来处理不同的请求适合于小访问量的业务场景。
Worker模式使用不同的线程来处理不同的客户端请求控制进程在启动后根据配置文件中的 ThreadsPerChild值得大小在进程下启动相应的线程数这些线程并发的处理客户端的请求。 类似于worker的工作模式最大区别是它解决了keep-alive场景下长期被占用的线程的资源的浪费问题
event模式下会有一个专门的线程来管理这些keep-alive类型的线程当有真实的请求过来的时 候将请求传递给服务线程执行完毕又允许它释放 httpd -V |grep -i “Server MPM”查看工作模式
3.写出172.0.0.38/27 的网络id与广播地址
/27的掩码对应的十进制方式掩码为255.255.255.224编译成二进制为11111111.11111111.11111111.11100000可以看出能变动的主机位为5位所以一个子网最多能容纳主机为 2^532台去掉前后的网络号和广播号可用的主机数为30台。172.16.22.0这段地址按32个地址割接可分为: 172.16.22.0-172.16.22.31 172.16.22.32-172.16.22.63 … 172.16.22.38位于172.16.22.32-172.16.22.63这一段内所以它的网络好是172.16.22.32广播号是172.16.22.63
4.写出下列服务使用的传输层协议TCP/UDP及默认端口
pop3、imap、smtp、dns、windows远程、DHCP、mysql
答案 pop3 tcp 110 imap tcp 143 smtp tcp 25 dns tcp 53、udp 53 windows远程终端服务 mstsc tcp 3389 DHCP 服务端udp 67 客户端udp 68 mysql tcp 3306
5.在局域网想获得192.168.1.2的MAC地址在系统中如何操作
答案 因为有arp协议可以根据ip地址解析mac地址所以使用ping测试对方后输入 arp -a 即可查询arp缓存表 而得到mac地址。
6.TCP通信建立在连接的基础上TCP连接的建立要使用 次握手的过程需要经过 次断开的过程
答案 34
TCP连接的建立三次握手 最开始的时候客户端和服务器都是处于CLOSED状态。主动打开连接的为客户端被动打开连接的是服务器。 1.TCP服务器进程先创建传输控制块TCB时刻准备接受客户进程的连接请求此时服务器就进入了LISTEN监听状态
2.TCP客户进程也是先创建传输控制块TCB然后向服务器发出连接请求报文这是报文首部中的同部位SYN1同时选择一个初始序列号 seqx 此时TCP客户端进程进入了 SYN-SENT同步已发送状态状态。TCP规定SYN报文段SYN1的报文段不能携带数据但需要消耗掉一个序号。
3.TCP服务器收到请求报文后如果同意连接则发出确认报文。确认报文中应该 ACK1SYN1确认号是ackx1同时也要为自己初始化一个序列号 seqy此时TCP服务器进程进入了SYN-RCVD同步收到状态。这个报文也不能携带数据但是同样要消耗一个序号。
4.TCP客户进程收到确认后还要向服务器给出确认。确认报文的ACK1acky1自己的序列号seqx1此时TCP连接建立客户端进入ESTABLISHED已建立连接状态。TCP规定ACK报文段可以携带数据但是如果不携带数据则不消耗序号。
5.当服务器收到客户端的确认后也进入ESTABLISHED状态此后双方就可以开始通信了。 为什么TCP客户端最后还要发送一次确认呢 一句话主要防止已经失效的连接请求报文突然又传送到了服务器从而产生错误。 如果使用的是两次握手建立连接假设有这样一种场景客户端发送了第一个请求连接并且没有丢失只是因为在网络结点中滞留的时间太长了由于TCP的客户端迟迟没有收到确认报文以为服务器没有收到此时重新向服务器发送这条报文此后客户端和服务器经过两次握手完成连接传输数据然后关闭连接。此时此前滞留的那一次请求连接网络通畅了到达了服务器这个报文本该是失效的但是两次握手的机制将会让客户端和服务器再次建立连接这将导致不必要的错误和资源的浪费。 如果采用的是三次握手就算是那一次失效的报文传送过来了服务端接受到了那条失效报文并且回复了确认报文但是客户端不会再次发出确认。由于服务器收不到确认就知道客户端并没有请求连接。 TCP连接的释放四次挥手 数据传输完毕后双方都可释放连接。最开始的时候客户端和服务器都是处于ESTABLISHED状态然后客户端主动关闭服务器被动关闭。 客户端进程发出连接释放报文并且停止发送数据。释放数据报文首部FIN1其序列号为sequ等于前面已经传送过来的数据的最后一个字节的序号加1此时客户端进入FIN-WAIT-1终止等待1状态。 TCP规定FIN报文段即使不携带数据也要消耗一个序号。 服务器收到连接释放报文发出确认报文ACK1acku1并且带上自己的序列号seqv此时服务端就进入了CLOSE-WAIT关闭等待状态。TCP服务器通知高层的应用进程客户端向服务器的方向就释放了这时候处于半关闭状态即客户端已经没有数据要发送了但是服务器若发送数据客户端依然要接受。这个状态还要持续一段时间也就是整个CLOSE-WAIT状态持续的时间。 客户端收到服务器的确认请求后此时客户端就进入FIN-WAIT-2终止等待2状态等待服务器发送连接释放报文在这之前还需要接受服务器发送的最后的数据。 服务器将最后的数据发送完毕后就向客户端发送连接释放报文FIN1acku1由于在半关闭状态服务器很可能又发送了一些数据假定此时的序列号为seqw此时服务器就进入了LAST-ACK最后确认状态等待客户端的确认。 客户端收到服务器的连接释放报文后必须发出确认ACK1ackw1而自己的序列号是sequ1此时客户端就进入了TIME-WAIT时间等待状态。注意此时TCP连接还没有释放必须经过2∗ *∗MSL最长报文段寿命的时间后当客户端撤销相应的TCB后才进入CLOSED状态。 服务器只要收到了客户端发出的确认立即进入CLOSED状态。同样撤销TCB后就结束了这次的TCP连接。可以看到服务器结束TCP连接的时间要比客户端早一些。 为什么客户端最后还要等待2MSL MSLMaximum Segment LifetimeTCP允许不同的实现可以设置不同的MSL值。 第一保证客户端发送的最后一个ACK报文能够到达服务器因为这个ACK报文可能丢失站在服务器的角度看来我已经发送了FINACK报文请求断开了客户端还没有给我回应应该是我发送的请求断开报文它没有收到于是服务器又会重新发送一次而客户端就能在这个2MSL时间段内收到这个重传的报文接着给出回应报文并且会重启2MSL计时器。 第二防止类似与“三次握手”中提到了的“已经失效的连接请求报文段”出现在本连接中。客户端发送完最后一个确认报文后在这个2MSL时间中就可以使本连接持续的时间内所产生的所有报文段都从网络中消失。这样新的连接中不会出现旧连接的请求报文。 为什么建立连接是三次握手关闭连接确是四次挥手呢 建立连接的时候 服务器在LISTEN状态下收到建立连接请求的SYN报文后把ACK和SYN放在一个报文里发送给客户端。 而关闭连接时服务器收到对方的FIN报文时仅仅表示对方不再发送数据了但是还能接收数据而自己也未必全部数据都发送给对方了所以己方可以立即关闭也可以发送一些数据给对方后再发送FIN报文给对方来表示同意现在关闭连接因此己方ACK和FIN一般都会分开发送从而导致多了一次。 如果已经建立了连接但是客户端突然出现故障了怎么办 TCP还设有一个保活计时器显然客户端如果出现故障服务器不能一直等下去白白浪费资源。服务器每收到一次客户端的请求后都会重新复位这个计时器时间通常是设置为2小时若两小时还没有收到客户端的任何数据服务器就会发送一个探测报文段以后每隔75秒发送一次。若一连发送10个探测报文仍然没反应服务器就认为客户端出了故障接着就关闭连接。 TCP有哪几个状态分别是什么意思
CLOSED在超时或者连接关闭时候进入此状态. LISTEN服务器端等待连接的状态。 SYN_SENT客户端发起连接。 SYN_RCVD服务器端接收到了客户端的 SYN此时服务器由 LISTEN 进入 SYN_RCVD状态同时服务器端回应一个 ACK然后再发送一个 SYN 即 SYNACK 给客户端。 ESTABLISHED客户端接收到服务器端的 ACK 包ACKSYN之后也会发送一个 ACK 确认包客户端进入 ESTABLISHED 状态表明客户端这边已经准备好但TCP 需要两端都准备好才可以进行数据传输。服务器端收到客户端的 ACK 之后会从 SYN_RCVD 状态转移到 ESTABLISHED 状态表明服务器端也准备好进行数据传输了。这样客户端和服务器端都是 ESTABLISHED 状态就可以进行后面的数据传输了。所以 ESTABLISHED 也可以说是一个数据传送状态。
FIN_WAIT_1主动关闭的一方执行主动关闭的一方既可以是客户端也可以是服务器端这里以客户端执行主动关闭为例终止连接时发送 FIN 给对方然后等待对方返回 ACK 。
CLOSE_WAIT接收到FIN 之后被动关闭的一方进入此状态。具体动作是接收到 FIN同时发送 ACK。TCP关闭是全双工过程这里客户端执行了主动关闭被动方服务器端接收到FIN 后也需要调用 close 关闭这个 CLOSE_WAIT 就是处于这个状态等待发送 FIN发送了FIN 则进入 LAST_ACK 状 态。
FIN_WAIT_2主动端这里是客户端先执行主动关闭发送FIN然后接收到被动方返回的 ACK 后进入此状态。
LAST_ACK被动方服务器端发起关闭请求由状态2 进入此状态具体动作是发送 FIN给对方同时在接收到ACK 时进入CLOSED状态。
CLOSING两边同时发起关闭请求时主动方会由FIN_WAIT_1 进入此状态等待被动方返回ACK。 TIME_WAIT从状态变迁图看四次挥手操作最后都会经过这样一个状态然后进入CLOSED状态。
7. TCP和UDP的区别
答案 TCP是面向有连接型UDP是面向无连接型 TCP是一对一传输UDP支持一对一、一对多、多对一和多对多的交互通信 TCP是面向字节流的即把应用层传来的报文看成字节流将字节流拆分成大小不等的数据块并添加 TCP首 部UDP是面向报文的对应用层传下来的报文不拆分也不合并仅添加UDP首部 TCP支持传输可靠性的多种措施包括保证包的传输顺序、重发机制、流量控制和拥塞控制UDP仅提 供最基本 的数据传输能力。
8.TCP对应的应用层协议有哪些 UDP对应的应用层协议有哪些
答案 TCP对应的典型的应用层协议 FTP文件传输协议SSH远程登录协议HTTPweb服务器传输超文本到本地浏览器的超文本传输 协议。
UDP对应的典型的应用层协议 DNS域名解析协议TFTP简单文件传输协议SNMP简单网络管理协议。
9.访问百度网站有什么方法可以跟踪经过了哪些网络节点?
答案 windows系统使用tracert命令linux系统使用traceroute命令可以跟踪路由
10. 使用awk统计httpd访问日志中每个客户端IP的出现次数
答案 awk ‘{ip[$1]}END{for(i in ip){print ip[i],i}}’ /var/log/httpd/access_log 备注定义数组数组名称为ip数字的下标为日志文件的第1列也就是客户端的IP地址的目的 在于对客户端进行统计计数客户端IP出现一次计数器就加1。END中的指令在读取完文件后执行通过 循环将所有统计信息输出。 11.正则表达式符号: *、、、[]、[^]、{n}分别代表什么含义
表示匹配前面的字符出现了任意次包括0次 表示匹配前面的字符出现了至少1次1次或多次 表示匹配前面的字符出现了0次或1次 [] 表示集合匹配集合中的任意单个字符 [^] 表示对集合取反 {n} 表示精确匹配前面的字符出现了n次
12.Shell中对变量字串进行截取的方式有哪些
答案 echo ${变量名开始位置长度} #注意起始位置从0开始 expr substr $变量名 开始位置 长度 #注意起始位置从1开始 echo $变量名 | cut -b 开始位置-结束位置 #注意起始位置从1开始
13. 编写脚本自动生成一个8位随机密码
答案
vim test.sh
#!/bin/bash
StrabcdefghijklnmopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ012345 6789
pass
for i in {1..8}
do
num$[RANDOM%${#Str}]
tmp${Str:num:1}
pass$tmp
done
echo $pass14.从日志/opt/bjca3/logs/ca_access.log中截取14点到16点的日志将截取的日志导入到/tmp/ca_access.txt中日志格式如下
[Fri Mar 17 13:59:00 2017] [debug] mod_cmp.c(1600):[client 192.168.97.8] [CMP] CMP_set_status: starting …
[Fri Mar 17 13:59:00 2017] [debug] mod_cmp.c(938):[client 192.168.97.8] [CMP] CMP_cu_integer_set: starting …
[Fri Mar 17 13:59:00 2017] [debug] mod_cmp.c(957):[client 192.168.97.8] [CMP] CMP_cu_integer_set: ending ok …
………
[Fri Mar 17 16:36:00 2017] [debug] mod_cmp.c(1014):[client 192.168.97.8] [CMP] cu_octet_str_set: starting …
[Fri Mar 17 16:36:00 2017] [debug] mod_cmp.c(1037):[client 192.168.97.8] [CMP] cu_octet_str_set: ending ok …答案
awk $413:00:00$416:59:00 ca_access.log15.编写脚本使用ping命令检测一组IP地址判断是否处于活跃状态。
要求range192.168.1.200-192.168.1.220一个IP发送4个ping包ping的过程不能输出信息到终 端
答案
#!/bin/bash
for i in {200..220}
do
ping -c 4 -i 0.2 -W 1 192.168.1.$i /dev/null
if [ $? -ne 0 ];then
echo 192.168.1.$i is down
fi
done16.如何查看httpd访问日志文件access.log中哪个IP访问最多
答案
awk {ip[$1]} END{for(i in ip) {print i,ip[i]}} /var/log/httpd/access_log | sort -nr17.如何修改Linux内核参数调整进程可以打开的最大文件数量
答案 临时规则 ulimit -Hn 数量 ulimit -Sn 数量
永久规则 #vim /etc/security/limit.conf 用户或组 soft nofile 数量 用户或组 hard nofile 数量
18. 如何将一个源码包软件转换称为一个RPM软件包
答案 1安装rpmbuild工具 2首先将源码包放到SOURCES目录下 3然后在SPECS目录下创建一个spec配置文件并按特定格式要求编辑文件内容SPECS文件可以定义软件的描述信息如何编译安装源码软件对什么文件打包封装为RPM安装前和安装后脚本等。 4最后使用rpmbuild -ba spec文件。
19.简述什么是CDN
答案 CDN是内容分发网络通过CDN可以将图片、视频、音频等精通文件分发到全国甚至是全球让每个地 区的用户都可以访问距离自己最近的资源可以起到加速的作用。 国内有哪些比较好的CDN厂商 蓝汛网宿阿里云腾讯云ucloud七牛云
20.用什么命令可以查看上一次服务器启动时间、上一次谁登陆过服务器?
答案 last历史登陆记录uptime系统累计运行的时间who -b(上次启动系统的时间)
21.Linux系统路由的查看和添加使用什么命令?
route -n //查看路由表信息
ip route add 192.168.2.0/24 via 192.168.1.1
//添加路由条目(route add)
//取192.168.2.0/24网络的默认网关是192.168.1.122.下面哪条命令用来显示一个程序所使用的库文件 ldd 程序的绝对路径 比如# ldd /bin/ls命令可以查看ls这个程序调用了哪些库文件 23.Nginx配置文件中location匹配数据的优先级
第一优先级等号类型的优先级最高。一旦匹配成功则不再查找其他匹配项。 第二优先级^~类型表达式。一旦匹配成功则不再查找其他匹配项。 第三优先级正则表达式类型~ ~*的优先级次之。如果有多个location的正则能匹配的话则使用 正则表达式最长的那个。 第四优先级常规字符串匹配类型。按前缀匹配。
location /test {}
location ^~ /test {}
location ~ /test {}
location ~* /test {}
location / {}24.怎么监控Tomcat的内存使用情况
答案 使用JDK自带的jconsole可以比较明了的看到内存的使用情况线程的状态当前加载的类的总量等 JDK自带的jvisualvm可以下载插件(如GC等)可以查看更丰富的信息。如果是分析本地的Tomcat的话 还可以进行内存抽样等检查每个类的使用情况。
25.nginx的优化你都做过哪些
gzip压缩优化expires缓存隐藏软件名称和版本号禁止恶意域名解析禁止通过IP地址访问网站deny ip HTTP请求方法优化防DOS攻击单IP并发连接的控制与连接速率控制严格设置web站点目录的权限 优化最大打开文件数量自定义错误页面nginx日志相关优化访问日志切割轮询 配置文件buffer和cache的优化nginx加密传输优化 (SSL)精简nginx模块状态页面
worker_processes 8;
worker_rlimit_nofile 65535;
use epoll;
client_header_buffer_size 4k;
open_file_cache max65535 inactive60s;
error_page 404 /404.html;
stub_status on;
expires 30d;
limit_req_zone $binary_remote_addr zoneone:10m rate1r/s;
limit_req zoneone burst5;26.Tomcat你做过哪些优化
1.Tomcat的运行模式 bio,nio, apr 一般使用nio模式 bio效率低 apr对系统配置有一些更高的要求
2.关键配置 maxThreads 最大线程数默认是200 minspareThread 最小活跃线程数默认是25 maxqueuesize: 最大等待队列个数
3.影响性能的配置 compression 设置成on开启压缩 禁用AJP连接器 用nginxTomcat的架构用不到AJP enableLookupsfalse 关闭反查域名直接返回ip提高效率 disableUploadTimeoufalse上传是否使用超时机制 acceptCount300 , 当前所有可以使用的处理请求都被使用时传入请求连接最大队列长队超过 个数不予处理默认是100 keepalive timeout120000 场链接保持时间
4.优化jvm /bin/catalina.sh -serverjvm的server工作模式对应的有client工作模式。 使用“java -version”可以查看当前工作 模式
27.关于nginx access模块的面试题
编写一个Nginx的access配置要求允许192.168.3.29/24的机器访问允许10.1.20.6/16这个网段的所 有机器访问允许34.26.157.0/24这个网段访问除此之外的机器不允许访问。
location / {
access 192.168.3.29/24;
access 10.1.20.6/16;
access 34.26.157.0/24;
deny all;
}28.Nginx防盗链防止其他网址链接我的图片或视频资源
Nginx的防盗链原理是加入location项用正则表达式过滤图片或视频文件对于信任的网址可以正常使 用我们的链接 对于不信任的网址则返回相应的错误在配置文件中加入以下代码
# vim /usr/local/nginx/conf/nginx.conf
location ~* \.(jpg|gif|mp4)$ { //正则过滤图片和mp4文件
valid_referers none blocked *.test.com test.com;
//valid_referers定义哪些网址是合法来源比如我的合作伙伴
//从这些网址可以过来,就链接我的资源if ($invalid_referer) { //除了上面定义的合法友情网址其他都算非法网址来源
return 404; //从非法网址来源的链接都直接返回错误
}
}29.如何加强MySQL安全请给出可行的具体措施
1.避免直接从互联网访问mysql数据库确保特定主机才拥有访问权限 2.定期备份数据库 3.禁用或限制远程访问在my.cnf文件里设置bind-address指定ip 4.移除test数据库(默认匿名用户可以访问test数据库) 5.禁用local infile mysql select load_file(“/etc/passwd”); 在my.cnf里[mysqld]下添加set-variablelocal-infile0 6.移除匿名账户和废弃的账户 7.限制mysql数据库用户的权限 8.移除和禁用.mysql_history文件
30.MySQL数据库cpu飙升到500%的话他怎么处理
当 cpu 飙升到 500%时先用操作系统命令 top 命令观察是不是 mysqld 占用导致的如果不是找出 占用高的进程并进行相关处理 如果是 mysqld 造成的show processlist看看里面跑的session 情况是不是有消耗资源的 sql 在运 行。找出消耗高的sql看看执行计划是否准确index是否缺失或者实在是数据量太大造成。 一般来说肯定要 kill 掉这些线程(同时观察 cpu 使用率是否下降)等进行相应的调整(比如说加索引、 改SQL语句、改内存参数)之后再重新跑这些SQL。 也有可能是突然有大量的session连进来导致cpu飙升这种情况就需要跟应用一起来分析为何连接数会 激增再做出相应的调整比如说限制连接数等。
31.请写出创建存储过程的语法格式
use 数据库名 delimiter // create procedure 名称(参数列表) begin 功能代码 end // delimiter ;
32.请描述下列命令在配置MHA集群时的作用
masterha_check_status,masterha_check_ssh,masterha_check_repl,masterha_manager 答案 masterha_check_status 检查mha服务状态 masterha_check_ssh 检查ssh配置 masterha_check_repl 检查主从同步配置 masterha_manager 启动mha服务
33.存储过程与函数的区别
函数只能返回一个变量的限制。而存储过程可以返回多个。 函数是可以嵌入在sql中使用的,可以在select中调用而存储过程不行 存储过程来说可以返回参数而函数只能返回值或者表对象。 存储过程一般是作为一个独立的部分来执行而函数可以作为查询语句的一个部分来调用
34.请阐述MySQL服务有哪些日志文件
错误日志、binlog日志、查询日志、慢查询日志、事务日志、中继日志
35.请阐述MySQL主从同步复制的工作过程
主库binlog日志记录所有改变数据库数据的语句。 从库IO线程负责从master上拉取 binlog 内容放进 自己的relay log中。 从库SQL线程执行relay log中的语句。
36.MySQL主从原理
从库生成两个线程一个I/O线程一个SQL线程 I/O线程去请求主库的binlog并将得到的binlog日志写到relay log(中继日志) 文件中 主库会生成一个 log dump 线程用来给从库I/O线程传binlog SQL线程会读取relay log文件中的日志并解析成具体操作来实现主从的操作一致而最终数据一 致。
37.MySQL主从复制存在哪些问题
MySQL主从复制存在的问题主库宕机后数据可能丢失从库只有一个SQL Thread 主库写压力 大 复制很可能延时。 解决方法 用半同步复制解决数据丢失的问题用并行复制解决从库复制延迟的问题。
38.主从延迟产生的原因及解决方案
可能的原因 1主库的并发比较高的时候产生的DDL数量超过了从库的一个SQL线程所承受的范围那么延时就产 生了。 2还有可能是与从库的大型query语句产生的了锁等待。 3网络抖动
解决方案 1业务的持久化层的实现采用分库架构MySQL服务可平行扩展分散压力。 2单个库读写分离一主多从主写从读分散压力。这样从库压力比主库高保护主库。 3服务的基础架构在业务和MySQL之间加入redis的cache层。降低mysql的读压力。 4不同业务的MySQL物理上放在不同机器分散服务器的压力。 5mysql主从同步加速。 1、sync_binlog在slave端设置为0 2、– logs-slave-updates 从服务器从主服务器接收到的更新不记入它的二进制日志 3、直接禁用slave端的binlog
39.判断主从延迟的方法
可以通过命令 show slave status 查看 比如通过seconds_behind_master的值来判断 NULL - 表示io_thread或是sql_thread有任何一个发生故障也就是该线程的Running状态是No而非Yes 0 - 该值为零是我们极为渴望看到的情况表示主从复制状态正常
40.Binlog工作模式有哪些各什么特点企业如何选择
1.row level行级模式 优点记录数据详细(每行)主从一致 缺点占用大量的磁盘空间降低了磁盘的性能
2.statement level模式(默认) 优点记录的简单内容少 节约了IO提高性能缺点导致主从不一致
3.MIXED混合模式 结合了statement和row模式的优点会根据执行的每一条具体的SQL语句来区分对待记录的日志形式。 对于函数触发器存储过程会自动使用row level模式
企业场景选择 1.互联网公司使用mysql的功能较少(不用存储过程、触发器、函数)选择默认的statement模式。 2.用到mysql的特殊功能(存储过程、触发器、函数)则选则MIXED模式。 3.用到mysql的特殊功能(存储过程、触发器、函数)有希望数据最大化一致则选择row模式。
41.生产一主多从从库宕机如何手工恢复
停止slave导入备份数据配置master.info信息启动slave检查从库状态
42.误执行drop数据如何通过xtrabackup恢复
关闭mysql服务移除mysql的data目录及数据将备份的数据恢复到mysql的data目录启动mysql服务
43.如何做主从数据一致性校验
主从一致性校验有多种工具 例如checksum、 mysqldiff、pt-table-checksum等。
44.MySQL的MHA如何实现
MHA是一套优秀的实现MySQL高可用的解决方案数据库的自动故障切换操作能做到在0~30秒之内完 成MHA能确保在故障切换过程中最大限度保证数据的一致性以达到真正意义上的高可用。 MHA的组成 MHA Manager管理节点
管理所有数据库服务器可以单独部署在一台独立的机器上也可以部署在某台数据库服务器上
MHA Node数据节点
存储数据的MySQL服务器运行在每台MySQL服务器上
MHA工作过程 由Manager定时探测集群中的master节点 当master故障时Manager自动将拥有最新数据的slave提升为新的master。
45.redis数据持久化的2种方式分别是什么
RDB全称 Redis DataBase按照指定时间间隔将内存中的数据集快照写入硬盘。 AOF: 全称Append Only File记录redis服务所有写操作不断的将新的写操作追加 到文件的末尾。
46.简述redis支持的数据类型 至少3种
字符类型:string 列表类型list Hash表类型hash 集合类型:set 有序集合类型:zset
47.请在横线处填写符合题意的答案
Redis服务默认监听端口号 6379 MongoDB服务默认监听端口号 27017 Memcached服务默认监听端口号22122
48.什么是缓存雪崩
Redis不可能把所有的数据都缓存起来(内存昂贵且有限)所以Redis需要对数据设置过期时间并采用 的是惰性删除定期删除两种策略对过期键删除。 如果缓存数据设置的过期时间是相同的并且Redis恰好将这部分数据全部删光了。这就会导致短时间 内这些缓存同时失效全部请求到数据库中造成数据库瞬间压力飙升可能导致数据崩溃。
什么是缓存雪崩 Redis挂掉了请求全部走数据库。 对缓存数据设置相同的过期时间导致某段时间内缓存失效请求全部走数据库。 缓存雪崩如果发生了很可能就把我们的数据库搞垮导致整个服务瘫痪
解决方法 在缓存的时候给过期时间加上一个随机值这样就会大幅度的减少缓存在同一时间过期。 对于Redis挂掉了请求全部走数据库的情况可以提前设计Redis高可用集群。
49.什么是缓存穿透
缓存穿透是指查询一个一定不存在的数据。由于缓存不命中并且出于容错考虑如果从数据库查不到 数据则不写入缓存这将导致这个不存在的数据每次请求都要到数据库去查询失去了缓存的意义请 求的数据在缓存大量不命中导致请求走数据库。缓存穿透如果发生了也可能把我们的数据库搞垮 导致整个服务瘫痪
如何解决缓存穿透 由于请求的参数是不合法的(每次都请求不存在的参数)于是我们可以使用布隆过滤器(BloomFilter)或者 压缩filter提前拦截不合法就不让这个请求到数据库层 当我们从数据库找不到的时候我们也将这个空对象设置到缓存里边去。下次再请求的时候就可以从 缓存里边获取了。这种情况我们一般会将空对象设置一个较短的过期时间。
50.什么是缓存击穿
某一个热点key在不停地扛着高并发当这个热点key在失效的一瞬间持续的高并发访问就击破缓存 直接访问数据库导致数据库宕机。
设置热点数据永不过期 加上互斥锁上面的现象是多个线程同时去查询数据库的这条数据那么我们 可以在第一个查询数据的请求上使用一个互斥锁来锁住它其他的线程走到这一步拿不到锁就等着等第 一个线程查询到了数据然后将数据放到redis缓存起来。后面的线程进来发现已经有缓存了就直接走 缓存。
总结 雪崩是大面积的key缓存失效穿透是redis里不存在这个缓存key击穿是redis某一个热点key突然失 效最终的受害者都是数据库。