mysql nginx_nginx mysql-程序员宅基地

技术标签: 面试  mysql  数据库  sql  

公司架构:

mysql

1、数据库的类型

非关系型数据库:存储格式灵活,可以是key-value的形式,也可以是文本文档图片等形式。读写速度快,可以使用磁盘或随机存储器作为载体,具有高扩展性,但是不支持sql语句,无事务处理。

关系型数据库:支持事务、使用表结构,可用复杂查询,但是读写性能差,固定表结构,数据存储不够灵活,对于高并发的读写请求,磁盘io是很大的瓶颈。

2、主从复制原理

主库开启binlog日志,授权用户密码。

从库指定master_host、master_user、master_password、master_log_file、master_pos,执行start slave后会开启两个线程io线程和sql线程,主库开启dump线程。当主库binlog日志内容更新后,dump线程会告诉io线程,io线程读取binlog日志,并将内容记录到从库的中继日志,sql线程读取中继日志,并执行,达到数据一致的目的。

start slave(主库开启dump线程,从库开启io和sql线程)==》 binlog日志更新(也就是有写操作执行时)==》主库dump线程告诉从库io线程,io读取binlog日志,记录内容到从库中继日志,sql线程读取中继日志,执行。

3、主从方式有几种

两种:binlog日志,gtid。

4、mysql的数据备份有几种 

逻辑备份:mysqldump,备份sql语句,速度慢,恢复也慢,需要一条一条执行sql语句

物理备份:xtrabackup备份

完全备份:备份当前的所有数据

增量备份:备份上一次备份到当前时间点的更新的所有数据(上一次备份可以是全备也可以是增量备份),数据占用磁盘空间小,但恢复过程较复杂

差异备份:备份上一次完全备份到当前时间点的所有数据,占用磁盘空间比较大,恢复过程简单

策略:周日做全备,周一到周六每天增量备份,结合计划任务定期处理7天前的备份数据(迁移到其他安全的地方)

5、事务的四个特性

原子性:一个事务的执行要么全部执行,要不全不执行,不会结束到中间某个环节,也就是说如果在某个环节失败了,会回滚到事务开始前的状态,就像什么都没有发生一样。

隔离性:数据库允许多个事务同时对数据库的数据进行读写和修改的能力,隔离性为了防止多个事务并发执行由于交叉执行导致的数据不一致。隔离级别分为读未提交、读提交、可重复读、串行化。隔离等级越高,数据越安全,但是消耗的资源就越多。

一致性:事务开始前和结束后,数据库的完整性没有被破坏,即写入的数据必须符合预设的规则。

持久性:事务结束后,对数据的修改是永久写入到磁盘的,即使系统故障也不会丢失。

6、脏读、不可重复读、幻读是什么

脏读:a开启了一个事务并更新了数据,但是未提交,b读取了a更新的数据,但是a此时进行了事务回滚,b读到的就是脏数据。

不可重复读:事务a多次读取同一数据,事务b在a多次读取过程中对数据做了更新并提交,导致a在多次读取数据时结果不一致。

幻读:管理员a将学生成绩从具体分数改为abcde等级,但是管理员b在这个时候插入了一条带有具体分数的记录,当管理员a修改结束后,发现还有一条数据没改过来,就像发生了幻觉一样。

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

7、数据库引擎

innodb:支持事务,支持行锁定。

myisam:有较高的查询速度,但是不支持事务。

memory:需要很快的读写速度但是对安全性要求不高的话可以使用,但是对表的大小有要求。支持锁表不支持行锁定。

8、mysql的数据类型

整数型、浮点型、文本字符串类型、日期时间类型、枚举型、集合型

9、mysql的约束添加

主键:用于唯一的标识表行的数据(作为表中某行的唯一标识),当定义主键约束后,此列不能重复

不能为空:定义not null后,此列的值不能为空

default:默认约束,即使插入数据没有值,都会有默认值

unique:唯一约束,该列不允许重复

自增键

10、mysql主从数据不一致的原因

(1)网络延迟,主从复制是基于binlog的异步复制,通过网络传送binlog文件,网络延迟是大多数引起数据不一致的原因。

(2)主从机器的负载不一致:mysql主从复制是主库开启dump线程,从库开启io和sql线程。当任何一台服务器负载过高,导致其中一个线程资源不足,会出现主从不一致的情况

(3)版本不一致

(4)max_allowed_packet设置不一致:主库设置的max_allowed_packet设置的比从库大,一条大的sql语句在主库能执行完毕,但在从库上无法执行,导致主从不一致。

max_allowed_packet:指mysql服务器端和客户端在一次传送数据包的过程当中最大允许的数据包大小。

解决方法:1、stop slave set global sql_slave_skip_counter=1 跳过这一步错误;2、重新做主从:先锁表,导入数据数据+同步,重新做主从

11、怎么彻底删除数据库一个表

drop table table_name from 库名;

12、读写分离的好处

分摊服务器的压力,提高系统的处理效率。分担主服务器的读取压力,间接提高了主库的写入压力。因为读请求全部发给了从库。

13、mysql的优化

安全方面:修改默认端口号,禁止root用户远程登录,对用户降权,以普通用户运行mysql

性能方面:升级硬件,内存、磁盘、优化sql语句(开启慢查询)、设置索引

参数优化:innodb的buffer参数调大,连接数调大、缓存的参数优化

架构方面:读写分离,一主多从,高可用


什么是读写分离

在数据库集群架构中,让主库负责处理写入操作,而从库只负责处理select查询,让两者分工明确达到提高数据库整体读写性能。**当然,主数据库另外一个功能就是负责将数据变更同步到从库中,也就是写操作。

读写分离的好处

1. 分摊服务器压力,提高机器的系统处理效率。
2. 在写入不变,大大分摊了读取,提高了系统性能。另外,当读取被分摊后,又间接提高了写入的性能。所以,总体性能提高了。
3. 增加冗余,提高服务可用性,当一台数据库服务器宕机后可以调整另外一台从库以最快速度恢复服务。

前言:最近一个项目用到了ShardingSphere 用于读写分离,于是琢磨着在本地写个demo玩玩,所以就有了这。一般而言:mysql读写分离的前提就是主从复制。如果没有主从复制,那么读写分离就没什么用了。比如你从主库写数据,然后从从库读数据,但是主库的数据都没同步到从库,那你岂不是读了个寂寞,对吧,显然是读取不到主库写入的数据的。

Mycat 数据库中间件

Mycat 是一个开源的数据库系统,但是由于真正的数据库需要存储引擎,而 Mycat 并没有存 储引擎,所以并不是完全意义的数据库系统。 那么 Mycat 是什么?Mycat 是数据库中间件,就是介于数据库与应用之间,进行数据处理与交互的中间服 务是实现对主从数据库的读写分离、读的负载均衡。

什么是负载均衡

负载均衡(Load Balance,简称 LB)是高并发、高可用系统必不可少的关键组件,目标是 尽力将网络流量平均分发到多个服务器上,以提高系统整体的响应速度和可用性。

负载均衡的主要作用如下:

高并发:负载均衡通过算法调整负载,尽力均匀的分配应用集群中各节点的工作量,以此提高应用集群的并发处理能力(吞吐量)。

伸缩性:添加或减少服务器数量,然后由负载均衡进行分发控制。这使得应用集群具备伸缩性。

高可用:负载均衡器可以监控候选服务器,当服务器不可用时,自动跳过,将请求分发给可用的服务器。这使得应用集群具备高可用的特性。

安全防护:有些负载均衡软件或硬件提供了安全性功能,如:黑白名单处理、防火墙,防 DDos 攻击等。

 for循环的使用范围:

换行,空格,或table隔开的内容(for 循环内容)


binlog日志的三种格式:

 binlog 的格式

binlog 有三种格式:

  • Statement(Statement-Based Replication,SBR):每一条会修改数据的 SQL 都会记录在 binlog 中。
  • Row(Row-Based Replication,RBR):不记录 SQL 语句上下文信息,仅保存哪条记录被修改。
  • Mixed(Mixed-Based Replication,MBR):Statement 和 Row 的混合体。

Statement

Statement 模式只记录执行的 SQL,不需要记录每一行数据的变化,因此极大的减少了 binlog 的日志量,避免了大量的 IO 操作,提升了系统的性能。

但是,正是由于 Statement 模式只记录 SQL,而如果一些 SQL 中 包含了函数,那么可能会出现执行结果不一致的情况。比如说 uuid() 函数,每次执行的时候都会生成一个随机字符串,在 master 中记录了 uuid,当同步到 slave 之后,再次执行,就得到另外一个结果了。

所以使用 Statement 格式会出现一些数据一致性问题。

Row

从 MySQL5.1.5 版本开始,binlog 引入了 Row 格式,Row 格式不记录 SQL 语句上下文相关信息,仅仅只需要记录某一条记录被修改成什么样子了。

Row 格式的日志内容会非常清楚地记录下每一行数据修改的细节,这样就不会出现 Statement 中存在的那种数据无法被正常复制的情况。

不过 Row 格式也有一个很大的问题,那就是日志量太大了,特别是批量 update、整表 delete、alter 表等操作,由于要记录每一行数据的变化,此时会产生大量的日志,大量的日志也会带来 IO 性能问题。

Mixed

从 MySQL5.1.8 版开始,MySQL 又推出了 Mixed 格式,这种格式实际上就是 Statement 与 Row 的结合。

在 Mixed 模式下,系统会自动判断 该 用 Statement 还是 Row:一般的语句修改使用 Statement 格式保存 binlog;对于一些 Statement 无法准确完成主从复制的操作,则采用 Row 格式保存 binlog。

Mixed 模式中,MySQL 会根据执行的每一条具体的 SQL 语句来区别对待记录的日志格式,也就是在 Statement 和 Row 之间选择一种。

恢复数据库:一般恢复到新环境,旧环境不动。


 mysql优化:

软件方面:

1、选择最合适的字段属性。mysql在创建数据库的时候肯定是数据库中的表越小越好,这样才能提高查询的速度。比如说在存储电话号的时候,如果将其写成CHAR(255),这显然会给数据库带来很多不必要的空间浪费,明明CHAR(11)就可以解决的问题。

2、合理使用外键。

外键本身存在的作用就是保证表与表之间的参照完整性,使用外键可以有效地增加数据之间的关联性。在mysql中,外键是用于建立和加强两个表数据之间的链接的一列或多列,它表示一个表中的一个字段被另一个表中的一个字段引用。外键对相关表中的数据造成了限制,使MySQL能够保持参照完整性。

主键(primary key) 能够唯一标识表中某一行的属性或属性组。

3、正确使用索引。

索引是提高数据库性能的最常见的方法,能够正确地使用索引,能够大大地提高查询效率。

但是也不能够为所有的列都创建索引,因为它本身会占用内存,维护起来也很麻烦,它就是一把双刃剑,所以索引在使用的时候需要根据实际情况正确使用才行。

4、优化查询语句。

已将创建了索引的字段上不要使用函数,那样会导致索引失效。

查询时不鼓励使用like语句查询,因为那会消耗掉一部分系统的性能。

不要用 类似  * 号这种,数据库会进行全局检索,消耗性能。

5、打开慢查询。

6、调整连接数。

7、修改默认端口号,禁止root用户远程登录,普通用户运行mysql。

硬件方面:

内存,磁盘,cpu的升级。网络带宽的增加。

架构方面:

主从复制,读写分离,一主多从。


1、Nginx

2、介绍一下nginx

nginx是一款轻量级、高性能、稳定性高、并发性好的http和反向代理服务器(支持https),同时也是一款负载均衡软件,可以做7层和四层负载均衡。可以做动静分离,nginx解析静态页面的效率非常高,但是动态请求很鸡肋。nginx功能非常强大,常用的比如地址重写,防盗链,会话保持,访问控制流量控制等

3、nginx、haproxy、lvs的区别

lvs基于系统内核实现软负载均衡,而haproxy和nginx是基于第三方应用实现的软负载均衡。

haproxy是基于四层和七层的转发,是专业的负载均衡软件

nginx既是web服务器、缓存服务器、又是反向代理服务器,可以做七层和四层的转发

lvs是基于四层的负载均衡,所以做不了基于url和目录的转发

4、什么时候用haproxy什么时候用nginx什么时候用lvs

在并发量大得时候可以用lvs,中小型公司可用nginx或者haproxy,如果只是单纯的负载均衡可以用haproxy,但如果是web服务器的话,建议使用nginx,这也是nginx用的多的原因。还用一种情况可以使用lvs和haproxy,比如RabbitMQ集群,有三台RabbitMQ,我们都知道RabbitMQ镜像模式使用还是比较多的,每个节点都提供服务,但我们总不能给开发提供三个RabbitMQ的节点吧,也不能只提供一个节点的ip,所以就可以使用lvs或者haproxy给三个RabbitMQ提供一个VIP,这样开发老铁可以用这个vip写进前端的配置中。不至于所有数据都往一个RabbitMQ上发送。

5、apache和nginx的区别,为什么不用apache

nginx比apache 占用更少的内存及资源 ,抗并发能力更强,nginx 处理请求是异步非阻塞的,而apache 则是阻塞型的,在高并发下nginx 能保持低资源低消耗高性能

apache的rewrite重写功能比nginx强大,模块也更多,两者相比nginx的bug要稍多一点。

一般情况下对性能要求高的话可以使用nginx,如果只要求稳定不要求性能的话可以使用apache

6、动静分离的目的

将网站静态资源与后台应用分开部署,提高用户访问静态网页的速度,降低对后台应用的访问。动静分离的做法是将静态资源部署在nginx上,后台项目部署到应用服务器上,根据一定规则将静态请求全部请求到nginx服务器,动态资源请求全部请求到tomcat,达到动静分离的目的。

7、四层七层负载均衡的区别

四层负载均衡是基于ip+端口进行转发的,复杂度低,传输效率高,因为不需要解析具体的消息内容,但是安全性比较低,七层负载均衡是基于url或者主机ip进行转发的,复杂度高,传输效率相比四层比较低,但是安全性高,功能也比较丰富,比如会话保持、图片压缩等。

对比来看两者最大的区别就是效率和功能的区别。四层负载均衡架构设计比较简单,无需解析具体消息内容,在网络吞吐量和处理能力上相对比较高,而七层负载均衡的优势则体现在功能多控制灵活强大

8、nginx的性能调优

系统层面:增大文件句柄打开数。临时修改 ulimit –SHn;ulimit -SHn 10000 重启生效。

永久生效vim /etc/security/limits.conf

修改配置文件/etc/security/limits.conf,加入:

* soft nofile 65535

* hard nofile 65535

echo "* soft nofile 65535" >> /etc/security/limits.conf

echo "* hard nofile 65535" >> /etc/security/limits.conf

* 表示所用的用户,但有的系统不认, 需要具体的用户名,

比如: root soft nofile 65535 root hard nofile 65535


里面有很详细的注释,比如

* soft nofile 2048

* hard nofile 32768

就可以将文件句柄限制统一改成软2048,硬32768

那么什么是软限制,什么是硬限制 ?

硬限制是实际的限制,而软限制,是warnning限制,只会做出warning

这样就实际地增大了文件句柄数。

服务层面:每个进程的最大文件打开数设置的高一点。worker_rlimit_nofile

cpu的亲和设置,把nginx的进程绑定到不同的cpu,减少进程频繁切换cpu带来的资源损耗。worker_processes 8 最多开启8个,8个以上性能不在提升,稳定性也会变差。1.9版本之后可以设置为auto

选择epoll模型,io多路复用,将worker_connections 10240

设置keepalive_timeout会话保持时间

开启GZIP压缩

设置proxy超时时间

配置日志。方便排错

访问控制,流量控制

开启高效传输 sendfile on tcp_nopush on tcp_nodelay on

内核参数优化

9、nginx的会话保持

使用第三方模块nginx-sticky-module-ng,使用ip_hash、url_hash

10、nginx怎么做反向代理

在nginx反向代理中,其实客户端对代理是无感知的,因为客户端不需要任何配置就可以访问,我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器 IP地址。

11、nginx怎么做七层负载均衡

upstream、server、location、proxy_pass

12、nginx如何获取客户端的地址

在nginx的配置文件中添加,proxy_set_hearder X-Forwarded-For $remode_addr

13、nginx如何隐藏版本信息

在配置文件http模块中添加server_tokens off;

14、nginx防盗链怎么做

需要使用一个模块ngx_http_referer_module,并在server块中添加Vaild_referers none

15、nginx的缺点

处理不了动态请求,单进程多线程模式,进程死掉会影响很多用户

nginx优化:


nginx优化:

1、设置Nginx中进程数

user nginx;
worker_processes auto;

2、CPU亲和设置

cpu线程数配置,在高并发情况下,通过设置cpu亲和力来降低由于多核切换带来的性能损耗。

worker_processes auto;
worker_cpu_affinity auto;

需要手动写要绑定到CPU核的配置,cpu有多少个核,就有几位数,1代表内核开启,0代表内核关闭。

3、设置nginx最大可打开文件数

 在nginx.conf文件全局配置中添加:

worker_rlimit_ nofile 102400;

然后还要修改系统可以打开的最大文件数 :

临时修改:  ulimit   -n  102400

永久修改 : vim /etc/security/limits.conf 

*  soft  nofile  102400
*  hard  nofile  102400

4、Nginx事件处理模型

events {
    use epoll;                #使用epoll模型
    worker_connections 1024;  #单个进程允许客户端最大并发连接数
}

5、 sendfile  on;(在http模块中)

开启高效文件传输模式,sendfile指令指定nginx是否调用sendfile函数来传输,输出文件,当nginx是一个静态文件服务器的时候,开启sendfile配置项能大大提高nginx的性能。

6、设置长连接超时时间 

 主要目的是CPU,内存,控制连接数,因为建立连接也是需要消耗资源的

vim /usr/local/nginx/conf/nginx.conf
keepalive_timeout  65;  (在http模块中)

keepalived_timeout  与client的keep-alive连接超时时间,单位是秒,服务器和客户端无交互后将在这个时间后关闭连接,长连接可以减少重建连接的开销,如果设置时间过长,用户又多,长时间保持连接会占用大量资源。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/m0_70838473/article/details/127150979

智能推荐

计算机应用基础客观答案,计算机应用基础作业一(答案)-程序员宅基地

文章浏览阅读401次。2012下半年计算机应用基础作业一一、单选题(共40题,每题1分)1、在第三代计算机期间内按规模和性能产生了______。A:包含笔记本电脑在内的序列机B:包含微型机在内的序列机C:大、中、小和微型机D:巨、大、中和小型机答案:D2、既可以接收、处理和输出模拟量,也可以接收、处理和输出数字量的计算机是______。 A:电子数字计算机 B:电子模拟计算机 C:数模混合计算机 D:专用计算机..._接收、处理和输出模拟量

python中的库有什么作用,python库在哪个文件夹_python中导入的库有什么用-程序员宅基地

文章浏览阅读801次,点赞16次,收藏21次。嗨喽,大家好呀~这里是爱看美女的茜茜呐又到了学Python时刻~随着大数据和人工智能的发展,Python也与多种科技深深绑定。比如自动化测试,运维,爬虫,数据分析,机器学习,金融领域,后端开发,云计算,游戏开发都有涉及python画笑脸的源代码。万丈高楼平地起,Python这座大厦能够如此强大,就是拥有强大的成千上万的库的支持无数牛x的轮子在支持这座大厦,今天我们来一起梳理一下,俯瞰整个Python宝库。那么什么是库呢?从代码角度讲:库就是一堆类(class)和函数(function)的集合。_python中导入的库有什么用

springMvc 的三种url映射处理器的实现-程序员宅基地

文章浏览阅读191次。为什么80%的码农都做不了架构师?>>> ..._spring mvc通过filter实现url映射

解决 Splunk windows数据接入奇葩问题_windows日志无法自动转发到splunk-程序员宅基地

文章浏览阅读946次。Splunk 对app 下面的inputs.conf 文件到 监控路径有严格的要求。_windows日志无法自动转发到splunk

基于ubuntu搭建qemu+risc-v虚拟机流程详细说明_ubuntu安装qemu riscv-程序员宅基地

文章浏览阅读551次,点赞12次,收藏5次。我尝试过ubuntu22.04系统和windows11下vmare+ubuntu22.04虚拟机,都可以进行搭建,旧版本的ubuntu,比如20.04/18.04等,问题应该也不大,可以先尝试。将文件copy到解压后的ubuntu-22.04-rootfs文件夹中的某个目录即可,示例如下,copy一个视频文件到test文件夹,mount后,可以看到该视频文件。这时候,mount.sh,umount.sh,tar_rootfs.sh和解压后的ubuntu-22.04-rootfs文件夹处于同级目录。_ubuntu安装qemu riscv

[心跳] 互联网推送服务原理:长连接+心跳机制-程序员宅基地

文章浏览阅读47次。互联网推送消息的方式很常见,特别是移动互联网上,手机每天都能收到好多推送消息,经过研究发现,这些推送服务的原理都是维护一个长连接(要不不可能达到实时效果),但普通的socket连接对服务器的消耗太大了,所以才会出现像MQTT这种轻量级低消耗的协议来维护长连接,那么要如何维护长连接呢? 在写之前,我们首先了解一下为什么android维护长连接需要心跳机制,首先我们知道,维护任何一个长连接..._微服务 心跳原理

随便推点

51Nod - 1765 期望推导_51nod1765-程序员宅基地

文章浏览阅读751次。题意:题目链接:https://www.51nod.com/onlineJudge/submitDetail.html#!judgeId=223971 每次生成一个[0,n)的随机数,如果这个随机数和给出的m个数字中的其中一个数字相等,那么就停止生成随机数,否则继续生成,求出所有生成的数的和的期望。思路:求期望的一种套路,可以列出一个关于期望E的方程,然后求解方程得出E的表达式。 对这道题来说,_51nod1765

《系统架构设计师教程(第2版)》第6章-数据库设计基础知识-05-NoSQL数据库-程序员宅基地

文章浏览阅读860次,点赞6次,收藏11次。《系统架构设计师教程(第2版)》笔记,第6章-数据库设计基础知识-05-NoSQL数据库

学习Oracle数据库入门到精通教程资料合集-程序员宅基地

文章浏览阅读173次。学习Oracle数据库入门到精通教程资料合集 原文地址:学习Oracle数据库入门到精通教程资料合集 作者:xuerong_wei 任何大型信息系统,都需要有数据库管理系统作为支撑。其中,Oracle以其卓越的性能获得了广泛的应用。本合集汇总了学习Oracle数据库从入门到精通的30份教程资料。资料名称下载地址超详细Oracle教程【PDF版电子..._oracle经典教程 pdf

员工满意度模型五大维度:解析员工幸福感的关键要素_员工满意度调查五个维度-程序员宅基地

文章浏览阅读904次。通过关注工作内容与挑战、工作环境与文化、管理与领导力、个人成长与发展以及薪酬与福利等关键要素,企业可以更好地了解员工的需求和期望,从而采取相应的措施来提高员工满意度。组织应该提供培训和发展计划,帮助员工提升专业技能和领导能力,同时为员工提供晋升和职业发展的机会,以满足员工的成长需求,提高满意度。管理者要成为员工的引领者和支持者,为员工提供积极的反馈和指导,帮助他们实现个人和团队的目标,从而提高员工满意度。一个积极向上、关注员工福祉的企业文化能够增强员工的归属感和认同感,提高员工的满意度。_员工满意度调查五个维度

QQ在异地登录的原因及应付方法._qq在异地登录是怎么回事-程序员宅基地

文章浏览阅读2.7k次。有时会遇到QQ在异地登录的情况。一旦你在使用QQ的过程中遇到这样的情况,你就要小心了,因为你的密码很可能已经泄漏。  原因1:可能你没有密保,或者密保被别人知道了。  解决方法:申请第二代密码保护。  申请第二代密码保护方法:  登陆QQ——菜单——安全中心——申请密码保护——升级为第二代密码保护——设置后保存。  再打开安全中心——安全设置——网络信息安全——设置为高  原因2:你的电脑上有木马_qq在异地登录是怎么回事

javascript 将json数据导出excel_js json转excel-程序员宅基地

文章浏览阅读977次。【代码】javascript 将json数据导出excel。_js json转excel

推荐文章

热门文章

相关标签