逻辑分区建立在扩展分区,扩展分区也是主分区,以4标识,逻辑分区从5开始
shell特点:管道,输入输出重定向,解释程序命令
跨站xss脚本攻击:恶意代码嵌入到用户网页中,用户访问时执行
rsync -e 'ssh -p 8848 ' rsync 以ssh为管道传送数据 scp -P port scp指定端口、
sed 查找日志时间段 (查找匹配的字符串即可) 字符串分界点需存在,这是匹配某一行至某一行,使用正则匹配相应的字符也可
ps 命令格式
测试硬盘读写速度 dd if=/dev/zero of= bz= count=
系统日志 rsyslogd /etc/rsyslogd.conf
lsmod lspci
vim 设置行号,区间查询删除 set number set paste (复制时以源格式生成,也就是不会跳行,格式混乱) :%s/ / /g
set encoding=utf-8
find / -type f -name “” --exec rm -rf {} \;
iptables -t nat -I PREROUTING -d 58.206.99.105 -p tcp —dport 1056 -j DNAT --to-destination 192.168.0.150:3306
添加一个新组为classl,然后添加属于这个组的30个用户,用户名的形式为stdxx,其中xx从01到30
for i in $(seq -w 01 30)
do
useradd -g classl std$i
done
ps -u apache u
tomcat假死,处理
排查机器负载,内存cpu的占用,磁盘问题,写个脚本模拟访问网页,监控硬件 ,状态,查看日志
MySQL双机热备测试 备份与恢复方案
mysqldump最常用的mysql备份工具,支持myisam或者innodb引擎,备份出来的数据是一个sql文件,它不仅要含有创建表的sql语
句,还要包含表中每一条数据的插入sql语句。不管是备份还是恢复,效率都比较低,会锁表,如果数据量不大,使用mysqldurap是很方
便的。
xtrabackup默认只支持innodb引擎的数据,备份的时候相当于直接把mysql datadir里面的所有文件拷贝一份,恢复也是直接把拷贝的
文件放回去•所以,使用xtrabackup备份或者恢复速度都很快。它的变种工具innobackupex是对xtrabackup封装的perl脚本,提供了
myisam表备份的能力•(能进行整库和数据表备份)。当数据量较大时,适合使用innobackupex来备份,效率很快。所以,本题中40G
数据,适合使用这个工具
binlog就是大家熟知的主从了,它相当于是实时备份,在高可用架构中,通常使用主从或者主主,当一台宕机,另外一台可以马上替上
去,数据可能会有少量丢失,但问题不大,我们可以通过査看binlog日志完全恢复
另外,做增量备份时,也可以只备份binlog文件,
恢复时通过binlog文件可以恢复到指定某一时刻的数据状态•打开binlog意味着需要消耗额外的磁盘I/O资源。
主节点配置:
(1) 启用二进制日志
[mysqld]
log_bin
(2) 为当前节点设置一个全局惟一的ID号
[mysqld]
server_id=# 设置一个全局惟一的ID号
log-basename=master 可选项,设置datadir中日志名称,确保不依赖主机名
(3) 创建有复制权限的用户账号
GRANT REPLICATION SLAVE ON *.* TO 'mysql'@'IP地址' IDENTIFIED BY 'passwd';
从节点配置:
(1) 启动中继日志
[mysqld]
server_id=# 为当前节点设置一个全局惟的ID号
relay_log=relay-log relay log的文件路径,默认值hostname-relay-bin
relay_log_index=relay-log.index 默认值hostname-relay-bin.index
(2) 使用有复制权限的用户账号连接至主服务器,并启动复制线程
mysql> CHANGE MASTER TO MASTER_HOST='IP地址',MASTER_USER='mysql', MASTER_PASSWORD='passwd',MASTER_LOG_FILE='mysql-bin.xxxxx', MASTER_LOG_POS=#;
mysql> START SLAVE ;
复制架构中应该注意的问题:
1、限制从服务器为只读
在从服务器上设置read_only=ON 注意:此限制对拥有SUPER权限的用户均无效
阻止所有用户, 包括主服务器复制的更新
mysql> FLUSH TABLES WITH READ LOCK;
2、 RESET SLAVE
在从服务器清除master.info ,relay-log.info, relay log ,开始新的relaylog ,注意:需要先STOP SLAVE
RESET SLAVE ALL 清除所有从服务器上设置的主服务器同步信息如:PORT, HOST, USER和 PASSWORD 等
3、 sql_slave_skip_counter = N 从服务器忽略几个主服务器的复制事件,global变量
如何保证主从复制的事务安全
在master节点启用参数:
sync_binlog=1 每次写后立即同步二进制日志到磁盘,性能差
如果用到的为InnoDB存储引擎:
innodb_flush_log_at_trx_commit=1 每次事务提交立即同步日志写磁盘
innodb_support_xa=ON 默认值,分布式事务MariaDB10.3.0废除
sync_master_info=# #次事件后master.info同步到磁盘
在slave节点启用服务器选项
skip_slave_start=ON 不自动启动slave
在slave节点启用参数:
sync_relay_log=# #次写后同步relay log到磁盘
sync_relay_log_info=# #次事务后同步relay-log.info到磁盘
复制的监控和维护
(1) 清理日志
PURGE { BINARY | MASTER } LOGS { TO 'log_name' | BEFORE datetime_expr }
RESET MASTER
RESET SLAVE
(2) 复制监控
SHOW MASTER STATUS
SHOW BINLOG EVENTS
SHOW BINARY LOGS
SHOW SLAVE STATUS
SHOW PROCESSLIST
(3) 从服务器是否落后于主服务
Seconds_Behind_Master: 0
(4) 如何确定主从节点数据是否一致
percona-tools
(5) 数据不一致如何修复
删除从数据库,重新复制
(6)如果主节点已经运行了一段时间,且有大量数据时,如何配置并启动slave节点:
通过备份恢复数据至从服务器,复制起始位置为备份时,二进制日志文件及其POS
系统监控性能监控 监控软件及指标
Zabbix可以监控cpu、内存、磁盘、进程、用户、文件、服务等基础项目,也可以自定义监控项目,通过shell、python等脚本实现。报
警级别有Information,Warning,Average* High, Disaster,可以通过邮件、短信、微信等方式告瞥
raid0 1 5 模式特点
RaidO最简单的模式,就是把N个物理磁盘合成一个总的虚拟磁盘。
优点是:能够增加磁盘的10性能。缺点是:只要有一个磁盘数据不正
确,整个虚拟磁盘都会有影响。安全性最差《Raidl最安全的模式,raidl也叫做镜像盘,一般都是以偶数形式出现•每个物理盘都有一块
与它数据完全一致的磁盘搭配,
优点是:在坏掉某一块磁盘时都不会造成数据的损坏。缺点是.•磁盘的空间利用率只能达到50%。
Raid5最性价比的模式•
raid5是拿一块磁盘的空间来进行奇偁校验,容错能力平均分布所有硬盘上,当其中一块硬盘失效时,可以保证其
它成员的硬盘数据正常,所以RAID5的总容量为“(N-1)*最低容童硬盘容童”,对整体而言,raid5容量效率比较高。优点是:在保证了
安全性的前提下最大化使用容量。缺点是:会影响整机的性能
apache工作模式
prefork模式使用多个子进程,每个子进程只有一个线程•每个进程在某个确定的时间只能维持一个连接。在大多数平台上,Prefork
MPM在效率上要比Worker MPM要高,但是内存使用大得多。prefork的无线程设计在某些情况下将比worker更有优势:它可以使用那
些没有处理好线程安全的第三方模块,并且对于那些线程调试困难的平台而言,它也更容易调试一些。
worker棋式使用多个子进程,每个子进程有多个线程。每个线程在某个确定的时间只能维持一个连接。通常来说,在一个高流量的HTTP
服务器上,Worker MPM是个比较好的选择,因为Worker MPM的内存使用比Prefork MPM要低得多。但worker MPM也由不完菩的
地方,如果一个线程崩溃,整个进程就会连同其所有线程一起"死掉'由于线程共享内存空间,所以一个程序在运行时必须被系统识别
为"每个线程都是安全的。
ip
grep -n "^$"查询空行行号
iptable -t nat -I PREROUTING -p tcp -dport 80 -j DNAT -to ip:80
查看进程及线程占用的目录
ps ---pid -----ls -l /proc/pid
系统调优
比如文件系统优化(分区调优,格式化时根据存储文件特性,指定合适的块大小,noatime,日
志隔离,软raid,有效使用/dev/shm,关闭不必要的服务)、内核参数优化(net. ipv4. tcp_syncookies = 1,
net. ipv4. tcp_max_tw_buckets = 65535* net. ipv4. tcp_tw_recycle = 1» net. ipv4. tcp_tw_reuse =1)
iptables -A INPUT -p tcp -s ip -dport -j ACC
nginx
启动 /path/bin/nginx -c /path/nginx.conf
重启 nginx -s stop 升级 -s relaod
too many connection 解决
mysql 连接客户端超过最大连接数,程序在打开数据库连接后未能及时关闭
连接导致连接数占用,
处理:在my.cnf 里配置最大连接数 ,重启服务,进入数据库设置变量 临时生效
程序员检查连接关闭异常的原因,查看慢日志
NAT DNAT SNAT
NAT也叫做网络地址转换,起初是用来解决ipv4地址资源的日益衰竭。NAT分为源地址转换SNAT,目标地址转换DNAT,与网络地址伪装
MASQUERADE。SNAT是指在数据包从网卡发送出去的时候,把数据包中的源地址部分替换为指定的IP,这样,接收方就认为数据包的来
源是被替换的那个IP的主机。
MASQUERADE是用发送数据的网卡上的IP来替换源IP,因此,对于那些IP不固定的场合,比如拨号网络或者通过dhcp分配IP的情况下,
就得用MASQUERADE。
DNAT,就是指数据包从网卡发送出去的时候,修改数据包中的目的IP,表现为如果你想访问A,可是因为网关做了DNAT,把所有访问A的数
据包的目的IP全部修改为B,那么,你实际上访问的是B。因为,路由是按照目的地址来选择的,因此,DNAT是在PRER0UTING链上来进
行的,而SNAT是在数据包发送出去的时候才进行,因此是在P0STR0UTING链上进行的。
包过滤防火墙和代理应用防火墙
包过滤防火墙工作在网络协议ip层,它只对ip包的源地址、目标地址及相应端口进行处理,因此速度比较快,能够处理的并发连接比较多,
缺点是对应用层的攻击无能为力。如:iptables, windows等软件类防火墙
代理服务器防火墙将收到的IP包还原成高层协议的通讯数据,比如hup连接信息,因此能够对基于高层协议的攻击进行拦截。缺点是处理速度比较慢,能够处理的并发数比较少•如:一些审计类
的防火墙,用户行为控制系统等。
浏览器输入网址解析过程
a. 用户输入网址到浏览器:
b. 浏览器发出DNS请求信息:
c. 计算机首先査询本机HOST文件,看是否存在,存在直接返回结果,不存在,继续下一步:
d. 计算机按照本地DNS的顺序,向合法dns服务器査询IP结果:
e. 合法dns返回dns结果给本地dns,本地dns并缓存本结果,直到TTL过期,才再次査询此结果:
f. 返回IP结果给浏览器:
g. 浏览器根据IP信息,获取页面:
dns即采用了tcp协议,又采用了udp协议,什么时候采用tcp协议?什么时候采用udp协议?为什么要这么设计
DNS主备服务器之间传输数据时使用tcp,而客户端与DNS服务器之间数据传输时用的是udp。tcp和udp最大的区别在于tcp需要三次握手
来验证数据包的完整性和准确性,udp 不需要验证,速度比tcp要快• DNS主备数据传输需要保证数据准确性,有必要使用tcp通信,而客
户端请求服务端,更需要快,所以用udp
只允许远程主机访问本机的80端口
iptables-F
iptables-A INPUT -p tcp —dport 80 -j ACCEPT iptables-P INPUT DROP iptables-P OUTPUT ACCEPT
操做系统是资源管理程序
现代操做系统的基本特征:程序并发执行
:批处理系统有着高的资源利用率和系统吞吐量;分时系统能获得及时响应:实时系统具有实时特征。除此之外,它们还共同具有并
发、共享、虚拟和异步四个基本特征
多道程序的目的:充分利用cpu ,减少cpu等待时间
进程被唤醒,进入就绪状态
多道程序设计:是在计算机内存中同时存放几道相互独立的程序,使它们在管理程序控制之下,相互穿插的运行*两个或两个以上程序在
计算机系统中同处于开始到结束之间的状态。这就称为多道程序设计•多道程序技术运行的特征:多道、宏观上并行、微观上串行。并
发:在操作系统中,是指一个时间段中有几个程序都处于己启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一
个时刻点上只有一个程序在处理机上运行。吞吐童:吞吐量是指对网络、设备、端口、虚电路或其他设施,单位时间内成功地传送数据
的数量(以比特、字节、分组等测量)
服务器负载高排查(阿里云)
top 看进程占用cpu内存 , 使用iotop进程读写频发,sar 看网卡带宽流量是否跑满
进程自动停止
写脚本判断停止就拉起,查看日志判断(占用资源内存超过限制,)
tcp 握手
在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。第一次握手:建立连接时,客户端发送syn包(syn=j)到服
务器,并进入SYN_SEND状态,等待服务器确认•第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+l),同时自己也发送一个
SYN包(syn=k),即SYN+ACK•包,此时服务器进入SYN_RECV状态。第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认
包ACK(ack=k+l),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。完成三次握手,客户端与服务器开始传送
数据
:首先A向B发SYN(同步请求),然后B回复SYN+ACK (同步请求应答),最后A回复ACK确认,这样TCP的一次连接(三次握手)
的过程就建立了
ip_conntrack: table fUll,dropping packet
链路跟踪表已满,关闭链路跟踪,或扩大当前跟踪值大小 写入/etc/rc.local
linux 启动过程
A. 启动第一步加载BIOS
当你打开计算机电源,计算机会首先加载BIOS信息,BIOS信息是如此的重要,以至于计算机必须在最开始就找到它•这是因为BIOS中包
含了CPU的相关信息、设备启动顺序信息、硬盘信息、内存信息、时钟信息、PnP特性等等。在此之后,计算机心里就有谱了,知道应
该去读取哪个硬件设备了。
B. 启动第二步读取MBR
众所周知,硬盘上第0磁道第一个扇区被称为MBR,也就是MasterBootRccord,即主引导记录,它的大小是512字节,别看地方不大,可里
面却存放了预启动信息、分区表信息。
系统找到BIOS所指定的硬盘的MBR后,就会将其复制到OX7COO地址所在的物理内存中。其实被复制到物理内存的内容就是Boot
Loader,而具体到你的电脑,那就是lilo或者grub 了.
C. 启动第三步BootLoader
BootLoader就是在操作系统内核运行之前运行的一段小程序•通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从
而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核做好一切准备。
BootLoader 有若干种,其中Grub、Lilo 和spfdisk 是常见的Loader。
我们以Gmb为例来讲解吧,毕竞用lilo和spfdisk的人并不多。
系统读取内存中的grub配置信息(一般为menu. 1st或grub. 1st),并依照此配置信息来启动不同的搡作系统。
D. 启动第四步加载内核
根据grub设定的内核映像所在路径,系统读取内存映像,并进行解压缩操作。此时,屏幕一般会输出“Uncompressing Linux”的提示•
当解压缩内核完成后,屏幕输出“OK» booting the kernel”•
系统将解压后的内核放置在内存之中,并调用start_kcmel〇函数来启动一系列的初始化函数并初始化各种设备,完成Linux核心环境的建
立。至此,Linux内核己经建立起来了,基于Linux的程序应该可以正常运行了•
E. 启动第五步用户层init依据inittab文件来设定运行等级
内核被加栽后,第一个运行的程序便是/sbin/init,该文件会读取/etc/inittab文件,并依据此文件来进行初始化工作*
其实/ctc/inittab文件最主要的作用就是设定Linux的运行等级,其设定形式是id:5:initdc&ult:”,这就表明Linux痛要运行在等级5上*
Linux的运行等级设定如下:
0:关机
1:单用户棋式
2:无网络支持的多用户棋式
3:有网络支待的多用户模式
4:保留,未使用
5:有网络支持有X-Window支持的多用户模式
6:重新引导系统,即重启
F. 启动第六步init进程执行rc.sysinit
在设定了运行等级后,Linux系统执行的第一个用户层文件就是/etc/rc.d/rc.sysinit脚本程序,它做的工作非常多,包括设定PATH、设定
网络配置(/etc/sysconfig/network)、启动swap 分区、设定/proc等等。如果你有兴趣,可以到/etc/rc.d中査看一下rc.sysinit文件,里
面的脚本够你看几天的
G. 启动第七步启动内核模块
具体是依据/etc/modules.conf文件或/etc/modules.d目录下的文件来装载内核模块。
H. 启动第八步执行不同运行级别的脚本程序
根据运行级别的不同,系统会运行rc0.d到rc6.d中的相应的脚本程序,来完成相应的初始化工作和启动相应的服务。
I. 启动第九步执行/etc/rc.d/rc.local
你如果打开了此文件,里面有一句话,读过之后,你就会对此命令的作用一目了然:
# Thisscript will be executed *after* all the other initscripts.
# You can putyour own initialization stuff in here ifyou don^ t
# want to do the full Sys V style initstuff.
rc.local就是在一切初始化工作后,Linux留给用户进行个性化的地方•你可以把你想设置和启动的东西放到这里。
J. 启动第十步执行/bin/Iogin程序,进入登录状态
此时,系统己经进入到了等待用户输入username和password的时候了,你己经可以用自己的帐号登入系统了•
进程性能分析
1,使用w看负载均衡 ,是否cpu 不够用,进程太多导致,看是否有IO导致
B. 用vmstat 1命令来査看各个指标,着重分析r, b,swpd,si,so, bi, bo, us, wa.若r列或者us列数值偏高则说明cpu有瓶颈,若b列或者wa
列数值偏高同时bi或bo的数字很大, 则说明磁盘有压力,若swpd —直变化,并且si和so —直不为0,则说明内存不够了•
C•用top命令来分析哪个进程耗费cpu最多,默认按使用cpu多少排序,按M也可以按内存使用多少排序。
D. 用sar -n DEV 1 10或者nload命令可以査看网卡的流童(若没有nload命令,请使用yum install epel-release;yum install -y nload
安装)
E. 用iotop命令可以査看磁盘读写速度(yum install -y iotop安装)
nginx 配置优化
安全方面,着重从安全认证、防盗链、访问控制这几个方面描述
php优化配置
CDN 过程
改linux 密码
Linux分区标准
/boot 200m / 50g swap 16G /data 其余
发现文件系统只读
备份数据,检查是否挂载选项为ro 使用fsck -y 修复
无盘安装的过程 pxe 主要步骤
获取ip地址 ifconfig eth0 | awk '/inet /{print $2}'
Linux 实现多线程
脚本默认一行行执行,执行完毕后才开始下一条,后对命令行执行 command & 丢入后台执行
虚拟化的种类
半虚拟化 完全虚拟化, 伪虚拟化 docker
https 证书
HTTPS证书需要有两个文件,一个是crt, —个是key。Crt文件就是公钥文件,用来加密的。而key文件是私钥文件,是用来解密的。
简单的网站模型架构
架构:Kecpavlied + Ivs + nginx/php +NFS + mysql + redis keepalived+lvs 使用2 台Nginx+php-fi)m使用5 台NFS使用1台
Mysq丨双主,并使用keepalived构建高可用使用2台Redis使用1台,用来存session 备份机器使用1台监控机器使用1台
集群服务器网站时好时坏,排查
首先要找到出问题的服务器,可以简单写个for循环,针对集群中多有机器用curl命令来测试网站能否访问。定位到故陣服务器
后,要在分发器上把故陣机器踢掉,有一种情况,不太好处理,比如某个服务器访问网站比较慢,但也能访问•这样就不太容易找到出问
题的服务器,这时候可以给所有服务器设置一个自定义header,通过curl命令可以很淸楚地定位到具体的服务器。只要定位到服务器,
然后再针对它去排査访问慢的原因。
sed -rn '/10:55:00/,/10:57/ p' access_log
搜索时的字段必须存在,如果不存在则默认会显示到到最后一行
route add -net xxx gw ip
没有目录就发邮件
[ ! -d kkk ] && echo "no mulu " | mail -s "sss" admin@xxxx.com
:Web服务器Apache目前一共有三种稳定的MFM (Multi-Processing Module,多进程处理模块)模式。它们分别是prefork,
worker和event,它们同时也代表这Apache的演变和发展。使用httpd -V命令査看。在configure配置编译参数的时候,可以使用 —
withnpm=prefork|worker!event来指定编译为那一种MPM,当然也可以用编译为二种都支持:一enable-mpms-shared=all,这样在
编译的时候会在modules目录下自动编译出二个MPM文件的so,然后通过修改httpd.conf配置文件更改MPM
1、Prefork _
Prefork MPM实现了一个非线程的、预派生的web服务器。它在Apache启动之初,就先预派生一些子进程,然后等待连接;可以减少频
繁创建和销毁进程的开销,每个子进程只有一个线程,在一个时间点内,只能处理一个请求。这是一个成熟稳定,可以兼容新老模块,也
不需要担心线程安全问题,但是一个进程相对占用资源,消耗大量内存,不擅长处理高并发的场景。
2. Worker MPM
和prefork模式相比,worker使用了多进程和多线程的混合模式,worker模式也同样会先预派生一些子进程,然后每个子进程创建一些线
程,同时包括一个监听线程,每个请求过来会被分配到一个线程来服务。线程比起进程会更轻童,因为线程是通过共享父进程的内存空
间,因此,内存的占用会减少一些,在高并发的场景下会比prefork有更多可用的线程,表现会更优秀一些:另外,如果一个线程出现了
问题也会导致同一进程下的线程出现问题,如果是多个线程出现问题,也只是影响Apache的一部分,而不是全部。由于用到多进程多线
程,需要考虑到线程的安全了,在使用keep-alive长连接的时候,某个线程会一直被占用,即使中间没有请求,痛要等待到超时才会被释
放(该问题在prefork模式下也存在)。
3%Event MPM
这是Apache最新的工作模式,它和worker模式很像,不同的是在于它解决了keep-alive 长连接的时候占用线程资源被浪费的问题,在
event工作模式中,会有一些专门的线程用来管理这些keep-alive类型的线程,当有真实请求过来的时候,将请求传递给服务器的线程,
执行完毕后,^允许它释放。这增强了在髙并发场景下的请求处理。
mysql 主从复制原理
Mysql的Replication是一个异步的复制过程,从一个Mysql instace(我们称之为Master)复制到另一个Mysql instance(我们称之
Slave) •在Master与Slave之间的实现整个复制过程主要由三个线程来完成,其中两个线程(Sql线程和10线程)在Slave端,另外一个线程
(10线程)在Master端。
要实现MySQL的Replication,首先必须打开Master端的Binary
Log(mysql-bin.xxxxxx)功能,否则无法实现。因为整个复制过程实际上就是Slave从Master
端获取该日志然后再在自己身上完全顺序的执行日志中所记录的各种操作。打开MySQL的
BinaryLog可以通过在启动MySQL Server的过程中使用“_log-bin”参数选项,或者
在my.cnf配置文件中的mysqld参数组([mysqld]标识后的参数部分)增加“log-bin”参
数项。
MySQL复制的基本过程如下:
1. Slave上面的10线程连接上Master,并请求从指定日志文件的指定位置(或者从最开始的日志)之后的日志内容;
2. Master接收到来自Slave的10线程的请求后,通过负责复制的10线程根据请求信息读取指定日志指定位置之后的日志信息,返回给
Slave端的10线程。返回信息中除了日志所包含的信息之外,还包括本次返回的信息在Master端的BinaryLog文件的名称以及在Binary
Log中的位置:
3. Slave的10线程接收到信息后,将接收到的日志内容依次写入到Slave端的RelayLog文件(mysql-relay-bin.xxxxxx)的最末端,并将读
取到的Master端的bin-log的文件名和位置记录到master- info文件中,以便在下一次读取的时候能够淸楚的高速Master“我需要从某
个bin-log的哪个位置开始往后的日志内容,请发给我”
4. Slave的SQL线程检测到RelayLog中新增加了内容后,会马上解析该Log文件中的内容成为在Master端真实执行时候的那些可执行的
Query语句,并在自身执行这些Query•这样,实际上就是在Master端和Slave端执行了同样的Query,所以两端的数据是完全一样的。
zabbix 监控项
监控了CPU使用率、内存剰余、磁盘使用空间、网卡流量、web服务、mysql主从、访问曰志等
使用nginx做负载均衡:后端一主一备;测试发现主正常的情况下,会有10%左右的流量访问备,请分析原因。
答:可能是nginx配置文件的max_fails(失败超过指定次数会暂停或请求转往其它服务器)太小。
. lvs与nginx负载均衡的区别•
答:1) nginx工作在网络的七层,所以他可以针对http应用本身来做分流策略,比如针对域名,目录等,而lvs并不具备这些功能,所以
nginx这点可利用的地方就多余lvs,但因为这些功能使其调整度高于lvs,需要经常触碰,触碰多了,出问题的几率就会增加,而lvs 配置性不
高,没有太多的可配置选项,除了增减服务器,并不需要经常去触碰他,大大减少人为出错。
2) nginx对网络的依赖性比较小,理论上只要能ping通,网页访问正常,nginx就能连的通,lvs比较依赖于网络环境,至少痛要一个公网
ip来做VIP
3) nginx测试可以査看错误日志,而lvs出错,很多都是网络问题,没有错误日志,解决比较麻烦
4) nginx可以检测到服务器内部的故陣,比如根据服务器处理网页返回的状态码、超时等等,并且会把返回错误的请求重新提交到另一个
节点• lvs的原理使其不能重发请求•比如
用户正在上传一个文件,而处理该上传的节点刚好在上传过程中出现故陣,nginx会把上传切到另一台服务器重新处理,而lvs就直接断掉
了
apache 与nginx 的区别
:1) nginx轻量级,同样web服务,比apache占用更少的内存及资源抗高并发能力大约是apache的10倍以上,nginx处理请求是异步
非阻塞的,而apache则是阻塞型的,在高并发下nginx能保持低资源低消耗高性能
2) nginx的静态处理性能力比apache强,nginx处理动态不行,一般动态请求要apache去做,nginx只适合静态和反向,
3) 核心区别,apache是同步多进程,一个连接对应一个进程,nginx是异步的,很多很多个连接可以对应一个进程
7.网站做了负栽均衡,发现有些用户访问的时候经常需要重新登陆,是什么原因,怎么处理?
这是因为用户登录后,他的请求被分发到了另外一台服务器上。默认,服务存用户的session是在/tmp/下面,本来己经在A服务器上
保存了session,可下次访问到了B服务器,而B服务器又不存在刚才保存的session信息,所以就会显示未登录。要解决这个问题很容
易,比较简单的做法是,做一个会话保持•比如可以设定1小时内用户的请求固定在一台服务器上•如果是nginx也可以设置ip_hash•当然
最好的解决方案是,使用redis存取session,实现session 共享
expect 批量登陆操做
根目录/root/下有一个文件ip-pwd.ini,内容如下
10.111.11.1, root,xyxyxy
10. 111. 11.1, root,xzxzxz
10. 111. 11.1,root, 123456
10. 111. 11.1, root,xxxxxx
文件中每一行的格式都为linux服务器的ip root root密码请用一个shell批量将这些服务器中的所有tomcat进程kill掉
. linux引导加栽的先后順序是
:BIOS RAID MBR GRUB kerne
答案:1管道2命名管道3信号4消息队列5共车内存6信号量7套接字
文件描述符FD的数童与TCP连接数有什么关系
对于服务器来讲,每一个连接到本机上面的tcp连接都要产生一个socket,每一个socket就是一个文件描述符。所以tcp连接数和文
件描述符是一样的
linux服务器会在哪些方面产生瓶颈?如何排査出这些瓶颈
査看当前多核CPU负载情况 :top之后按1切换
用命令査看3天前的CPU分核的负载数据 :sar -f /var/log/sa/(三天前日期)
压力测试工具
测试web的工具http_load ab专业的测试工具loadrunner
在linux系统中,以(文件)方式访问设备
果结点IP地址为128.202.10.38,屏蔽码为255. 255.255.192,那么该结点所在子网的网络地址是(128. 202.10. 8)
内核引导时,从文件(/etc/fstab)中读取要加载的文件系统
安装Linux系统对硬盘分区时,必须有两种分区类型:(/boot)和(swap)
用来存放系统所需要的配置文件和子目录的目录是(/etc)
域名解析过程
1)客户机提出域名解析请求,并将该请求发送给本地的域名服务器。
2) 当本地的域名服务器收到请求后,就先査询本地的缓存,如果有该纪录项,则本地的域名服务器就直接把査询的结果返回。
3) 如果本地的缓存中没有该纪录,则本地域名服务器就直接把请求发给
根域名服务器,然后根域名服务器再返回给本地域名服务器一个所査询域(根的子域)的主域名服务器的地址。
4) 本地服务器再向上一步返回的域名服务器发送请求,然后接受请求的服务器査询自己的缓存,如果没有该纪录,则返回相关的下级的域
名服务器的地址。
5) 重复第四步,直到找到正确的纪录,
6) 本地域名服务器把返回的结果保存到缓存,以备下一次使用,同时还将结果返回给客户机。
. FTP上传有哪两种模式各自的区别是什么
FTP可用多种格式传输文件,通常由系统决定,大多数系统(包括UNIX系统)只有两种模式:文本模式(ASCII)和二进制模式
(BIN/IMAGE)。
文本传输器使用ASCII字符,并由回车键和换行符分开,而二进制不用转换或格式化就可传字符,二进制模式比文本棋式更快,并且可以
传输所有ASCII值,所以系统管理员一般将FTP设置成二进制模式•应注意在用FIP传输文件前,必须确保使用正确的传输模式,按文本棋
式传二进制文件必将导致错误。
imap 143 snmp 161 snmptrap 162 ire 194 ipx 213 1dap 389 https 443 uucp 540 man 9535 admin 6000 knetd 2053 nfsd 2049
radacct 1813 pop3 110 tftp 69
ftp-data 20
vi中向上搜索的快捷键
令可以将刚刚切换到后台的进程切换到前台
令可以将/etc/passwd文件分隔为最大l〇个字节的文件
split -b 10 /etc/passwd
MySQL高可用方案有那些?MySQL备份方案有那些?有什么缺点
1) keepalived+双主、heartbeat+双主、heartbeat+drbd
2) MySQL 备份方有mysqldump、xtrabackup (innobackupex),mysqldump 支持所有引擎,备份较慢,它相当于是重构了建库、建
表、插入数据的所有sql;xtrabackup默认只支持innodb引擎,而它的扩展innobackupex支持myisam引擎,这个备份相当于是直接拷
贝数据,速度比较快
. keepalived和heartbeat的优缺点,适合那些场合?
答:
1) Keepalived使用更简单:从安装、配置、使用、维护等角度上对比,Keepalived都比Heartbeat要简单得多,尤其是Heartbeat2. 1. 4
后拆分成3个子项目,安装、配置、使用都比较复杂,尤其是出问题的时候,都不知道具体是哪个子系统出问题了,•而Keepalived 只有
1个安装文件、1个配置文件,配置文件也简单很多:
2〉Heartbeat功能更强大:Heartbeat虽然复杂,但功能更强大,配套工具更全,适合做大型集群管理,而Keepalived主要用于集群倒
换,基本没有管理功能:
3) 协议不同:Keepalived使用VRRP协议进行通信和选举,Heartbeat使用心跳进行通信和选举:Heartbeat除了走网络外,还可以通过
串口通信,貌似更可靠;
4) 使用方式基本类似:如果要基于两者设计高可用方案,最终都要根据业务需要写自定义的脚本,Keepalived的脚本没有任何约束,随
便怎么写都可以:Heartbeat的脚本有约束,即要支持service start/stop/restart这种方式,而且Heartbeart提供了很多默认脚本,简单
的绑定ip,启动apache等操作都己经有了;
使用建议:优先使用Keepalived,当Keepalived不够用的时候才选择Heartbeat
. keepalived和heartbeat的优缺点,适合那些场合?
答:
1) Keepalived使用更简单:从安装、配置、使用、维护等角度上对比,Keepalived都比Heartbeat要简单得多,尤其是Heartbeat2. 1. 4
后拆分成3个子项目,安装、配置、使用都比较复杂,尤其是出问题的时候,都不知道具体是哪个子系统出问题了,•而Keepalived 只有
1个安装文件、1个配置文件,配置文件也简单很多:
2〉Heartbeat功能更强大:Heartbeat虽然复杂,但功能更强大,配套工具更全,适合做大型集群管理,而Keepalived主要用于集群倒
换,基本没有管理功能:
3) 协议不同:Keepalived使用VRRP协议进行通信和选举,Heartbeat使用心跳进行通信和选举:Heartbeat除了走网络外,还可以通过
串口通信,貌似更可靠;
4) 使用方式基本类似:如果要基于两者设计高可用方案,最终都要根据业务需要写自定义的脚本,Keepalived的脚本没有任何约束,随
便怎么写都可以:Heartbeat的脚本有约束,即要支持service start/stop/restart这种方式,而且Heartbeart提供了很多默认脚本,简单
的绑定ip,启动apache等操作都己经有了;
使用建议:优先使用Keepalived,当Keepalived不够用的时候才选择Heartbeat
5.LVS haproxy nginx各自的优缺点,适合那些场景?
答:
Nginx/LVS/HAProxy的基于Linux的开源免费的负载均衡软件•
LVS:使用集群技术和Linux操作系统实现一个高性能、高可用的服务器,它具有很好的可伸缩性、可靠性和可管理性,是一款强大实用的
开源软件。
LVS的优点:
1) 抗负载能力强、是工作在网络4层之上仅作分发之用,没有流置的产生,这个特点也决定了它在负载均衡软件里的性能最强的,也保证
了均衡器I/O的性能不会受到大流置的影响。
2) lvs是专门的负载均衡软件,对任何应用都可以做负载均衡:
3>工作稳定,因为其本身抗负载能力很强,自身有完整的双机热备方案,目前用的比较多的是lvs+keepalived,比较大型的用的多的是
lvs+heartbeat。
nginx的优点:
1) Nginx的高并发,同时能承栽上万个并发连接;
2) nginx有充足的第三方功能模块的支持,主要通过upstream模块进行负载均衡:
3) nginx对网络的依赖较小,理论上只要Ping得通,网页访问正常,nginx就能连得通;
4) 工作在网络的7层之上,可以针对http应用做一些分流的策略,它的正则规则比haproxy 更为强大和灵活,这也是它目前广泛流行的主
要原因之一,nginx单凭这点可利用的场合就远多于lvs 了《
nginx的缺点:
1) 将Nginx当做反向代理时,负载均衡功能不是很好,对后端服务器的健康检査功能较弱;
2) nginx仅能支持http、https和email协议,这样就在适用范围上面小些,这个是它的缺点:
3) nginx只支持通过端口来检测,不支持通过url来检测。
haproxy的优点:
1) HAProxy的优点能够补充Nginx的一些缺点,比如支持Session的保持,Cookie的引导; 同时支持通过获取指定的url来检测后端服务器
的状态:
2) haproxy也是专门的负载均衡软件,Haproxy可以负载http,还可以负载均衡mysql;
3) HAProxy是支持虚拟主机的
Apache nginxlighttpd各自的优缺点,适合那些场景?
答:参考文章http://hai0378. iteye.com/blog/1860220
对于动态网页(php)来说,三者在性能上都是差不多的,因为动态网站的瓶颈在php执行效率上,不管是apache还是nginx或者
lighttpd都依赖php本身的执行效率。而对于静态网站(比如单纯的html、图片、js、css等)来说,nginx和lighttpd又是差不多的,但
都比apache更有优势。如果是作为反向代理或者负载均衡,必选nginx。
7.squid varnish各自优缺点,适合那些场景
1) Varnish:
Varnish缓存加速原理:Varnish把数据缓存到服务器的内存中(通过-sfile选项也可以先存到磁盘中),用户访问时直接从内存中的缓存
数据读取,因此非常快。它可以设置〇-60 秒的精确缓存时间,不过32位的机器支持的缓存文件最大为2 GB。Varnish的状态机设计不
仅巧妙,结构也很清晰,利用二叉堆管理缓存文件,即可达到随时删除的目的。
优点:varnish由于是采用多线程的方式运行,所以它的系统资源利用率要比squid强(squid 采用单进程耗1核CPU),但在高并发下它的
CPU、Mem、10资源消耗也比squid严重。varnish 的TCP连接与释放比squid更快一些,因此在同样的负载情况下支持更高的并发连接
数。由于客户是从内存中读取缓存,因此比squid硬盘级的缓存速度更快。Varnish支持管理端口通过正则表达式来清楚缓存。Varnish总
体来说适合高质量大流量的缓存加速(如静态页面和小文件等)。
2) Squid:
Squid缓存加速原理:支持正向代理、透明代理、反向代理,它采用硬盘级的缓存技术,将用户的请求文件缓存到本地磁盘中能够缓存更
多的内容,每G磁盘空间需要32M的内存,因此512M内存的系统能支持16G的磁盘缓存•
优点:squid采用单进程使用单核CPU,利用资源的问题上不如varnish合理,但同时在资源消耗上要比varnish小•由于是采用硬盘做缓
存,所以数据的完整性上要比varnish强,因为缓存到varnish内存上的数据是易失的,一旦varnish进程hang、crash或者重启,缓存的
数据都会从内存中释放出来,此时所有请求都会发送到后端服务器,在高并发下会给后
端的server造成很大的压力• Squid很多人说命中比较低,所以需要多个服务器同时来缓存才能发挥作用。总体来说squid缓存的体系比较
大成本高,适合大文件、流媒体等数据的缓
memcached redis各自的优缺点,适合那些场景?
答:
1) memcached部署简单;支持高并发、高性能:通过程序或者负栽均衡可以实现分布式:仅为内存缓存,重启服务数据丢失;
2) redis支持内存缓存,相当于memcached:支持持久化,相当于memcachedb、ttserver: 数据类型更丰富:支持集群,分布式>
3) 应用场景:纯内存缓存memcached更适合; 数据类型丰富,支持持久化等复杂场景选择redise
介绍下LVS负载模式和调度算法,nginx负载均衡模式有那些算法?
答:
1) LVS负载模式和调度算法
轮叫调度、加权轮叫、最少链接、加权最少链接、基于局域网的最少链接、带复制的基于局部性最少链接、目标地址散列、源地址散列、
最短的期望的延迟、最少队列调度。
2) Nginx负载均衡算法
轮询(默认)每个请求按时间顺序逐一分配到不同的后端服务,如果后端某台服务器死机,自动剔除故障系统,使用户访问不受影响。
weight (轮询权值)weight的值越大分配到的访问概率越高,主要用于后端每台服务器性能不均衡的情况下•或者仅仅为在主从的情况下
设置不同的权值,达到合理有效的地利用主机资源。
ip_hash每个请求按访问IP的哈希结果分配,使来自同一个IP的访客固定访问一台后端服务器,并且可以有效解决动态网页存在的session
共享问题。
fair:比weight、ip_hash更加智能的负载均衡算法,fair算法可以根据页面大小和加载时间长短智能地进行负载均衡,也就是根据后端服
务器的响应时间来分配请求,响应时间短的优先分配。Nginx本身不支持fair,如果需要这种调度算法,则必须安装upstream_fair 模块。
url_hash:按访问的URL的哈希结果来分配请求,使每个URL定向到一台后端服务器,可以进一步提高后端缓存服务器的效率• Nginx本身
不支持url_hash,如果需要这种调度算法,则必须安装Nginx的hash软件包
数据库 :什么是MySQL多实例,如何配置MySQL多实例?
(1) MySQL多实例就是在一台服务器上同时开启多个不同的服务器端口,同时运行多个IHySQL服务进程,这些服务进程通过不同的
socket监听不同的服务器端口来提供服务。
(2) 这些MySQL多实例共用一套MySQL安装程序,使用不同的my.cnf (也可以相同)配置文件、启动程序(也可以相同)和数据文件。
在提供服务时,多实例MySQL在逻辑上看起来是各自独立的,它们根据配置文件的对应设定值,获得服务器相应数量的硬件资源
如何加强MySQL数据的安全
1保护操作系统
保护操作系统确保操作系统的安全是保护数据库安全的前提,因为如果整个运行环境不安全,那么网站上所有的东西都脆弱,很容易暴露
于攻击者。为了维护操作系统和MySQL 服务器,你可以使用以下方法:
主机数据库服务器和web服务器分别在不同的物理机器上,如果可能,在一个单独的服务器上运行数据库服务器,以预防由其他应用程序
或服务的漏洞造成的服务器问题。
安装杀毒软件,防火墙以及所有推荐的补丁和更新,防火墙能有效地把流置过滤到MySQL 服务器。为了更好的提高安全性,你还可以实
行入口封锁。
2禁用所有不必要的服务,而且这样的服务越少越好。
保护所有帐户和密码
攻击者侵入MySQL数据库最常见的一种方法是窃取有安全隐患的账户信息。为了降低出现这种风险的可能性,
你不妨试一试下面的方法:
2.1给所有MySQL账户设置密码
客户程序并不是每次都能识别用户,因此,如果用户知道数据库名但是没有这个用户名的密码,那他可以指定任何其他用户名连接到
MySQL数据库。让每个MySQL用户名都设置密码,这样一来,要想利用匿名账户建立连接将会变得很困难。
2.2不要使用根用户运行MySQL服务器
在安装MySQL的时候,畎认情况下创建了一个命名为“root”的管理用户•每个人都知道这一点,所以攻击者通常试图侵入这
个“root”用户来获取访问权限。为了保陣这个重要帐户的安全,你需要给它重新命名,然后更改一个长并且复杂的密码。
3减少管理员账户
减少管理员账户管理员账户越多,风险越大,所以你应该保持尽可能最少的帐户数董,只有为那些真正需要它的人创建账户。此外,记得
要删除未使用的和匿名的账户。如果你有很多管理员账户,那你霈要定期检査并清理那些不必要的账户。
4加强所有的密码
除了管理员帐户,你还需要加强所有其他用户的密码。你可以检査所有的用户名和密码,必要的时候你还可以重置安全强度低的账户密
码。虽说这样做会有点费时,但却是有必要的。限制数据库权限。
每个用户都应该被授予适当的权限以便数据库能够正常运行,但这样一来也加大了数据库的安全隐患。
就数据库权限而言,我们有以下几点建议:
4. 1不要授予非管理员用户文件/高级/程序权限
文件,高级和程序权限都不应该被滥用。文件权限让用户可以在文件系统中的任何一个地方编写文件,而程序权限让用户在任何时候都能
够査看服务器活动,终止客户端连接甚至更改服务器操作。为了你的数据库安全,这些权限只能授予给管理员账户。
4.2限制或禁用显示数据库权限
显示数据库特权可以用于收集数据库信息,所以攻击者通常利用它来窃取数据并准备进一步攻击•你应该把这个权限授予那些真正需要的
人,或者直接禁用这个权限,你只需要把skip-show-database添加到MySQL数据库中的/etc/my.cnf配置文件中。对于Windows操作
系统来说,则需要添加到my. ini文件中。
4.3限制管理员和所有其他用户的权限
即使是管理员,也不要在同一账户中授予所有权限。因此我们建议你最好降低管理员账户访问数据的权限。至于其他的用户,你最好检査
所有他们拥有的权限,以确保一切都是合适的。
5删除风险组件
MySQL数据库的畎认配置有一些不必要的组件,你可以考虑以下建议:
5. 1 禁用LOAD DATA LOCALINFILE 指令
这个命令允许用户读取本地文件甚至访问其他操作系统上的文件,这可能帮助攻击者收集重要的信息并利用应用程序的漏洞侵入你的数据
库。你需要做的是把set-variable=local-infile=0插入到MySQL数据库的roy.cnf文件中,来禁用这个指令。
5. 2删除测试数据库
有一个畎认的“测试”数据库用于测试目的。由于这个数据库有安全风险,匿名用户也可以访问,你应该使用mys<jl>DROP database
test;指令尽快把它淸除掉。
5.3删除历史文件
MySQL服务器有一个历史文件,它可以帮助你在安装出错的时候找到问題所在•历史文件包含敏感信息,比如说密码,如果这些信息被攻
击者获得,那么将会给你的数据库带来巨大的安全隐患•在安装成功后,历史文件并没有什么用,因此你可以使用cat/dev/null> ~/.
mysql_history指令来删除文件当中的内容•
6限制远程访问MySQL服务器
限制远程访问MySQL服务器对于大多数用户来说,不需要通过不安全的开放网络来访问MySQL服务器。你可以通过配置防火墙或硬件,
或者迫使MySQL只听从localhost来限制主机。此外,需要SSH隧道才能进行远程访问。
如果你想仅仅从本地主机来限制用户建立连接,你需要在在配置文件中添加bind-address=127. 0.0.1〇7利用日志记录
启用日志记录让你可以检测服务器上的活动,这样你就可以分析失败的登录尝试和敏感文件的访问记录,以便了解是否存在向你的服务器
和数据库发起的恶意活动。你只需要把log =/var/log/mylogfile指令添加到MySQL配置文件中,就可以手动启用日志记录功能。至于日
志记录,需要注意以下两点:
日志记录仅适用于査询数量有限的数据库服务器•对于信息量大的服务器,这可能会导致高过载。
由于“hostname, err”文件包含敏感数据表名和密码,只有“root”和“mysql”才有访问和记录这个文件的权限
企业中MySQLroot密码忘了怎么解决,多实例密码忘了又如何解决
1. 1首先停止mysql /etc/init. d/mysqld stop
1.2使用一skip-grant-tables启动mysql,忽略授权登录验证mysqld_safe —skip-grant-tables —user=mysql &
1.3无需密码即可登录mysql
1. 4修改root密码为新密码set password=passvord(*root3306*);
update mysql.user set password=PASSW0RD(〃root3306^) where user’root* andhost,localhost’;flush privileges;
1.5 重启服务登陆
多实例忘记密码
1,停止示例
# mysqladmin -uroot -p*root3306* -S /data/3306/mysql.sock shutdown
2,忽略授权重新启动
mysqld_safe —defaults-file=/data/3306/my.cnf —skip-grant-tables&
# lsof -i:3306
3登陆修改密码
mysql -S /data/3306/mysql.sock
〉update mysql. userset password=PASSW0RD(#root3306〃)where user=’root’and host=*localhost*; mysql> flush
privileges;
4重启服务用修改后的root密码登录数据库
delete from test 和truncate table test 区别
1在功能上,truncate是清空一个表的内容,它相当于delete from table_name。
2 delete是dml操作,truncate是ddl操作;因此,用delete删除整个表的数据时,会产生大童的roolback,占用很多的rollback
segments,而truncate不会。
3在内存中,用delete删除数据,表空间中其被删除数据的表占用的空间还在,便于以后的使用,另外它是“假相”的删除,相当于
windows中用delete删除数据是把数据放到回收站中,还可以恢复,当然如果这个时候重新启动系统(0S或者RDBMS),它也就不能恢复
了。而用truncate清除数据,内存中表空间中其被删除数据的表占用的空间会被立即释放,相当于windows中用shift+delete删除数据,
不能够恢复。
4 truncate 调整high water mark 而delete 不;truncate 之后,TABLE 的HWM 退回到INITIAL和NEXT的位置(默认)delete则不可
以。
5 truncate 只能对TABLE,delete 可以是table,view,synonym。
6 TRUNCATE TABLE的对象必须是本模式下的,或者有drop anytable的权限而DELETE则是对象必须是本模式下的,或被授予DELETE
ONSCHEMA. TABLE或DELETE ANY TABLE的权限。
7在外层中,truncate或者delete后,其占用的空间都将释放。
8 truncate和delete只删除数据,而drop则删除整个表(结构和数据)
面试题006: MySQL的SQL语句如何优化?
答:
1将经常要用到的字段(比如经常要用这些字段来排序,或者用来做搜索),则最好将这些字段设为索引。
2字段的种类尽可能用int或者tinyint类型。另外字段尽可能用NOT NULL。
3当然无可避免某些字段会用到text ,varchar等字符类型,最好将text字段的单独出另外一个表出来(用主键关联好)
4字段的类型,以及长度,是一个很考宄开发者优化功力的一个方面。如果表数据有一定的量了,不妨用PROCEDURE ANALYSE()命令来
取得字段的优化建议!(在phpmyadmin里可以在査看表时,点击“Propose table structure”来査看这些建议)如此可以让你的表字
段结构趋向完善。
5 select*尽量少用,你想要什么字段就select什么字段出来不要老是用*号!同理,只要一行数据时尽量使用LIMIT 1
6绝对不要轻易用order byrandO,很可能会导致mysql的灾难!!
7每个表都应该设置一个ID主键,最好的是一个INT型,并且设置上自动增加的AUTO_INCREMENT标志,这点其实应该作为设计表结构
的第一件必然要做的事!!
8拆分大的DELETE或INSERT语句•因为这两个操作是会锁表的,表一锁住了,别的操作都进不来了,就我来说有时候我宁愿用for循环来
一个个执行这些操作。
9不要用永久链接mysql_pconnect():除非你真的非常肯定你的程序不会发生意外,不然很可能也会导致你的mysql死掉。
10永远别要用复杂的mysql语句来显示你的聪明。就我来说,看到一次关联了三,四个表的语句,只会让人觉得很不靠谱
7:网站打开慢,请给出排査方法,如果是因为数据库慢导致,如何排査并解决,请分析并举例
1 网站出问题,浏览很慢,假定査出来是数据库问题;
2 数据库服务器上uptime,负载很高(load average:8. 01, 6. 30, 5. 58)
3负载高,登录数据库show full processlist;
4慢査询日志开启(日志文件),慢査询日志主要用于日常分析。long_query_time = 1
log-slow-queries = /data/3306/slow. log 1og_queri es_not_usi ng_i ndexes
MySQL Sleep线程过多如何解决?
答:
1 通过show variableslike ’%_timeout%’;査看
可以在命令行修改:
set global wait一timeout = 60;
set global interactive_timeout = 60;
2根据慢査询日志分析执行慢的sql,进行优化
MySQL binlog的工作模式有哪些?各有什么特点,企业中如何选择?
答:binlog模式总共可分为以下三种(row,statement,mixed)
1 row
曰志中会记录成每一行数据被修改的形式,然后在slave端再对相同的数据进行修改,只记录要修改的数据,只有value,不会有sql多表关
联的情况。
优点:在row模式下,bin-log中可以不记录执行的s<jl语句的上下文相关的信息,仅仅只需要记录那一条记录被修改了,修改成什么样
了,所以rcm的日志内容会非常清楚的记录下每一行数据修改的细节,非常容易理解。而且不会出现某些特定情况下的存储过程和
function,以及trigger的调用和出发无法被正确复制问题。
缺点:row level模式下,所有的执行的语句当记录到日志中的时候,都将以每行记录的修改来记录,这样可能会产生大童的日志内容,
比如有这样一条update语句:update productset owner_member_id =‘b’where owner_member_id =‘a’,执行之后,日
志中记录的不是这条update语句所对应额事件(MySOL以事件的形式来记录bin-log日志),而是这条语句所更新的每一条记录的变化情
况,这样就记录成很多条记录被更新的很多个事件。自然,bin-log日志的量就会很大。尤其是当执行alter table之类的语句的时候,产
生的日志置是惊人的。因为MySQL对于alter table之类的表结构变更语句的处理方式是整个表的每一条记录都需要变动,实际上就是重
建了整个表。那么该表的每一条记录都会被记录到日志中。
2 statement (默认的级别:语句级别)
每一条会修改数据的sql都会记录到master的binlog中,slave在复制的时候sql进程会解析成和原来master端执行多相同的sql再执行。
优点:在statement模式下首先就是解决了row模式的缺点,不需要记录每一行数据的变化减少了binlog日志量,节省了I/O以及存储资
源,提高性能。因为他只需要记录在master上所执行的语句的细节,以及执行语句时候的上下的信息。
缺点:在statement模式下,由于他是记录的执行语句,所以,为了让这些语句在slave 端也能正确执行,那么他还必须记录每条语句在
执行的时候的一些相关信息,也就是上下文信息,以保证所有语句在slave端被执行的时候能够得到和在master端执行时候相同的结果。
另外就是,由于mysql现在发展比较快,很多的新功能不断的加入,使mysql的复制遇到了不小的挑战,自然复制的时候涉及到越复杂的
内容,bug也就越容易出现。在statement 中,目前已经发现不少情况会造成Mysql的复制出现问题,主要是修改数据的时候使用了某些
特定的函数或者功能的时候会出现,比如:sleepO函数在有些版本中就不能被正确复制,在存储过程中使用了last_insert_id()函数,可
能会使slave和master上得到不一致的id 等等。由于row是基于每一行来记录的变化,所以不会出现,类似的问题。
3 Mixed (混合模式)
从官方文档中看到,之前的MySQL —直都只有基于statement的复制模式,直到5. 1. 5版本的MySQL才开始支持row复制
Mixed模式,可以理解为是前两种模式的结合。
Mixed模式下,MySQL会根据执行的每一条具体的sql语句来区分对待记录的日志形式, 也就是在Statement和Row之间选择一种。
新版本中的Statment level还是和以前一样,仅仅记录执行的语句。而新版本的MySQL中队row level模式也被做了优化,并不是所有的
修改都会以row level来记录,像遇到表结构变更的时候就会以statement模式来记录,如果sql语句确实就是update或者delete 等修改
数据的语句,那么还是会记录所有行的变更
ssh
体现技能 水平
技能清单
基础
服务
集群
监控了CPU使用率