琐碎点防遗忘

目录

001. 事务的四大特性

2. 事务的隔离级别详解

ARP

具体过程:

sar

xargs -i参数详解

常见服务默认端口:

常见风险服务默认端口:

1:/etc/profile 和 /etc/rc.d/rc.local启动顺序

全局文件名称:

zabbix:

服务端口:

进程线程:

正则表达式 边界

边界

单词

\b 单词边界

\B 非单词边界

redis的特点:

SQL语句分类

DNS 解析过程

变量相关:

2.awk中的变量

awk真实案例

 经典案例

破解密码

选择索引的原则(高频面试题)

导致SQL执行慢的原因: 

物理和逻辑备份的区别

TCP_wapper访问控制机制 

Keepalived体系主要模块:

磁盘io查看:

iostat 使用

修改字段

方法一:modify-----不可以改字段名

方法二:change-----可以改字段名

网卡吞吐量查看:

 nginx日志无法删除:

脑裂:

fdisk和gdisk的区别

MBR和GPT

Web服务器性能压力测试工具

安装很简单

基本用法:

例如:

结果分析:

二、webbench

例如:

elk颜色表示:

Linux的启动级别

Http的错误代码含义

RDB方式原理:(快照)

 AOF方式原理:

1.jenkins上线流程

keepalived

nginx中location的匹配顺序?

Nginx的rewrite地址重写的四种标记与区别?

jps

jsp

css和js

jenkins

如何发布和回滚,用jenkins又是怎么实现?

你是怎么备份数据的,包括数据库备份?

接口:

PV

UV

mysql开启慢查询,进程分工


001. 事务的四大特性

事务具有4个基本特征,分别是:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Duration),简称ACID

① 原子性
事务的原子性是指事务必须是一个原子的操作序列单元。事务中包含的各项操作在一次执行过程中,只允许出现两种状态之一,要么都成功,要么都失败

任何一项操作都会导致整个事务的失败,同时其它已经被执行的操作都将被撤销并回滚,只有所有的操作全部成功,整个事务才算是成功完成

② 一致性(Consistency)
事务的一致性是指事务的执行不能破坏数据库数据的完整性和一致性,一个事务在执行之前和执行之后,数据库都必须处以一致性状态。

比如:如果从A账户转账到B账户,不可能因为A账户扣了钱,而B账户没有加钱

③ 隔离性
事务的隔离性是指在并发环境中,并发的事务是互相隔离的,一个事务的执行不能被其它事务干扰。也就是说,不同的事务并发操作相同的数据时,每个事务都有各自完整的数据空间。

一个事务内部的操作及使用的数据对其它并发事务是隔离的,并发执行的各个事务是不能互相干扰的

④ 持久性(Duration)
事务的持久性是指事务一旦提交后,数据库中的数据必须被永久的保存下来。即使服务器系统崩溃或服务器宕机等故障。只要数据库重新启动,那么一定能够将其恢复到事务成功结束后的状态

在事物进行过程中,未结束之前,DML语句是不会更改底层数据,只是将历史操作记录一下,在内存中完成记录。只有在事物结束的时候,而且是成功的结束的时候,才会修改底层硬盘文件中的数据

2. 事务的隔离级别详解

事务的隔离性是指在并发环境中,并发的事务是互相隔离的,一个事务的执行不能被其它事务干扰。也就是说,不同的事务并发操作相同的数据时,每个事务都有各自完整的数据空间。

一个事务内部的操作及使用的数据对其它并发事务是隔离的,并发执行的各个事务是不能互相干扰的。
不同的隔离级别可以解决不同的问题,SQL的标准事务隔离级别包括:

读未提交(read uncommitted): 一个事务还没有提交时,它做的变更就能被别的事务看到。

读提交(read committed): 一个事物提交之后,它做的变更才会被其他事务看到。

可重复读(repeatable read): 一个事物执行过程中看到的数据,总是跟这个事务在启动时看到的数据是一致的。未提交变更对其他事务也是不可见的。

串行化(serializable): 对于同一行记录,写会加“写锁”,读会加“读锁”,当出现锁冲突时,后访问的事务需要等前一个事务执行完成,才能继续执行。

可能导致的问题有

1.脏读: 一个事务读到另一个事务未提交的更新数据。

2.不可重复读: 一个事务两次读同一行数据,可是这两次读到的数据不一样。

3.幻读: 一个事务执行两次查询,但第二次查询比第一次查询多出了一些数据行。


ARP

地址解析协议(Address Resolution Protocol),其基本功能为透过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的顺利进行。

ARP,Address Resolution Protocol,地址解析协议,解析IP地址得到MAC地址,基于数据链路层之上的协议,可以看成和网络层同一层级,通常称为2.5层协议,ARP是网络层与数据链路层的重要枢纽,它解决了网络层(软件)到数据链路层(硬件)的映射。

主机A想要发送数据给主机B,我们知道发送网络报文是一个封装的过程,数据需要在应用层、传输层、网络层、数据链路层封装。

具体过程:

主机A首先在自己的ARP缓存表内查找是否有IP=192.168.0.200这个表项

  • 如果有

把这个表项里MAC地址填入报文以太网帧头部的目标MAC地址内,然后通过网卡发出去

  • 如果没有

则系统的ARP协议层程序会先发一个ARP广播请求报文出去,请求目标MAC地址

“为什么这个ARP请求报文是广播报文?因为不知道对方的MAC地址,又想让对方主机收到这个ARP请求报文, 那么就发一个广播报文,让交换机把ARP请求报文发给这个局域网内除了发送方以外所有的主机,那么肯定可以到达目标主机。

sar

yum  -y  install  sysstat

xargs -i参数详解

加 -i 参数直接用 {}就能代替管道之前的标准输出的内容。

常见服务默认端口:

服务端口
FTP(File Transfer Protocol,文件传输协议)21端口
SSH(Secure Shell Protocol,安全外壳协议)22端口
Telnet(远程终端协议)23端口
STMP(Simple Mail Transfer Protocol,简单邮件传输协议)25端口
DNS(Domain Name System,域名系统)53端口
HTTP(Hyper Text Transfer Protocol,超文本传输协议)80端口
POP3(Post Office Protocol - Version 3,邮局协议版本3)110端口
RPC(Remote Procedure Call,远程过程调用)135端口
SMB(Samba,用于文件、打印机、串口等的共享)139/445端口
HTTPS(Hyper Text Transfer Protocol over SecureSocket Layer,超文本传输安全协议)443端口
Microsoft SQL Server数据库1433端口
Oracle数据库1521端口
Mysql数据库3306端口
RDP(Remote Desktop Protocol 远程桌面服务)3389端口

常见风险服务默认端口:

 zabbix-server 监听端口:10051,Agent 监控端口 10050

服务端口
Apache/Tomcat/Nginx等中间件80/8080端口
RMI服务1090、1099端口
Zookeeper服务2181端口
Docker2375端口
VNC5900/5901端口
Redis数据库6379端口
WebLogic7001端口
Memcache服务11211端口
MongoDB数据库27017端口

echo 3 > /proc/sys/vm/drop_caches :清理内存

lscpu  查看cpu核心数

lscpu | awk  'NR==4'

lscpu | awk  'NR==4 {print $2}'

yum    history

yum    history    undo    ID号 


zabbix-server 监听端口:10051  ,Agent 监控端口 10050。

在刚登录Linux时,首先启动 /etc/profile 文件,然后再启动用户目录下的 ~/.bash_profile、
~/.bash_login或 /.profile文件中的其中一个,执行的顺序为:/.bash_profile、 ~/.bash_login、
~/.profile。如果 ~/.bash_profile文件存在的话,一般还会执行 ~/.bashrc文件。

1:/etc/profile 和 /etc/rc.d/rc.local启动顺序

前几天装了AS4 ,想让Tomcat开机自动启动就在/etc/rc.d/rc.local中加入了/usr/local/tomcat/bin/startup.sh

但是发现tomcat不能自动启动,后来发现是因为 /etc/rc.d/rc.local  先于/etc/profile 启动,而我的环境变量是在profile里面设置的所以tomcat启动时找不到环境变量。后来修改了一下把环境变量添加到了startup.sh里面就ok了!


全局文件名称:

/etc/profile

/etc/bashrc

用户私有文件:

登录文件

用户根目录/.bashrc

用户根目录/.bash_profile

历史文件

用户根目录/.bash_history

退出文件

用户根目录/.bash_logout

在刚登录Linux时,首先启动 /etc/profile 文件,然后在profile文件里面去启动 /etc/profile.d 目录里面的脚本,可以查看 /etc/profile 文件

然后再启动用户根目录下的 .bash_profile文件,查看.bash_profile 文件

.bash_profile文件还会判断.bashrc文件是否存在并执行。

再查看.bashrc文件

它会再去判断并执行 /etc/bashrc

各文件作用域说明,在网上找到了以下说明:

(1)/etc/profile: 此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行. 并从/etc/profile.d目录的配置文件中搜集shell的设置。

(2)/etc/bashrc: 为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取。

(3)~/.bash_profile: 每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件。

(4)~/.bashrc: 该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该该文件被读取。

(5)~/.bash_logout:当每次退出系统(退出bash shell)时,执行该文件. 另外,/etc/profile中设定的变量(全局)的可以作用于任何用户,而~/.bashrc等中设定的变量(局部)只能继承/etc /profile中的变量,他们是"父子"关系。

(6)~/.bash_profile 是交互式、login 方式进入 bash 运行的~/.bashrc 是交互式 non-login 方式进入 bash 运行的通常二者设置大致相同,所以通常前者会调用后者。


zabbix:

Zabbix 是企业级监控系统的开源解决方案,是一个基于 WEB 界面的分布式监控服务器。

主要特点:

Zabbix 安装不配置简单,学习成本低,支持多语言(包括中文),免费开源,自动发现服务器与网络设备,分布式监视,良好的 WEB 界面交互等通知功能。

Zabbix 主要监控服务器:CPU 负载、内存使用、磁盘使用、网络状态、端口监视、日志监视。

Zabbix 运行机制

Zabbix Server 可以通过 SNMP,Zabbix agent,Ping,端口监视等方法监控服务器状态。可以在 Linux,Solaris,HP-UX,AIX,FreeBSD,OpenBSD,OX X,Windows 多平台运行。

Zabbix Agent 安装在被监控的服务器上,主要完成对内存,CPU,磁盘等信息收集。

Agent [ˈeɪdʒənt] 代理人

Zabbix 运行过程:

(1)Agent 从服务器中收集相关数据,传送给 Zabbix Server

(2)Server 把数据存储到数据库中

(3)Server 把数据分析之后以 Web 页面,展示出来。

zabbix-server 监听端口:10051 ; Agent 监控端口 10050 。

服务端安装 Zabbix Server 和 Zabbix Agent 两个服务,客户端只安装 Zabbix Agent 一个服务。


服务端口:

1、ansible    自动化运维工具,Ansible通过SSH协议实现远程节点和管理节点之间的通信。默认使用ssh 22 号端口。

2、Gitlab    版本控制,git是一个分布式版本控制软件gitlab安装完成默认访问的是80端口,这个其实是gitlab自带nigix的端口。 

3、Jenkins       jenkins默认端口8080

4、Elk:Logstash;filebeat;kafka;kibana;

    kibana   5601

    elasticsearch   9200  9300    head:9100    crebro:9000

    logstash   9600

    kafka    9092

   Zookeeper  ,(默认端口2181),Kafka会按照默认,在9092端口上运行,并连接      zookeeper的默认端口:2181。

5、Jumpserver    8080/tcp

6、Keepalived    keepalvied 使用 112 端口通信

7、Haproxy    80haproxy server安装web服务(apache或nginx)的默认端口为80,和haproxy配置文件设置的端口冲突导致,关闭web服务或更改端口即可。

8、Mysql    3306

9、Redis    6379

10、Nginx    80

11、http    80 ,8080

12、https    443

13、openvpn    OpenVPN 的默认端口号现在是 1194,由 IANA 基于官方端口编号分配。OpenVPN 2.0-beta16 和较早时用的 5000 作为默认的端口。

14、RabbitMQ    RabbitMQ默认端口 4369

15、Tomcat    8080     

端口:

8005:这个端口负责监听关闭Tomcat的请求 shutdown:向以上端口发送的关闭服务器的命令字符串。

8009: 与其他http服务通信接口。

8080: 建立http也就是客户端访问连接用,可以修改。

16、ssh       22

17、telnet     服务的默认端口是 23

18、ftp          服务的默认端口号是 21,传数据是20。(被动模式)

19、php-fpm     9000

20、memcache    11211 memcache是一套分布式的高速缓存系统

21、smtp   25  SMTPSimple Mail Transfer Protocol)即简单邮件传输协议

22、DNS    53

23、Zabbix     zabbix-server 监听端口:10051Agent 监控端口 10050Zabbix 是企业级监控系统的开源解决方案,是一个基于 WEB 界面的分布式监控服务器。

23、orkol数据库端口:1521


1、80端口:是为HTTP (HyperText Transport Protocol)即超文本传输协议开放的端口。

2、8080端口∶是被用于WWW代理服务的,可以实现网页浏览。

问题:gitlab和zabbix部署在同一台服务器上导致80端口冲突

3、修改gitlab默认端口为8088:

第一步:修改/etc/gitlab/gitlab.rb文件
nginx['listen_port'] = 8088    

第二步:修改默认的gitlab nginx的web服务80端 /var/opt/gitlab/nginx/conf/gitlab-http.conf
server { ## HTTPS server
listen *:8088;

第三步:初始化并重启组件:

gitlab-ctl reconfigure
gitlab-ctl restart

第四步:浏览器访问http://ip:8088

4、jenkins默认端口8080,8080端口是常用端口,为了防止和其他软件冲突,需要修改一下

修改/etc/init.d/jenkins脚本,修改do_start函数的check_tcp_port命令,将端口8080改为8081

修改/etc/default/jenkins文件,将端口改为8081

重启jenkins

Jenkins包修改默认端口号:

下载war包:

wget http://mirrors.jenkins.io/war-stable/2.263.1/jenkinswar

后台运行并设置端口号:

nohup java -jar jenkins.war --httpPort=8899 &

修改已设置的端口号:

nohup java -jar jenkins.war --ajp13Port=-1 --httpPort=8088   &


进程线程:

进程和线程的区别:

线程:线程来源于进程。

线程模式需要事先开启进程。

线程模式并发量高。并发数: 系统同一时候处理的请求数量(事务数)

进程:进程稳定性高,线程稳定性低。

进程独占内存。

线程共享进程内存,一个进程可有多个线程。


正则表达式 边界:\b 和 \B_皮蛋很白的博客-CSDN博客_正则表达式\b

正则表达式 边界

正则表达式中:

  • \b 表示单词边界
  • \B 表示非单词边界,应理解为(非单词)边界,而不是非(单词边界),它仍然匹配的是边界

边界

我将正则中的位置分为 字符的占位 和 字符的间隙。

字符的占位是显式的位置。

以 I'm iron man 为例。

肉眼可见的字母 符号 空格都是可以占位的字符,也就是可以用下标获取到字符的位置。

字符的间隙是隐式的位置。

即显示位置之间的位置,比如I'之间的位置,字符串开头和I之间的位置等。

边界 指的是占位的字符左右的间隙位置。

单词

正则中所说的单词指的是 \w 可以匹配的字符,即数字、大小写字母以及下划线 [0-9a-zA-Z_]

\b 单词边界

单词边界匹配的就是这样的间隙位置:

左边占位的字符或右边占位的字符,至少有一个不是 \w

// 只有首尾位置匹配
console.log('0aZ_'.replace(/\b/g, '.')) // .0aZ_.

// +不是\w,所以它的左右间隙都可以被匹配
console.log('a+a'.replace(/\b/g, '.')) // .a.+.a.

// 空格也不是\w,所以它的左右间隙都可以被匹配
console.log('a a'.replace(/\b/g, '.')) // .a. .a.

\B 非单词边界

理解了 \b\B就好理解了。

它匹配的也是 边界 ,针对的是 与 \b 相反 的 非单词(\W)。

也就是,左右占位的字符,都必须是 \w

或者说 所有不能被\b匹配的 边界

console.log('0aZ_'.replace(/\B/g, '.')) // 0.a.Z._

console.log('a+a'.replace(/\B/g, '.')) // a+a

console.log('a a'.replace(/\B/g, '.')) // a a

ansible-galaxy  init nginx      #下载服务角色模板

 

 

 

 解释:

**1. 以特殊符号分隔开来的字符串识别为单词 **

2. \b表示匹配文本中单词的开头或结尾字符,同时匹配字符组成的单词,\bxx表示匹配xx字符开头单词的xx位置,xx\b表示匹配xx字符结尾单词的xx位置,\bxx\b表示匹配单独以xx字符组成的单词

**3. \B表示匹配文本中非单词开头和结尾字符,\Bxx表示匹配xx字符结尾单词的xx位置,xx\B表示匹配xx字符开头单词的xx位置,\Bxx\B表示匹配xx字符在文本中非单词开头和结尾的xx位置 **

**4. \bxx\B表示匹配xx字符开头单词但不包括xx字符组成的单词,定位单词的xx位置 **

**5. \Bxx\b表示匹配xx字符结尾单词但不包括xx字符组成的单词,定位单词的xx位置 **


redis的特点:

1.丰富的数据结构  -----  string, list, set, zset, hash  等数据结构的存储

2.支持持久化

3.支持事务   ---------------  事务是指“一个完整的动作,要么全部执行,要么什么也没有做”。

4.支持主从


SQL语句分类

数据定义语言DDL
数据查询语言DQL
数据操纵语言DML
数据控制功能DCL

1、数据定义语言DDL(Data Definition Language)

CREATE,DROP,ALTER
主要为以上操作 即对逻辑结构等有操作的,其中包括表结构,视图和索引。

2、数据查询语言DQL(Data Query Language)

SELECT
这个较为好理解 即查询操作,以select关键字。各种简单查询,连接查询等 都属于DQL。

3、数据操纵语言DML(Data Manipulation Language)

INSERT,UPDATE,DELETE
主要为以上操作 即对数据进行操作的,对应上面所说的查询操作 DQL与DML共同构建了多数初级程序员常用的增删改查操作。而查询是较为特殊的一种 被划分到DQL中。

4、数据控制功能DCL(Data Control Language)

GRANT,REVOKE,COMMIT,ROLLBACK
主要为以上操作 即对数据库安全性完整性等有操作的,可以简单的理解为权限控制等。


 

主从延迟的秒数。


缓存雪崩:

数据未加载到缓存中,或者缓存同一时间大面积的失效,从而导致所有请求都去查数据库,导致数据库CPU和内存负载过高,甚至宕机。


DNS 解析过程

- DNS查询的结果通常会在本地域名服务器中进行缓存,如果本地域名服务器中有缓存的情况下,则会跳过如下DNS查询步骤,很快返回解析结果。

下面的示例则概述了本地域名服务器没有缓存的情况下,DNS查询所需的8个步骤:

1. 用户在Web浏览器中输入“example.com”, 先去查询本地DNS,如果本地DNS没有结果,则由本地域名服务器开始进行递归查询。
2. 本地域名服务器采用迭代查询的方法,向根域名服务器进行查询 。
3. 根域名服务器告诉本地域名服务器,下一步应该查询的顶级域名服务器.com TLD的IP地址
4. 本地域名服务器向顶级域名服务器.com TLD进行查询
5. .com TLD服务器告诉本地域名服务器,下一步查询example.com权威域名服务器的IP地址
6. 本地域名服务器向example.com权威域名服务器发送查询
7. example.com权威域名服务器告诉本地域名服务器所查询的主机IP地址
8. 本地域名服务器最后把查询的IP地址响应给web浏览器

- 一旦DNS查询的8个步骤返回了example.com的IP地址,浏览器就能够发出对网页的请求:

9. 浏览器向IP地址发出HTTP请求
10. 该IP处的web服务器返回要在浏览器中呈现的网页

1、递归查询  

是指DNS服务器在收到用户发起的请求时,必须向用户返回一个准确的查询结果。如果DNS服务器本地没有存储与之对应的信息,则该服务器需要询问其他服务器,并将返回的查询结果提交给用户。( 根服务器不会开递归查询。会开迭代查询)。

2、迭代查询

是指DNS服务器在收到用户发起的请求时,并不直接回复查询结果而是告诉另一台DNS服务器的地址,用户再向这台DNS服务器提交请求,这样依次反复,直到返回查询结果。

3、DNS缓存

DNS缓存是将解析数据存储在靠近发起请求的客户端的位置,也可以说DNS数据是可以缓存在任意位置,最终目的是以此减少递归查询过程,可以更快的让用户获得请求结果。


 KVM 中的vnc配置。


变量相关:

[root@linux-server script]# echo ${aa[0]}   #访问数组中的第一个元素

[root@linux-server script]# echo ${aa[@]}   #访问数组中所有的元素 等同与echo ${aa[*]} 

[root@linux-server script]# echo ${#aa[@]}  #统计元素的个数 

[root@linux-server script]# echo ${!aa[@]}  #打印数组的所有下标

您可以访问数组中的所有项目通过以下方式之一:

${array_name[*]}
${array_name[@]}


a = ${1:-"false"}

$1 :代表传入的第一个参数。

如果$1存在并且不为空那么a=$1,否则就是a=false;


2.awk中的变量

$0:表示整行
NF : 统计字段的个数
$NF:是number finally,表示最后一列的信息
RS:输入记录分隔符;          (默认为\n)
ORS:输出记录分隔符。       (默认为\n)
NR:打印记录号,(行号)  (row一行  number)
FNR:可以分开,按不同的文件打印行号。
FS : 输入字段分隔符,默认为一个空格。  
OFS 输出的字段分隔符,默认为一个空格。 
FILENAME 文件名  被处理的文件名称
$1  第一个字段,$2第二个字段,依次类推...

输入记录分隔符变量:RS(record sign)

输出记录分隔符变量:ORS(output record sign)

字段分隔符变量:FS(field sign)

输出字段分隔符变量:OFS(output field sign)

[root@qfedu ~]# cat /etc/passwd | awk -F":" '{if($3==0) {print $1 " is administrator"}}'

统计系统用户数量  

[root@qfedu ~]# cat /etc/passwd | awk -F":" '{if($3>=0 && $3<=1000){i++}} END{print i}'

awk   '{for(i=1;i<=2;i++) {print $0}}'   /etc/passwd

awk   '{变量名[]++}END{for(i in 变量){print i,变量名[i]}}'

#注意:变量i是索引

for循环针对的是下标。


awk真实案例

#把要统计的对象作为索引,最后对他们的值进行累加,累加出来的这个值就是你的统计数量

1. 统计/etc/passwd中各种类型shell的数量  (记住这一个例子)

# cat /etc/passwd | awk -F: '{shells[$NF]++} END{ for(i in shells){print i,shells[i]} }'

2.统计nginx日志出现的状态码

# cat access.log | awk '{stat[$9]++} END{for(i in stat){print i,stat[i]}}'

3.统计当前nginx日志中每个ip访问的数量

# cat access.log | awk '{ips[$1]++} END{for(i in ips){print i,ips[i]}}'

4.统计某一天的nginx日志中的不同ip的访问量

# cat access.log |grep '28/Sep/2019' | awk '{ips[$1]++} END{for(i in ips){print i,ips[i]}}' 

5.统计nginx日志中某一天访问最多的前10个ip

# cat access.log |grep '28/Sep/2019' | awk '{ips[$1]++} END{for(i in ips){print i,ips[i]}}' |sort -k2 -rn | head -n 10
sort:排序,默认升序
-k:指定列数
-r:降序
-n:以数值来排序

6.统计tcp连接的状态---下去自己查各个状态,包括什么原因造成的!

# netstat -n | awk '/^tcp/ {tcps[$NF]++} END {for(i in tcps) {print i, tcps[i]}}'
LAST_ACK 5 (正在等待处理的请求数)
SYN_RECV 30
ESTABLISHED 1597 (正常数据传输状态)
FIN_WAIT1 51
FIN_WAIT2 504
TIME_WAIT 1057 (处理完毕,等待超时结束的请求数)

如何查看nginx的连接满了:

 经典案例

UV与PV统计

PV:即访问量,也就是访问您商铺的次数; page view

例如:今天显示有300 PV,则证明今天你的商铺被访问了300次。


UV:即访问人数,也就是有多少人来过您的商铺;          #需要去重(chong)  unique visitor

例如:今天显示有50 UV,则证明今天有50个人来过你的商铺。


1.根据访问IP统计UV

# cat access.log | awk '{print $1}' |sort |uniq | wc -l

uniq:去重

-c:统计每行连续出现的次数

2.根据访问ip统计PV

# cat access.log | awk '{print $1}' |wc -l

或者是url

# cat access.log | awk '{print $7}' |wc -l

3.查询访问最频繁的URL

# cat access.log | awk '{print $7}' |sort | uniq -c | sort -n -k 1 -r | more

4.查询访问最频繁的IP

# cat access.log | awk '{print $1}' |sort | uniq -c | sort -n -k 1 -r | more


#!/usr/bin/expect
spawn ssh root@192.168.246.115        跟踪

expect {                                                  捕捉回显

        "yes/no" {  send "yes\r"; exp_continue }
        "password:" { send "1\r" };
}
interact

[root@qfedu script]# chmod +x expect01.sh

[root@qfedu script]# ./expect01.sh

spawn ssh root@192.168.246.115
root@192.168.246.115's password: 
Last login: Fri Aug 28 16:57:09 2019

破解密码

先将这个修改成简单密码注释掉

root账户没了或者root密码丢失:

关闭Mysql使用下面方式进入Mysql直接修改表权限

5.6/5.7版本:

# mysqld --skip-grant-tables --user=mysql &

# mysql -uroot

mysql> UPDATE mysql.user SET authentication_string=password('QianFeng@123') WHERE user='root' AND host='localhsot';

mysql> FLUSH PRIVILEGES;

#编辑配置文件将skip-grant-tables参数注释

#重启mysql


选择索引的原则(高频面试题)

- 经常被查询的字段比较适合作索引。

- 常用于查询条件的字段较适合作为索引,例如WHERE语句和JOIN语句中出现的列。

- 唯一性太差的字段不适合作为索引,例如性别。

- 更新过于频繁(更新频率远高于检索频率)的字段不适合作为索引。

- 使用索引的好处是索引通过一定的算法建立了索引值与列值直接的联系,可以通过索引直接获取对应的行数据,而无需进行全表搜索,因而加快了检索速度。

- 但由于索引也是一种数据结构,它需要占据额外的内存空间,并且读取索引也加会大IO资源的消耗,因而索引并非越多越好,且对过小的表也没有添加索引的必要。


index(key)每张表可以有很多列做index,必须得起名。

面试题:

导致SQL执行慢的原因: 

1.硬件问题。如网络速度慢,内存不足,I/O吞吐量小,磁盘空间满了等。

2.没有索引或者索引失效。

3.数据过多(分库分表)(这张表的数据过多)。

4.服务器调优及各个参数设置(调整my.cnf)。

索引:当查询速度过慢可以通过建立优化查询速度,可以当作调优。


# mysql -h192.168.246.253 -P 3306 -uroot -pqf123 -D mysql -e 'select * from user;'

此处 -D mysql为指定登录的数据库


解决binlog日志不记录insert语句
登录mysql后,设置binlog的记录格式:
mysql> set binlog_format=statement;

然后,最好在my.cnf中添加:
binlog_format=statement
修改完配置文件之后记得重启服务


物理和逻辑备份的区别

物理备份: 物理备份是磁盘块为基本单位将数据从主机复制到备机。

逻辑备份: 逻辑备份是以文件为基本单位将数据从主机复制到备机。

逻辑备份:

备份方式备份数据库建表、建库、插入sql语句。

优点:备份文件相对较小,只备份表中的数据与结构。

缺点:恢复速度较慢(需要重建索引,存储过程等) 。

对业务影响:I/O负载加大。

代表工具:mysqldump。          

物理备份:

备份方式:备份数据库物理文件。

优点:恢复速度比较快。

缺点:备份文件相对较大(备份表空间,包含数据与索引)。

对业务影响:I/O负载加大。

代表工具:ibbackup、xtrabackup,mysqlbackup 。


568B接法:橙白、橙、绿白、蓝、蓝白、绿、棕白、棕。


TCP_wapper访问控制机制 

TCP wappers控制策略文件在 /etc/hosts.allow和/etc/hosts.deny两个文件中,制定黑白名单。

前一个文件定义计算机允许的访问,后一个文件指定应该拒绝的连接。如果某个系统同时出现在两个文件里,hosts.allow是优先的。如果某个系统没有出现在任何一个文件里,TCP Wrappers会允许它进行连接。另外,如果运行最严格的TCP Wrappers安全,用户可以在/etc/hosts.deny文件力包含一行“ALL:ALL”,它会禁止所有由TCP Wrappers处
理的输入访问。然后用户就可以在/etc/hosts.allow里为特定客户程序打开服务程序的端口。


Keepalived体系主要模块:

keepalived体系架构中主要有三个模块,分别是core、check和vrrp。

core模块:为keepalived的核心,负责主进程的启动、维护及全局配置文件的加载和解析。

vrrp模块:是来实现VRRP协议的。

check模块:负责健康检查,常见的方式有端口检查及URL检查。


磁盘io查看:

iostat 使用

安装命令: yum install sysstat 

使用iostat -d -k 2 查看IO情况:

-k:已kb为单位显示读写信息

-m:已mb为单位显示读写信息


修改字段

方法一:modify-----不可以改字段名

# 修改字段类型,约束,顺序

语法:alter table 表名 modify 字段名 新数据类型;


方法二:change-----可以改字段名

# change修改字段名称,类型,约束,顺序 

语法: alter table 表名 change 旧字段名 新字段名 新数据类型;

例子:alter  table hao change  name  CNAME  char(10);

alter table t3 change max maxs int(15) after id;    #修改字段名称与修饰并更换了位置


网卡吞吐量查看:

yum   -y   install  iptraf 

linux查看网卡吞吐量和网卡流量用自带命令,iptraf查看。

命令端输入  iptraf-ng 查看  


 nginx日志无法删除:


脑裂:

脑裂(split-brain):指在一个高可用(HA)系统中,当联系着的两个节点断开联系时,本来为一个整体的系统,分裂为两个独立节点,这时两个节点开始争抢共享资源,结果会导致系统混乱,数据损坏。


fdisk和gdisk的区别

  1. gdisk可以对2T以上的磁盘进行操作,fdisk不行
  2. fdisk只能用于MBR分区,gdisk可以用于GPT分区

MBR和GPT

  • MBR分区:不支持4T以上
  • GPT分区:GPT,全局唯一标识分区表(GUID Partition Table),它使用128位GUID来唯一标识每个磁盘和分区,与MBR存在单一故障点不同,GPT提供分区表信息的冗余,一个在磁盘头部一个在磁盘尾部;它通过CRC校验和来检测GPT头和分区表中的错误与损坏;默认一个硬盘支持128个分区

MBR:

  • 主分区和扩展分区最多可以有4个(硬盘限制)。
  • 扩展分区最多只能有1个(操作系统限制)。
  • 逻辑分区是由扩展分区持续划分出来的分区。

能够被格式化后作为数据存取的分区是主分区和逻辑分区,扩展分区无法格式化。


Web服务器性能压力测试工具

程序非常小,解压后也不到100K
http_load以并行复用的方式运行,用以测试web服务器的吞吐量与负载。
但是它不同于大多数压力测试工具,它可以以一个单一的进程运行,一般不会把客户机搞死。
还可以测试HTTPS类的网站请求。
下载地址:http_load-12mar2006.tar.gz

安装很简单

#  tar zxvf http_load-12mar2006.tar.gz
#  cd http_load-12mar2006
#  make && make install

基本用法:

http_load  -p 并发访问进程数  -s 访问时间  需要访问的URL文件

参数其实可以自由组合,参数之间的选择并没有什么限制。
比如你写成http_load  -parallel  5  -seconds  300  urllist.txt也是可以的。
我们把参数给大家简单说明一下。
-parallel   简写-p :含义是并发的用户进程数。
-fetches   简写-f :含义是总计的访问次数
-rate        简写-p :含义是每秒的访问频率
-seconds 简写-s :含义是总计的访问时间

准备URL文件:urllist.txt,文件格式是每行一个URL,URL最好超过50-100个测试效果比较好。

例如:

http_load    -p   30    -s    60    urllist.txt

结果分析:

1、294 fetches, 30 max parallel, 3.83835e+06 bytes, in 60.0026 seconds
说明在上面的测试中运行了294个请求,最大的并发进程数是30,总计传输的数据是3.83835e+06bytes,运行的时间是60.0026秒
2、13055.6 mean bytes/connection
说明每一连接平均传输的数据量3.83835e+06/294=13055.6
3、4.89979 fetches/sec, 63969.7 bytes/sec
说明每秒的响应请求为4.89979,每秒传递的数据为63969.7 bytes/sec
4、msecs/connect: 312.009 mean, 1319.57 max, 209.994 min
说明每连接的平均响应时间是312.009 msecs,最大的响应时间1319.57 msecs,最小的响应时间209.994 msecs
5、msecs/first-response: 1191.01 mean, 10212.4 max, 220.78 min
6、HTTP response codes: 
    code 200  –  127 
    code 502  –  166
说明打开响应页面的类型
如果403的类型过多,那可能要注意是否系统遇到了瓶颈。
特殊说明:
测试结果中主要的指标是 fetches/sec、msecs/connect 这个选项,即服务器每秒能够响应的查询次数。
用这个指标来衡量性能。似乎比 apache的ab准确率要高一些,也更有说服力一些。
Qpt-每秒响应用户数和response time,每连接响应用户时间。
测试的结果主要也是看这两个值。
当然仅有这两个指标并不能完成对性能的分析,我们还需要对服务器的cpu、men进行分析,才能得出结论。

二、webbench

webbench是Linux下的一个网站压力测试工具,最多可以模拟3万个并发连接去测试网站的负载能力。
下载地址可以到google搜,我这里给出一个
下载地址:http://soft.vpser.net/test/webbench/webbench-1.5.tar.gz
这个程序更小,解压后不到50K,呵呵
安装非常简单

#tar zxvf webbench-1.5.tar.gz

#cd webbench-1.5

#make && make install

会在当前目录生成webbench可执行文件,直接可以使用了
用法:webbench -c 并发数 -t 运行测试时间 URL

例如:

#webbench -c 1000 -t 130 http://www.qixing318.com


elk颜色表示:

绿色表示一切正常,黄色表示所有的数据可用但是部分副本还没有分配,红色表示部分数据因为某些原因不可用。


Linux的启动级别

Linux下一共有七个启动级别(0-6)
切换启动级别使用的命令是init
语法:init 启动级别号

启动级别分别是:

0   系统停机模式,系统默认运行级别不能设置为0,不然的话是没办法正常启动的,这个启动级别下,
机器就是关机的状态
1   单用户模式,有root权限,用于系统的维护,禁止远程登录,没有网络功能,就像windows的安全模式
2   多用户模式,没有NFS和网络的支持
3   完整的多用户文本模式,有NFS和网络,登录后进入控制台的命令行模式
4   系统未使用,保留,一般不用,在一些特殊情况下可以用它来做一些事情。比如说,笔记本电脑电池将
要用尽时,可以切换到这个模式来做一些设置
5   图形化模式,登陆后进入图形GUI模式
6   重启模式,默认运行级别不能设置为6,否则系统会无限重启,不能正常启动。运行init 6 机器就会重启
常用:init 0   #关机
init 3   #文本模式
init 5   #图形化界面模式
init 6   #重启

添加默认网关:

route  add  default  gw  192.168.11.5


vim /etc/sysconfig/network-scripts/ifcfg-ens33


Http的错误代码含义

(404、410、504、502)
404(未找到)服务器找不到请求的网页。
410(已删除)如果请求的资源已永久删除,服务器就会返回此响应。
504(网关超时)服务器作为网关或代理,但是没有及时从上游服务器收到请求。
502(错误网关)服务器作为网关或代理,从上游服务器收到无效响应。

下面是常见的HTTP状态码:

  • 200 - 请求成功

  • 301 - 资源(网页等)被永久转移到其它URL

  • 302 - 资源(网页等)临时转移到其它URL

  • 404 - 请求的资源(网页等)不存在

  • 304 - 客户端磁盘缓存

  • 403 - 服务器理解请求客户端的请求,但是拒绝执行此请求(权限)

  • 500 - 内部服务器错误(防火墙没开)服务器内部错误,无法完成请求

  • 410(已删除)如果请求的资源已永久删除,服务器就会返回此响应。

  • 504(网关超时)服务器作为网关或代理,但是没有及时从上游服务器收到请求。

  • 502(错误网关)服务器作为网关或代理,从上游服务器收到无效响应。

503Service Unavailable由于超载或系统维护,服务器暂时的无法处理客户端的请求。延时的长度可包含在服务器的Retry-After头信息中

RDB方式原理:(快照)

        当redis需要做持久化时
        (执行SAVA或者BGSAVA命令,或者是达到配置条件时执行),
        redis会fork一个子进程,子进程将数据写到磁盘上一个临时RDB文件中,
        当子进程完成写临时文件后,将原来的RDB替换掉(默认文件名为dump.rdb)
        
当redis需要做持久化时,会fork一个子进程,将数据写到磁盘上一个临时RDB文件中,当子进程完成写临时文件后,将原来的RDB替换掉(默认文件名为dump.rdb)


 AOF方式原理:

        AOF可以做到全程持久化,Redis每执行一个修改数据的命令,
        都会把这个命令添加到AOF文件中,当Redis重启时,
        将会读取AOF文件进行“重放”以恢复到Redis关闭前的最后时刻。
        由于os会在内核中缓存write做的修改,所以可能不是立即写到磁盘上。
        这样aof方式的持久化也还是有可能会丢失部分修改。
        不过我们可以通过配置文件告诉redis我们想要通过fsync函数强制os写入到磁盘的时机。
    可以共存


lvs-nat:RIP的网关要指向DIP
lvs-dr与lvs-tun:请求报文要经由Director,但响应报文由RS直接发往Client
lvs-dr:通过封装新的MAC首部实现,通过MAC网络转发
lvs-tun: 通过在原IP报文外封装新IP头实现转发,支持远距离通信


1.jenkins上线流程

    jenkins配置gitlab的URL,选定好响应的分支,上传凭证,
    凭证一般是jenkins的密钥,公钥上传至gitlab上
    jenkins所在服务器配置maven打包工具和JDK,配置ssh插件
    研发人员将代码发布到gitlab中,合并至master分支
    jenkins获取代码,在本地打包,通过ssh上传到指定发布的服务器上
    通过发布脚本进行项目更新

    
2.参数化构建的方式

    选择参数化构建的方式构建项目
    配置参数(名称、选项、描述等等)
    在构建配置项将设置好的参数通过
    命令传参至代码操作脚本内,执行脚本


keepalived

core模块
check模块
vrrp模块

keepalived工作原理
    keepalived是以VRRP协议为实现基础的,VRRP全称Virtual Router Redundancy Protocol,即虚拟路由冗余协议。

    虚拟路由冗余协议,可以认为是实现路由器高可用的协议,即将N台提供相同功能的路由器组成一个路由器组,这个组里面有一个master和多个backup,master上面有一个对外提供服务的vip(该路由器所在局域网内其他机器的默认路由为该vip),master会发组播,当backup收不到vrrp包时就认为master宕掉了,这时就需要根据VRRP的优先级来选举一个backup当master。这样的话就可以保证路由器的高可用了。

keepalived主要有三个模块,分别是core、check和vrrp。core模块为keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析。check负责健康检查,包括常见的各种检查方式。vrrp模块是来实现VRRP协议的。


awk '{ips[$1]++} END{for(i in ips){print i,ips[i]}}'  /var/log/nginx/access.log | sort -k2 -rn |head -n 10

iptables -t filter -I INPUT -p tcp  --dport  8080  -s 192.168.0.123 -j ACCEPT

nginx中location的匹配顺序?

已 `=` 开头表示精确匹配 ,如 A 中只匹配根目录结尾的请求,后面不能带任何字符串。
`^~` 开头表示uri以某个常规字符串开头,不是正则匹配
`~` 开头表示区分大小写的正则匹配;
`~*` 开头表示不区分大小写的正则匹配
`/` 通用匹配, 如果没有其它匹配,任何请求都会匹配到

Nginx的rewrite地址重写的四种标记与区别?

last相当于Apache里的[L]标记,表示完成rewrite    //如果不写标记默认为这个
break本条规则匹配完成后,终止匹配,不再匹配后面的规则
redirect返回302临时重定向,浏览器地址会显示跳转后的URL地址
permanent返回301永久重定向,浏览器地址会显示跳转后URL地址
Last表示匹配完成后会重新发起请求。
last和break用来实现URL重写,浏览器地址栏URL地址不变

uniq  -c 去重并计算


耦合性(英语:Coupling,dependency,或称耦合力耦合度)是一种软件度量,是指一程序中,模块及模块之间信息或参数依赖的程度。

内聚性是一个和耦合性相对的概念,一般而言低耦合性代表高内聚性,反之亦然。耦合性和内聚性都是由提出结构化设计概念的赖瑞·康斯坦丁所提出。低耦合性是结构良好程序的特性,低耦合性程序的可读性及可维护性会比较好。


jps

jps位于jdk的bin目录下,其作用是显示当前系统的java进程情况,及其id号。

jps相当于Solaris进程工具ps。不像"pgrep java"或"ps -ef grep java",jps并不使用应用程序名来查找JVM实例。因此,它查找所有的Java应用程序,包括即使没有使用java执行体的那种(例如,定制的启动 器)。另外,jps仅查找当前用户的Java进程,而不是当前系统中的所有进程。


jsp

中文名:JAVA服务器页面

外文名:Java Server Pages

外语缩写:JSP

本    质:动态网页技术标准

JSP(全称JavaServer Pages)是由Sun Microsystems公司主导创建的一种动态网页技术标准。JSP部署于网络服务器上,可以响应客户端发送的请求,并根据请求内容动态地生成HTMLXML或其他格式文档的Web网页,然后返回给请求者。JSP技术以Java语言作为脚本语言,为用户的HTTP请求提供服务,并能与服务器上的其它Java程序共同处理复杂的业务需求。

JSP将Java代码和特定变动内容嵌入到静态的页面中,实现以静态页面为模板,动态生成其中的部分内容。JSP引入了被称为“JSP动作”的XML标签,用来调用内建功能。另外,可以创建JSP标签库,然后像使用标准HTML或XML标签一样使用它们。标签库能增强功能和服务器性能,而且不受跨平台问题的限制。JSP文件在运行时会被其编译器转换成更原始的Servlet代码。JSP编译器可以把JSP文件编译成用Java代码写的Servlet,然后再由Java编译器来编译成能快速执行的二进制机器码,也可以直接编译成二进制码。


css和js

css和js的区别:1、CSS为网页表现、JS为网页行为。2、CSS是用来修饰网页样式的,即美化HTML页面;而js可对页面的各种动态效果进行处理,是用来实现网页和人交互的功能。


reset slave删除master.info文件和relay-log.info 文件以及所有的relay log 文件并重新启用一个新的relaylog文件,但并不会清理存储于内存中的复制信息比如master host, master port, master user, or master password,也就是说如果没有使用change master 命令做重新定向,执行start slave 还是会指向旧的master 上面。


开机加电BIOS自检----------->MBR引导----------->grub引导菜单----------->加载内核----------->启动init进程----------->读取inittab文件----------->启动mingetty进程----------->登录系统


jenkins

安装 
1 上传jdk1.8 tomcat jenkins.war  

2 tar xf 解压这几个包

3  vim /etc/profile.d/java.sh 写一个环境变量
export JAVA_HOME=/usr/local/java
export PATH=$PATH:$JAVA_HOME/bin

4 source /etc/profile.d/java.sh  更新一下

5  java -version 看一下生效了没有

6 cd /usr/local/tomcat/webapps  过去

7  rm -rf ROOT/   把这个目录删除

8  mv /root/jenkins\ \(1\).war  ROOT.war   吧jks这个包转移过来 并且改名

9 /usr/local/tomcat/bin/startup.sh  启动

10 浏览器访问8080端口然后 看一下界面的路径 cat 查看密码 输入密码之后选择安装推荐的插件


11 也可以在 cat /usr/local/tomcat/logs/catalina.out里面 查看密码


如果插件装失败的话
1  关闭tomcat 在 家目录下会有一个.jenkins   
2  cd .jenkins 目录下有一个pluglas插件   cd到root目录下 解压开 
3  上传一个包老师的pluglas 把这个和里面的那个 替换掉 就可以了
4  解压开
5  mv ../plugins ./

6 /usr/local/tomcat/bin/startup.sh  启动 

7 在重新访问 

8 创建用户 随便 密码随便 邮箱随便来个 

9 配置实例保存完成 就完成好了


如何发布和回滚,用jenkins又是怎么实现?

回答:发布:jenkins配置好代码路径(SVN或GIT),然后拉代码,打tag。需要编译就编译,编译之后推送到发布服务器(jenkins里面可以调脚本),然后从分发服务器往下分发到业务服务器上。

回滚:按照版本号到发布服务器找到对应的版本推送


你是怎么备份数据的,包括数据库备份?

回答:在生产环境下,不管是应用数据、还是数据库数据首先在部署的时候就会有主从架构,这本身就是是属于数据的热备份;其实考虑冷备份,用专门一台服务器做为备份服务器,比如可以用rsync+inotify配合计划任务来实现数据的冷备份,如果是发版的包备份,正常情况下有台发布服务器,每次发版都会保存好发版的包。


接口:

是指同一计算机不同功能层之间的通信规则称为接口。


PV

PV(Page View)访问量, 即页面浏览量或点击量,衡量网站用户访问的网页数量;在一定统计周期内用户每打开或刷新一个页面就记录1次,多次打开或刷新同一页面则浏览量累计 。

访问量指PV指网站页面的浏览量,页 面被刷新一次就计算一次。如果网站被刷新了1000次,那么流量统计工具显示的PV就是1000


UV

UV(Unique Visitor)独立访客,统计1天内访问某站点的用户数(以cookie为依据);访问网站的一台电脑客户端为一个访客。可以理解成访问某网站的电脑的数量。网站判断来访电脑的身份是通过来访电脑的cookies实现的。如果更换了IP后但不清除cookies,再访问相同网站,该网站的统计中UV数是不变的。如果用户不保存cookies访问、清除了cookies或者更换设备访问,计数会加1。00:00-24:00内相同的客户端多次访问只计为1个访客。


mysql开启慢查询,进程分工

  • Master进程:负责管理Worker进程、监听端口
  • Worker进程:处理业务逻辑

    mysql> set global slow_query_log=1;

     Query OK, 0 rows affected (0.09 sec)

    使用set global slow_query_log=1开启了慢查询日志只对当前数据库生效,MySQL重启后则会失效。

    如果要永久生效,就必须修改配置文件my.cnf(其它系统变量也是如此)。

    my.cnf要增加或修改参数slow_query_log 和slow_query_log_file,如下所示

    1

    2

    slow_query_log = 1

    slow_query_log_file = /tmp/mysql_slow.log

    然后重启MySQL服务器。

    slow_query_log_file

    这个参数用于指定慢查询日志的存放路径,缺省情况是host_name-slow.log文件,

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值