赞
踩
不 管 你 才 踏 出 社 会 ,还 是 已 久 经 沙 场 , 请 相 信 ,这 个 世 界 上 ,岁 月 对 每 个 人
都 是 公 平 的 , 1 天 都 是 24 个 小 时 ,一 分 钟 都 是 6 0 秒 。也 许 你 要 花 久 一 点 的
时 间 才 能 找 到 你 真 正 想 做 的 事 情 ,也 许 你 要 花 长 一 点 的 时 间 才 能 改 变 现 在 的
状 况 ,但 是 不 管 早 还 是 晚 ,请 你 一 定 要 出 发 ,不 管 是 早 还 是 晚 ,请 记 得 一 定
要努力去做、去改变!!!
十年杭漂,今撤霸都对了,号主还是《运维工程师进阶成神之路》系列文章的作者,文章从最基础的网络基础
开篇,涉及系统基础、新手必备命令与 Shell 脚本编写、Linux 服务部署与配置、面试题
讲解;再到提高篇:MySQL 数据库、企业生产项目实战案例、云计算、Docker 容器、虚
拟化技术、企业架构实战;最后还提高一些实际职场中的踩坑经验总。总结成一句话:干
货满满的,无论开发、运维、测试都值得学习一波 。
关注“民工哥技术之路”回复“成神之路”可获最新版本
此系列 Github 地址:https://github.com/mingongge/BestOPS
关注民工哥技术之路回复“备份”获取生产数据备份方案
看了这么多民工哥技术之路的文章之后,是不感觉还阔以呢?其实民工哥技术之路有很多
干货文章,这里篇幅有限就不能一一列举了,大家可以扫下方二维码关注后,慢慢仔细认
真的逐一阅读。告诉大家一个小秘密:民工哥技术之路还不定期举行读者福利活动哦,比
如说:赠送技术书籍、技术课程等。
民工哥技术之路(ID:jishuroad)
扫描二维码关注查看更多精彩内容
▼1、请描述下 linux 系统的开机启动过程
开机加电 BIOS 自检----------->MBR 引导----------->grub 引导菜单----------->加载内核----------->启
动 init 进程----------->读取 inittab 文件----------->启动 mingetty 进程----------->登录系统
2、权威 DNS 和递归 DNS 含义,智能 DNS 的实现原理
权威 DNS
是经上一级授权对域名进行解析的 DNS 服务器,同时它可以把解析授权转授给其他服务器,
递归 DNS
负责接受用户对任何域名的查询,并返回结果给用户,它可以缓存结果避免用户再向上查询
智能 DNS
就是将对用户发起的查询进行判断出是哪个运营商的用户查询,然后将请求转发给相应的运营商 IP 处理,减少跨运营访问的时间,提高访问速度
3、通过 APACHE 访问日志 access.log 统计 IP 和每个地址访问的次数,列出访问量前 10 名的
IP 地址,写出具体命令
awk ‘{print $1}’ access.log|uniq -c|sort -rn |head -10
4、编写脚本实现将/usr/local/test 目录下大于 100K 文件,将它拷贝到/tmp 目录下
#!/bin/bash
for file in ls /usr/local/test
do
if [ -f $file ];then
if [ ls -l $file
|awk ‘{print $5}’ -gt 10000];then
mv $file /tmp/
fi
fi
done
5、将本地的 80 端口的请求转发到 8080 端口,本机地址 10.0.0.254,写出命令
iptables -t nat -A PRETOUTING -d 10.0.0.254 -p tcp --dprot 80 -j NDAT --to-destination
10.0.0.254:8080
6、如何实现 nginx 代理的节点访问日志记录的是真实访客的 IP,不是代理的 IP
配置 nginx.conf 配置文件增加下同的标记内容
server{
listen 80;
server_name blog.text.com;
location / {
proxy_pass http://test_servers;
proxy_set_header Host $host;
proxy_set_headerX-Forwarded-For $remote_addr;
}
修改完成后,重新加载 nginx 即可,/application/nginx/sbin/nginx -s reload
7、MYSQL 一主多从,主库宕机,如何合理切换到从库,其它从库如何处理?
1:登陆所有从库查看 post 信息,使用 POST 最大的做为新的主库,然后将从为提升为新的
主库,登陆从库(新的主库)执行 stop slave,
2:修改 my.cnf 配置文件,开启 log-bin 并重新启动数据库服务,登陆数据库执行 restet
master ,show master status\G;查看主库信息,最后创建授权同步用户与权限和网站使用数据
库的用户与权限,同步所有机器的/etc/hosts 文件(这时就体现了之前全网用域名则不是用
IP 的作用了,不然还得修改网站程序切换到新主库服务器 IP 上,否则无法连接到数据库)
3:登陆其它从库,执行 change master 操作,查看同步状态
8、误操作 drop 语句导致数据库数据破坏,请给出恢复的实际大体步骤
所有数据恢复的基础都在于备份,必须要有完整的备份,否则恢复无从谈起
误操作导致的数据库破坏需要使用增量恢复的方法进行恢复数据库,具体步骤如下1、查看备份与 binlog 文件
2、刷新并备份 binlog 文件
mysqladmin -uroot -pmysql123 -S /data/mysql.sockflush-logs
3、将 binlog 文件恢复成 sql 语句
mysqlbinlog --no-defaults mysql-bin.000061 mysql-bin.000062 >bin.sql
4、将其中误操作的语句删除(就是 drop 的动作)
5、解压全备文件,恢复全备文件
gzip -d mysql_backup_2016-10-12.sql.gz
mysql -uroot -pmysql123 -S/data/3306/mysql.sock < mysql_backup_2016-10-12.sql
如果有对表的操作,恢复数据时需要接表名
6、恢复误操作前的 binlog 文件记录的 sql 语句
mysql -uroot -pmysql123 -S/data/3306/mysql.sock < bin.sql
最后登陆数据库,查看数据是否恢复成功,如果有确定的误操作时间,就直接恢复这段时间
的数据即可
9、列举一个实际生产的例子,网站访问速度慢是因为数据库访问慢导致的
问题情况描述:
突然有一天,有同事反应,网站访问速度很慢,有时候会出现打不开网站的情况,刷新等待
好长时间后又正常打开
解决步骤:
登陆数据库执行 show full processlist 看到有很多相同的查询动作且征对同一张表,因此确定
网站打不开的原因是这个,故将此 IP 禁止访问。日常工作中避免此类问题发生解决方法如
下:可以将数据库读写分离;安装数据缓存服务器,尽量将大部分的请求不直接对接数据库;
10、一个 shell 脚本手工可以执行,放入定时任务后不能执行,可能的原因?
手工可以执行,表明脚本本身不存在逻辑上的问题,可能原因有以下几点
1:定时任务书写有错误导致,执行的脚本没有写绝对路径,找不到脚本
2:环境变量问题导致
11、利用 shell 开发 rsync 服务启动、停止脚本,并通过 chkconfig 进行开关机管理
[root@mysql-1 download]# vi RSstart.sh
#!/bin/sh
##create by mingongge at 2017-01-10
. /etc/init.d/functions
case “$1” in
start)
rsync --daemon
if [ $? -eq 0 ];then
action “rsync is started” /bin/true
else
action “rsync is started” /bin/false
fi
;;
stop)pkill rsync
sleep 2
if [ ps -ef|grep rsync|grep -v grep |wc -l
-eq 0 ];then
action "rsync is stoped " /bin/true
else
action “rsync is stoped " /bin/false
fi
;;
restart)
pkill rsync
sleep 2
if [ ps -ef|grep rsync|grep -v grep |wc -l
-eq 0 ];then
rsync --daemon
if [ $? -eq 0 ];then
action “rsync is restarted” /bin/true
fi
fi
;;
*)
echo “USAGE :{start|stop|restart}”
;;
esac
“RSstart.sh” [New] 36L, 731C written
[root@mysql-1 download]# chmod +x RSstart.sh
[root@mysql-1 download]# sh RSstart.sh
USAGE :{start|stop|restart}
[root@mysql-1 download]# sh RSstart.sh start
rsync is started
[ OK ]
[root@mysql-1 download]# ps -ef|grep rsync
root
1088
1 0 Jan09 ?
00:00:00 rsync --daemon
root
3527 2869 0 03:54 pts/0 00:00:00 grep rsync
[root@mysql-1 download]# sh RSstart.sh stop
rsync is stoped
[ OK ]
[root@mysql-1 download]# ps -ef|grep rsync
root
3540 2869 0 03:54 pts/0 00:00:00 grep rsync
[root@mysql-1 download]# sh RSstart.sh start
rsync is started
[ OK ]
[root@mysql-1 download]# sh RSstart.sh restart
rsync is restarted
[ OK ]
[root@mysql-1 download]# ps -ef|grep rsync
root
3558
1 0 03:54 ?
00:00:00 rsync --daemonroot
3564 2869 0 03:55 pts/0
配置开关机管理
00:00:00 grep rsync
然后在脚本最前面加上以下内容
具体自己测试下,也有可能这个启动,关闭序号有冲突,需要修改
12、请描述 OSI7 层模型各层名字及功能,并举例在不同层对应的协议
第一层:物理层,利用传输介质为数据提供物理连接, 对应的协议:ARP
第二层:数据链路层:建立和管理各节点间的链接链路 对应的协议:PPTP、CDP
第三层:网络层,是控制数据链路层与上传输层之间的信息转发、建立与维持对应的协议:
IP、路由协议
第四层:传输层,提供会话传输服务,确保数据正确传送对应的协议:TCP UDP
第五层:会话层,提供建立会话管理,支持数据交换
第六层:表示层,处理数据(数据格式、编码、加密等),按一定的格式传送至会话层
第七层:应用层,为用户提供各类应用服务(文件、打印、邮件等服务)对应协议:HTTP、
FTP、SMTP、POP3
13、linux 系统环境下如何查看系统运行了多长时间
[root@mysql-1 download]#uptime
02:05:22 up 2:32, 2 users, load average: 0.00, 0.00, 0.00
[root@mysql-1 download]#top
top -02:07:34 up 2:34, 2 users, load average: 0.00, 0.00, 0.00
Tasks: 73total, 1 running, 72 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 486284k total, 174664kused, 311620k free, 6424k buffers
Swap: 1048568k total, 0kused, 1048568k free, 63548k cached
02:05:22 up 2:32, 2 users, load average: 0.00,0.00, 0.00
服务器运行多长时间 登陆用户数 上一分钟、5 分钟、15 分钟的负载
14、linux 系统中添加路由的方法
主机路由
route add -host 192.168.197.100 dev eth0
网关路由
route add default gw 192.168.197.1
网络路由
route ad -net 192.168.1.0 netmask 255.255.255.0 deveth1
route ad -net 192.168.1.0 netmask 255.255.255.0 gw192.168.197.1
15、已知 test.txt 文件内容如下,请取出文件的 5-15 行内容
[root@i ~]# cat test.txt
1
2
34
5bbb
6xxxxxxxxxxx
7123i4i44
8
9
10
11
12
13ffffff
14fffff
15bbbbbb
16
17nnnnnn
方法一:[root@i ~]# grep 15bbbbbb -B 10 test.txt
5bbb
6xxxxxxxxxxx
7123i4i44
8
9
10
11
12
13ffffff
14fffff
15bbbbbb
方法二:[root@i ~]# sed -n ‘5,15p’ test.txt
5bbb
6xxxxxxxxxxx
7123i4i44
8
9
10
11
12
13ffffff
14fffff
15bbbbbb
方法三:[root@i~]# awk ‘{if(NR<16 && NR>4) print $1}’ test.txt
5bbb
6xxxxxxxxxxx
7123i4i44
8
910
11
12
13ffffff
14fffff
15bbbbbb
16、/var/log/messages 日志出现 kernel:nf_conntrack:tablefull,dropping packet,请问是什么原
因导致的,如何解决?
此报错为 iptables 报错信息,连接跟踪表已满,开始丢包,可能的原因是由于频繁的连接、
关闭,或者网络的一些 TCP 的连接导致的
解决方法:
1、加大跟踪表的大小
2、禁用一些不必跟踪的连接状态
3、禁用模块 ip_vs nf_conntect
17、linux 系统 nginx 与 Php 环境,发现 PHP-FPM 进程高,请说出可能的原因以及如何解决
1:php 的插件程序与现有的 PHP 版本存在不兼容情况,解决方法从 php.ini 中禁止相关插
件
2:软件本身存在问题,需要开发协同运维一同处理,查找原因
3:php 程序存在死循环现象,使用服务器负载过高,解决方法使用 top 命令查看
18、磁盘报错:nospace left on device,但是 df-h 查看空间没有满,为什么?
原因:系统 inode 满了,因为所有的文件的文件名信息都是存放在 inode 里面的,文件内容
是存放在 block 里面
可以使用 df -i 来查看 inode 的使用情况
[root@mysql-1 download]# df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda2 1234576 138303 1096273 12% /
tmpfs
60785
1 60784 1% /dev/shm
/dev/sda1
51200 38 51162 1% /boot
19、 磁盘空间满了,删除一部分 nginx 日志后,但是磁盘空间还是满的,为什么?
删除的日志信息,一部分可能还是被进程调用,因此,需要重启 nginx 服务来释放进程;或
者实际生产环境中使用>/log/access.log 清空文件
20、查看 apache 进程数
perfork 模式
ps -ef|grep http|grep -v grep|wc -l
worker 模式
pstree -a|grep httpd|wc -l
21、提取文件 test.log 中 FAILD 与 SUCCESSFUL 的字符但不包括 DONE 的行,然后以:为隔符,
提取第三列[root@mysql-1]# cat test.log
FAILD:SUCCESSFUL:DONE:CRITICAL
FAILD:SUCCESSFUL:NO:GOOD
FAILD:NO:DO:QINGYUN
SUCCESSFUL:DONE:CRITICAL::CRITICAL
方法一:
[root@mysql-1]# egrep "FAILD|SUCCESSFUL"test.log |grep -v DONE|awk -F ‘:’ ‘{print $3}’
NO
DO
方法二:
[root@mysql-1]# egrep “FAILD|SUCCESSFUL"test.log |grep -v DONE|cut -d: -f3
NO
DO
22、公司机房的服务器接近 254 台了,请你设计一个解决方案,如何划分网段,并实现业
务平滑迁移。
第一种方案:变长子网掩码的方法,加大 IP 地址的可使用范围,全网分发/etc/hosts 文件
第二种方案:增加核心交换机,在核心交换机划分 VLAN,将新增的服务器加入新的 VLAN
中,全网分发/etc/hosts 文件
23、Nginx 反向代理如何实现代理 RS 节点上的不同虚拟主机,请说出原理和配置方法或思
路。
客户端向反向代理发送请求,反向代理按一定的规则转发至目标服务器,并将返回的内容返
回给客户端,可分为以下两种:
配置内部不同服务器转发:
upstream app1 {
server 192.168.1.10:80 weight=5;
server 192.168.1.11:80 weight=5;
}
upstream app2 {
server 192.168.1.20:80 weight=5;
server 192.168.1.21:80 weight=5;
}
配置 server
server{
listern 80;
server_name app.abc.com
}
配置匹配转发规则
location /app1/ {
proxy_pass http://example.com/app1;
proxy_set_header Host $host;
}
location/app2/ {proxy_passhttp://example.com/app2;
proxy_set_header Host $host;
}
做为负载均衡
配置负载均衡服务器池,也就是调度规则
upstream test_servers {
server 192.168.1.2:80 weight=5;
server 192.168.1.4:80 weight=5;
server 192.168.1.6:82 weight=15;
}
然后配置 server 标签,
server {
listen 80;
server_name www.abc.com;
proxy_pass http://test_servers;
proxy_set_header Host $host
}
配置完成后,重新加载 nginx 服务
24、说出 netstat -an 命令结果中最后一列 status 对应的不同网络连接状态含义
[root@ ~]# netstat -an
Active Internet connections (servers andestablished)
Proto Recv-Q Send-Q Local Address
Foreign Address
tcp
tcp
tcp
0
0
0
State
0 0.0.0.0:22
0.0.0.0:*
LISTEN
0 139.24.65.45:54296
10.11.68.13:80
ESTABLISHED
52 39.24.65.145:22
36.32.8.85:546
ESTABLISHED
tcp
0
0 139.24.165.45:586
10.11.8.13:80
CLOSE_WAIT
listen
服务启动后首先处于的状态(监听状态)
established
建立连接,表示建立连接的两端可以正常通信了
close_wait
对方主动关闭连接或网络异常而中断,因此状态会变成
time_wait
主动断开连接,收到对方确认后的状态,相当于释放资源,可以设置些
种状态的参数,也就是主动断开后,下一次再连接的时间间隔
syn_sent
请求连接的状态,需要访问其它机器时首先发出的同步信号
25、binlog 是什么?binlog 记录的是什么?有几种模式及优缺点,企业中选择哪种模式做同
步?
bInlog:是用于记录所有更新了数据的操作语句,语句以事件的形式保存,它描述数据的更
改过程
作用:用于实时备份数据,数据库的主从复制
log_bin 打开记录 binlog 功能
binlog 的查看
mysqlbinlog /home/mysql/binlog/binlog.000003
binlog 的删除:可分为自动与手动删除自动删除
能过 binlog 参数 expire_logs_days 来实现
show binary logs;
show variables like “expire_logs_days;”
set gloable expire_logs_days=3;
手工删除
reset master 删除主的 binlog
reset slave
删除从的中继日志
三种模式:
Row level 模式 :日志会记录每一行数据被修改的形式,然后在从端对相同的数据进行修改
优点:可以不记录执行 SQL 语句上下文相关的信息,只记录哪一条数据被修改,修改成什
么样了
缺点:所有执行的语句都当记录到日志文件中,而且都会以每行记录的修改来记录,会产生
大量的日志内容
statement 模式:每一条修改数据的 SQL 都会记录 master 的 bin-log 中,slave 在复制的时候
SQL 进程会解析成和原来 master 端执行过的相同的 SQL 来执行
优点:解决了上 row level 模式的缺点,不需要记录每一行数据的变化,减少日志量,可以
得高性能
缺点:由于记录的是执行语句,在此模式下会有主从无法复制的问题出现
mixed 自动模式:MYSQL 会根据执行的每一条具体 SQL 语句来区分对待记录的日志格式,
企业使用场景:
1、如果不会用到 mysql 特殊的功能,基本都是默认的模式 statement 模式
2、如果会到 mysql 的一些特殊功能,基本都是会使用 row level 模式
26、请详细描述 http 协议原理
http 协议:是客户端与服务端之间通信传输数据的基础,HTTP 协议是基于 TCP/IP 协议之上
的协议
原理包括四个过程:
连接:浏览器与服务器建立连接,打开一个 socket 的虚拟文件,表明连接建立成功
请求:浏览器通过 socket 向服务器提交请求(一般是 GET 或 POST 请示命令)
应答:浏览器请求提交后,通过 HTTP 协议传送给服务器,服务器收到后进行处理将结果又
通过 HTTP 回传给客户端,从而在客户端显示出所请求的页面
关闭连接:当应答结束后,浏览器与服务器之间就断开连接
27、请详细描述 MySQL 主从复制原理。
原理:主库开启 binlog 功能并授权从库连接主库同步的用户权限 ,将数据库的修改或变化生
成 bin-log 日志,从库通过 change mster 的语句得到主库的相关信息,从库开启 slave 并连接
主加进行相关验证,验证通过后,主库的 IO 线程根据从库的请求将相关位置点信息,与最
新的 blnlog 信息发送给从库的 IO 线程,从库的 IO 线程将 SQL 语句的信息放在 relay-log 中,
最后从库的 SQL 线程将 relay-log 中的 SQL 语句应用到从库中,实现主库与从库之间的数据
同步,然后不断重新上述动作28、用一条命令将除了 sshd、crond、network、rsyslog 几个服务之外的服务全部关闭(无
需开机自动)
方法一:
[root@centos6~]# for name in chkconfig --list|grep 3:on|awk '{print $1}'|grep -Ev "sshd|crond|rsyslog|network"
;dochkconfig $name off;done
[root@centos6~]# chkconfig --list|grep 3:on
crond
0:off 1:off 2:on 3:on 4:on 5:on 6:off
network 0:off 1:off 2:on 3:on 4:on 5:on 6:off
rsyslog 0:off 1:off 2:on 3:on 4:on 5:on 6:off
sshd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
方法二:
[root@centos6 ~]# chkconfig–list|grep 3:on|awk ‘{print $1}’|grep
-Ev"sshd|crond|rsyslog|network”|sed -r “s#(.*)#chkconfig \1off#g”|bash
[root@centos6~]# chkconfig --list|grep 3:on
crond
0:off 1:off 2:on 3:on 4:on 5:on 6:off
network 0:off 1:off 2:on 3:on 4:on 5:on 6:off
rsyslog 0:off 1:off 2:on 3:on 4:on 5:on 6:off
sshd
0:off 1:off 2:on 3:on 4:on 5:on 6:off
29、说明系统/etc/inittab 中各个启动级别的含意
[root@centos6~]# tail /etc/inittab
#Default runlevel. The runlevels used are:
单用户模式
networking)
多用户,没有 NFS
桌面模式
id:3:initdefault: 默认
30、写一个 sed 命令,修改/tmp/input.txt 文件的内容,要求:(1) 删除所有空行;(2) 一行
中,如果包含"11111",则在"11111"前面插入"AAA",在"11111"后面插入"BBB",比如:将
内容为 0000111112222 的一行改为:0000AAA11111BBB2222
[root@~]# cat -n /tmp/input.txt
1 000011111222
2
3 000011111222222
4 11111000000222
56
7 111111111111122222222222
8 2211111111
9 112222222
10 1122
11
删除所有空行命令
[root@~]# sed ‘/^$/d’ /tmp/input.txt
000011111222
000011111222222
11111000000222
111111111111122222222222
2211111111
112222222
1122
插入指定的字符
[root@~]# sed ‘s#(11111)#AAA\1BBB#g’ /tmp/input.txt
0000AAA11111BBB222
0000AAA11111BBB222222
AAA11111BBB000000222
AAA11111BBBAAA11111BBB11122222222222
22AAA11111BBB111
112222222
1122
31、每周一下午三点将/tmp/logs 目录下面的后缀为*.log 的所有文件 rsync 同步到备份服务
器 192.168.1.100 中同样的目录下面,crontab 配置项该如何写:
00 15 * * 1 rsync -avzP /tmp/logs/.log root@192.168.1.100:/tmp/logs
32、找到/tmp/目录下面的所有名称以"_s1.jpg"结尾的普通文件,如果其修改日期在一天内,
则将其打包到/tmp/back.tar.gz 文件中
find /tmp -type f -name "._sj.jpg" -mtime 1|xarges tar zxf /tmp/back.tar.gz
33、写出如何给 apache 增加 virtualhost,让访问 http://www.test.com 和 http://www.test.cn
的时候,都打开/var/www/html 目录下面的文件:
<VirtualHost :80>
ServerAdmin admini@abc.com
DocumentRoot “/var/www/html”
ServerName www.test.com
ServerAlias test.cn
ErrorLog “logs/bbs-error_log”
CustomLog “logs/bbs-access_log” common
34、配置 mysql 服务器的时候,配置了 auto_increment_increment=3,请问这里的 3 意味着什么?
auto_increment 是用于主键自动增长的,从 3 开始增长,3 表示自增的起始值
35、用一条命令显示本机 eth0 网卡的 IP 地址,不显示其它字符
方法一:
[root@apache ~]# ifconfig eth0|grep “inet addr”|awk -F ‘[ :]+’ ‘{print $4}’
192.168.1.22
方法二:
[root@apache ~]# ifconfig eth0|awk -F ‘[ :]+’ ‘NR==2 {print KaTeX parse error: Expected 'EOF', got '}' at position 2: 4}̲' 192.168.1.22 …##g’
192.168.1.22
方法四:
[root@apache ~]# ifconfig eth0|sed -n ‘2p’|sed -r 's#^.addr:(.) Bc.$#\1#g’
192.168.1.22
36、请详细说明 keepalived 的故障切换工作原理
这种故障切换是通过 VRRP 协议来实现的,主节点会按一定的时间间隔发送心跳信息的广播
包,告诉备节点自己的存活状态信息,当主节点发生故障时,备节点在一段时间内就收到广
播包,从而判断主节点出现故障,因此会调用自身的接管程序来接管主节点的 IP 资源及服
务,当主节点恢复时,备节点会主动释放资源,恢复到接管前的状态,从而来实现主备故障
切换
37、写出一个 curl 命令,访问指定服务器 61.135.169.121 上的如下 URL:
http://www.baidu.com/s?wd=test,访问的超时时间是 20 秒:
curl --connect-timeout 20 http://61.135.169.121/s?wd=test
38、用 netstat 命令配合其他 shell 命令,按照源 IP 统计所有到 80 端口的 ESTABLISHED 状态
链接的个数,输出结果类似(第一列为连接数,第二列为 IP)
:
[root@~]# netstat -an|grep ESTABLISHED
tcp
0
52 139.224.199.85:22
101.47.33.86:51763
tcp
0
0 139.224.199.85:45368
106.11.68.13:80
[root@ ~]# netstat -an|grep ESTABLISHED|grep “:80”
tcp
0
0 139.224.199.85:45368
106.11.68.13:80
ESTABLISHED
ESTABLISHED
ESTABLISHED
[root@ ~]# netstat -an|grep ESTABLISHED|grep “:80”|awk ‘BEGIN{FS="[[:space:]:]+"}{print $4}’
139.224.199.85
说明:FS 是字段分隔符
如果需要进行整理并排序的话,完整命令如下
[root@ ~]# netstat -an|grep ESTABLISHED|grep “:80”|awk 'BEGIN{FS="[[:space:]:]+"}{print
KaTeX parse error: Expected 'EOF', got '}' at position 2: 4}̲'|sort|uniq -c|… 表示搜索以 word 结尾的内容。
^$ 表示的是空行,不是空格。
. 代表且只能代表任意一个字符。非正则表达式其他功能(当前目录,加载文件)
\ 转义字符,让有着特殊身份意义的字符,脱掉马甲,还原原型。例如.只表示原始小数
点意义。
或 1> 输出重定向:把前面输出的东西输入到后边的文件中,会删除文件原有内容。
或 1>> 追加重定向:把前面输出的东西追加到后边的文件中,不会删除文件原有内容。
<或<0 输入重定向:输入重定向用于改变命令的输入,指定输入内容,后跟文件名。
<<或<<0 输入重定向:后跟字符串,用来表示“输入结束”,也可用 ctrl+d 来结束输入。
2>
错误重定向:把错误信息输入到后边的文件中,会删除文件原有内容。
2>>
错误追加重定向:把错误信息追加到后边的文件中,不会删除文件原有内容。
标准输入(stdin)
:代码为 0,使用<或<<。
标准输出(stdout):代码为 1,使用>或>>。正常的输出。
标准错误输出(sederr)
:代码为 2,使用 2>或 2>>。
特殊:
2>&1 就是把标准错误重定向到标准输出(>&)
。
/dev/null 2>&1 等价于 1>/dev/null 2>/dev/null
56、请列出 Linux 中你认为重要的文件夹及包含内容
1 /目录下的文件夹里面分别是以下内容:
/usr 包含所有的命令和程序库、文档和其他文件及当前 linux 发行版的主要应用程序
/var 包含正在操作的文件,还有记录文件、加密文件、临时文件等/home 除了 root 用户外的所有用户的配置文件,个性化文件和主目录,即家目录
/proc 虚拟目录,该目录实际上指向内存而不是硬盘
/bin 系统执行文件(二进制文件)普通用户可以使用
/sbin 系统执行文件(二进制文件)不能被普通用户使用,通常由 root 用户使用
/etc 操作系统的配置文件
/root root 用户的家目录
/dev 系统设备文件,linux 所有设备都是以文件的形式被处理,该目录不包含驱动程序
/lib 程序和核心模块共享库(仅限于/下的程序)
/boot 系统引导、启动文件,通常 grub 也在这里
/opt 可选应用程序目录
/tmp 临时文件,系统会自动清理
/lost+found 恢复文件(类似回收站)
/media 所有的磁盘(有时有光盘)将以文件夹的形式挂载,光盘镜像也可以挂载
/cd-rom 挂载光盘的地方
2 /usr 目录下的文件比较重要,其作用下面分类列出:
/usr/X11 X-windows 桌面环境
/usr/doc linux 系统的文档资料
/usr/share 独立于当前计算机的数据结构,如字典中的词
/usr/bin 类似/bin 但是不参与启动,大部分命令都在这里
/usr/local 本地管理员安装的应用程序
/usr/local/bin 用户安装的应用程序(部分)
3 /proc 目录的内容
/proc/cpuinfo 处理器的信息
/proc/devices 当前运行内核的所有设备清单
/proc/dma 当前正在使用中的 DMA 通道
/proc/filesystem 当前运行内核所配置的文件系统
/proc/interrupts 当前使用的中断和曾经有多少个中断
/proc/ioports 正在使用的 I/O 端口
57、给出正确的关机和重启服务器的命令
(1)shutdown
[-t] 指定在多长时间之后关闭系统
[-r] 重启系统
[-k] 并不真正关机,只是给每个登录用户发送警告信号
[-h] 关闭系统(halt)
(2)halt
halt 是最简单的关机命令,其实际上是调用 shutdown -h 命令。 halt 执行时,杀死应用进程,
文件系统写操作完成后就会停止内核。
halt 命令的部分参数如下:
[-f] 没有调用 shutdown 而强制关机或重启
[-i] 关机或重新启动之前,关掉所有的网络接口
[-p] 关机时调用 poweroff,此选项为缺省选项(3)reboot
reboot 工作过程与 halt 类似,作用是重新启动,而 halt 是关机。其参数与 halt 类似。
(4)init
init 是所有进程的祖先,其进程号始终为 1。init 用于切换系统的运行级别,切换的工作是立
即完成的。init 0 命令用于立即将系统运行级别切换为 0,即关机;init 6 命令用于将系统运
行级别切换为 6,即重新启动。
58、请简述修改/etc/sudoers 配置文件的注意事项
1别名的名称可以包含大写字母。数字、下划线。如果是字母必须要大写,
(别名为一群拥
有相同属性的集合)
。
2一个别名下面可以有多个成员,成员间通过半角(,)逗号隔开。成员必须有效实际存在。
别名成员受别名类型 Host_Alias、User_Alias、Runas_Alias、Cmnd_Alias 制约,定义什么类型
的别名,就要有相什么类型的成员匹配。
3用户组前面必须加%号。命令别名下的成员必须是文件或目录的绝对路径。
4指定切换用户要用()括号括起来,如果省略,则默认 root 用户,如果括号里是 ALL,则
代表能切换到所有用户。
5命令路径要使用全路径。
6别名规则每行算一个规则,一行容不下时用\续行。另外超过一行,用反斜线换行。
7一般不建议先给 all 权限,后面排除。用什么权限,就给什么权限。
(注意权限,语法)
。
如果不需要密码直接运行命令的应该加 NOPASSWD 参数。
8禁止某类程序或命令执行,要在命令动作前面加上“!”号,并放在允许执行命令之后。
59、请描述如何实现 linux 系统集权分治的权限分级精细管理?
1 收集以及制定用户和权限的匹配信息,原则是给于最小权限,但是又能完成所承担的工
作职责。
2 各个用户组设置对应权限,用什么给什么,精细到每一条指令上根据分组情况。
3 创建规划权限分组的用户.添加相关用户组。并修改 etc/sudoers 配置文件。
4 增加 sudo 的权限开放,确定相关用户加入如 soduers 权限列表,并详细设置所开放权限
内容,并选择是否需要密码的相关执行权限开放。
(注意 ALL 权限,以及密码修改权限设置)
。
5 不建议先给 all 权限,后面排除。建议使用白名单。
6实战调试测试相关权限是否正确配置完成。
7编写操作说明,及相关注意事项。
8调试完毕,邮件周知所有相关人员系统权限设置生效,并附带操作说明及相关注意事项。
60、请写出下面 Linux SecureCRT 命令行快捷键命令的功能?
Ctrl + a 光标到开头
Ctrl + c 中断当前程序
Ctrl + d 退出当前窗口或当前用户
Ctrl + e 光标到结尾
Ctrl + l 清屏 相当与 clear
Ctrl + u 剪切、删除(光标以前的)内容
Ctrl + k 剪切、删除(光标以后的)内容
Ctrl + r 查找(最近用过的命令)
tab 所有路径以及补全命令Ctrl+shift+c 命令行复制内容
Ctrl+shift+v 命令行粘贴内容
Ctrl + q 取消屏幕锁定
Ctrl + s 执行屏幕锁定
61、请描述服务器账户日志审计的 5 种解决方案。
(1)通过环境变量 syslog 对全部全部日志进行审计(信息量太大,不推荐)
(2)sudo 配合 syslog 服务,进行 sudo 操作日志进行审计(信息较少,效果不错)
(3)在 bash 解释器嵌入一个监视器,让所有用户使用修改过的 bash 程序,作为解释程序。
(4)齐治的堡垒机(商业产品)
。
62、如果一台办公室内主机无法上网(打不开网站)
,请给出你的排查步骤?
1首先确定物理链路是否联通正常。
2查看本机 IP,路由,DNS 的设置情况是否达标。
3telnet 检查服务器的 WEB 有没有开启以及防火墙是否阻拦。
4ping 一下网关,进行最基础的检查,通了,表示能够到达服务器。
5测试到网关或路由器的通常情况,先测网关,然后再测路由器一级一级的测试。
6测试 ping 公网 ip 的通常情况(记住几个外部 IP)
,
7测试 DNS 的通畅。ping 出对应 IP。
8通过以上检查后,还在网管的路由器上进行检查。
63、描述 Linux shell 中单引号、双引号及不加引号的简单区别
单引号:所见即所得,即将单引号内的内容原样输出,或者描述为单引号里面看到的是什么
就输出什么。
双引号:把双引号里面的内容给输出出来,如果内容中有命令、变量等,会先把,变来那个、
命令解析出结果,然后输出最终内容。
双引号内的命令或者变量写法’命令或变量’或$(命令或变量)
无引号:把内容输出出来,可能不会键含有空格的字符串,视为一个整体输出,如果内容中
有命令、变量等,会先把变量、命令解析出来,然后输出最终内容,如果字符串中带有空格
等特殊字符,则不能完整输出,需要改加双引号。一般连续的字符串,数字,路径等可以用,
不过最好用双引号,替代之 64、请简述 Linux 启动过程中几个重要配置文件的执行过程
Linux 登录后,配置执行顺序为(Debian Serials Capable):
/etc/environment -> /etc/profile -> (~/.bash_profile | ~/.bash_login | ~/.profile) -> ~/.bashrc -> /e
tc/bashrc -> ~/.bash_logout
关于各个文件的作用说明:
(1)/etc/environment:此配置文件设置基本的 PATH 变量,及系统当前语言变量,虽然比
较短,但却在系统启动中占据举足轻重的作用,比如如下是我的系统中的内容:
(2)/etc/profile: 此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执
行. 并从/etc/profile.d 目录的配置文件中搜集 shell 的设置。
(3)/etc/bash.bashrc: 为每一个运行 bash shell 的用户执行此文件.当 bash shell 被打开时,该
文件被读取。
(4) ~/.bash_profile: 每个用户都可使用该文件输入专用于自己使用的 shell 信息,当用户登录
时,该文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc 文件。(5)~/.bashrc: 该文件包含专用于你的 bash shell 的 bash 信息,当登录时以及每次打开新的
shell 时,该该文件被读取。
(6) ~/.bash_logout: 当每次退出系统(退出 bash shell)时,执行该文件. 另外,/etc/profile 中设定
的变量(全局)的可以作用于任何用户,而~/.bashrc 等中设定的变量(局部)只能继承 /etc/profile
中的变量,他们是”父子”关系。
(7)~/.bash_profile 是交互式、login 方式进入 bash 运行的~/.bashrc 是交互式 non-login 方式
进入 bash 运行的通常二者设置大致相同,所以通常前者会调用后者。
65、请描述下列路径的内容是做什么的?
/var/log/messages 系统日志文件
/var/log/secure 系统安全文件(显示登录信息的文件)
/var/spool/clientmqueue 例行性任务回执邮件存放文件
/proc/interrupts 当前系统中断报告文件
/etc/fstab
开机自动挂载磁盘的配置文件
/etc/profile
环境变量存放的文件
66、请给出 Linux 中 eth0 的 IP 地址和广播地址的指令,需使用 cut、awk、grep、sed 指令。
第一种方法:使用 grep 和 cut 取值
第二种方法:使用 grep 和 awk(默认分隔符为空格)取值
第三种方法:使用 grep 和 awk(多分隔符)
第四种方法:使用 sed 和 awk
第五种方法:使用 grep 和 awk(多分隔符与加号+)
第六种方法:awk (分隔符及取行)
第七种方法:grep 网卡文件
第八种方法:head 取行 awk 分割
67、请输出你知道的 20 个 LINUX 命令及作用
cp 复制 -a(drp),
-r 拷贝目录
-p 保持属性
mv 移动文件或目录
mkdir 创建目录
-p 递归创建目录 mkdir /a/b/c
touch 创建文件,
cd 切换目录(~当前用户家目录,-上一次的目录)
cat 查看文件内容
-n 显示行号
ls 查看目录下文件,
-l 长格式
-d 查看目录
rm 删除文件或目录
-r 目录 -f 强制删除(慎用,mv,find)
find 查找文件或目录 -type 类型(f,d,l,c,b),-name 名字 -exec 执行动作*****
alias 查看及设置别名unalias 取消别名
seq 打印序列 -s 指定分割符 -w 数字前面加 0 补齐位数
head 查看文件前 N 行,默认 10 行,-n 指定行数
tail 查看文件后 N 行,默认 10 行,-n 指定行数,-f 实时跟踪文件结尾的变化
sed linux 三剑客老二,文件增删改查,*****
pwd 打印当前工作目录
rmdir 删除空目录
echo 显示输出
xargs (配合 find,ls)等查找到的内容处理,-n 分组
tree -L 层数 -d 目录
rpm -q query 查询 -a all
uname -r 内核 -m32 位还是 64 位 -a 所有信息, -n 主机名(hostname)
hostname 主机名
whoami 查看当前用户
useradd 添加用户
passwd 改密码,–stdin 非交互设置密码
su 切换用户角色,-切换环境变量
68、写一个脚本查找最后创建时间是 3 天前,后缀是*.log 的文件并删除。
find / -name “.log” -ctime +3 -exec rm -f {} ;
69、写一个脚本将某目录下大于 100k 的文件移动至/tmp 下。
for i infind /test -type f -size +100k
;do cd /test && mv $i /tmp;done
70、写一个脚本将数据库备份并打包至远程服务器 192.168.1.1 /backup 目录下。
mount 192.168.1.1:/backup /mnt
cd /mnt
/usr/local/mysql/bin/mysqldump -hlocalhost -uroot test >test.sql
tar czf test.sql.tar.gz test.sql
rm -f test.sql
71、写一个防火墙配置脚本,只允许远程主机访问本机的 80 端口。
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -F
iptables -X
iptables -A INPUT -i eth0 -p tcp –dport 80 -j ACCEPT
iptables -P INPUT DROP
72、写一个脚本进行 nginx 日志统计,得到访问 ip 最多的前 10 个(nginx 日志路径:
/home/logs/nginx/default/access.log
awk ‘{a[KaTeX parse error: Expected 'EOF', got '}' at position 5: 1]++}̲END{for (j in a…LOGNAME@hostname:$PWD:” 这条命令是在做什么?
答: 这条 export 命令会更改登录提示符来显示用户名、本机名和当前工作目录。
97、ll | awk ‘{print $3,”owns”,$9}’ 这条命令是在做什么?
答: 这条 ll 命令会显示这些文件的文件名和它们的拥有者。
98、Linux 中的 at 命令有什么用?
答: at 命令用来安排一个程序在未来的做一次一次性执行。
所有提交的任务都被放在 /var/spool/at 目录下并且到了执行时间的时候通过 atd 守护进程
来执行。
99、linux 中 lspci 命令的作用是什么?
答: lspci 命令用来显示你的系统上 PCI 总线和附加设备的信息。
指定-v,-vv 或-vvv 来获取越来越详细的输出,加上-r 参数的话,命令的输出则会更具有易读
性。
100、什么是运维?什么是游戏运维?
1)运维是指大型组织已经建立好的网络软硬件的维护,就是要保证业务的上线与运作的正
常,
在他运转的过程中,对他进行维护,他集合了网络、系统、数据库、开发、安全、监控于一
身的技术
运维又包括很多种,有 DBA 运维、网站运维、虚拟化运维、监控运维、游戏运维等等
2)游戏运维又有分工,分为开发运维、应用运维(业务运维)和系统运维
开发运维:是给应用运维开发运维工具和运维平台的
应用运维:是给业务上线、维护和做故障排除的,用开发运维开发出来的工具给业务上线、
维护、做故障排查
系统运维:是给应用运维提供业务上的基础设施,比如:系统、网络、监控、硬件等等
总结:开发运维和系统运维给应用运维提供了“工具”和“基础设施”上的支撑
开发运维、应用运维和系统运维他们的工作是环环相扣的
101、在工作中,运维人员经常需要跟运营人员打交道,请问运营人员是做什么工作的?
游戏运营要做的一个事情除了协调工作以外还需要与各平台沟通,做好开服的时间、开服数、用户导量、活动等计划
102、现在给你三百台服务器,你怎么对他们进行管理?
管理 3 百台服务器的方式:
1)设定跳板机,使用统一账号登录,便于安全与登录的考量。
2)使用 salt、ansiable、puppet 进行系统的统一调度与配置的统一管理。
3)建立简单的服务器的系统、配置、应用的 cmdb 信息管理。便于查阅每台服务器上的各
种信息记录。
103、简述 raid0 raid1 raid5 三种工作模式的工作原理及特点
RAID,可以把硬盘整合成一个大磁盘,还可以在大磁盘上再分区,放数据
还有一个大功能,多块盘放在一起可以有冗余(备份)
RAID 整合方式有很多,常用的:0 1 5 10
RAID 0,可以是一块盘和 N 个盘组合
其优点读写快,是 RAID 中最好的
缺点:没有冗余,一块坏了数据就全没有了
RAID 1,只能 2 块盘,盘的大小可以不一样,以小的为准
10G+10G 只有 10G,另一个做备份。它有 100%的冗余,缺点:浪费资源,成本高
RAID 5 ,3 块盘,容量计算 10(n-1),损失一块盘
特点,读写性能一般,读还好一点,写不好
冗余从好到坏:RAID1 RAID10 RAID 5 RAID0
性能从好到坏:RAID0 RAID10 RAID5 RAID1
成本从低到高:RAID0 RAID5 RAID1 RAID10
单台服务器:很重要盘不多,系统盘,RAID1
数据库服务器:主库:RAID10 从库 RAID5RAID0(为了维护成本,RAID10)
WEB 服务器,如果没有太多的数据的话,RAID5,RAID0(单盘)
有多台,监控、应用服务器,RAID0 RAID5
我们会根据数据的存储和访问的需求,去匹配对应的 RAID 级别
104、LVS、Nginx、HAproxy 有什么区别?工作中你怎么选择?
LVS: 是基于四层的转发
HAproxy: 是基于四层和七层的转发,是专业的代理服务器
Nginx: 是 WEB 服务器,缓存服务器,又是反向代理服务器,可以做七层的转发
区别: LVS 由于是基于四层的转发所以只能做端口的转发
而基于 URL 的、基于目录的这种转发 LVS 就做不了
工作选择:
HAproxy 和 Nginx 由于可以做七层的转发,所以 URL 和目录的转发都可以做
在很大并发量的时候我们就要选择 LVS,像中小型公司的话并发量没那么大
选择 HAproxy 或者 Nginx 足已,由于 HAproxy 由是专业的代理服务器
配置简单,所以中小型企业推荐使用 HAproxy
105、Squid、Varinsh 和 Nginx 有什么区别,工作中你怎么选择?
Squid、Varinsh 和 Nginx 都是代理服务器
什么是代理服务器:能当替用户去访问公网,并且能把访问到的数据缓存到服务器本地,等用户下次再访问相同
的资源的时候,代理服务器直接从本地回应给用户,当本地没有的时候,我代替你去访问公
网,我接收你的请求,我先在我自已的本地缓存找,如果我本地缓存有,我直接从我本地的
缓存里回复你,如果我在我本地没有找到你要访问的缓存的数据,那么代理服务器就会代替
你去访问公网
区别:
1)Nginx 本来是反向代理/web 服务器,用了插件可以做做这个副业
但是本身不支持特性挺多,只能缓存静态文件
2)从这些功能上。varnish 和 squid 是专业的 cache 服务,而 nginx 这些是第三方模块完成
mysql -uroot -ppassowrd -e “use mysql;update user set passowrd =
PASSWORD(‘newpassword’) where user = ‘root’;flush privileges;”(2)MySQL 运维基础知识面试问答题
面试题 001:请解释关系型数据库概念及主要特点?
关系型数据库模型是把复杂的数据结构归结为简单的二元关系,对数据的操作都是建立
一个或多个关系表格上,最大的特点就是二维的表格,通过 SQL 结构查询语句存取数
据,保持数据一致性方面很强大
面试题 002:请说出关系型数据库的典型产品、特点及应用场景?
1、mysql 互联网企业常用
2、oracle 大型传统企业应用软件
3、 如数据备份、复杂连接查询、一致性数据存储等,还是使用 MySQL 或者其他传统
的关系型数据库最合适
面试题 003:请解释非关系型数据库概念及主要特点?
非关系型数据库也被称为 NoSQL 数据库,数据存储不需有特有固定的表结构
特点:高性能、高并发、简单易安装
面试题 004:请说出非关系型数据库的典型产品、特点及应用场景?
1、memcaced 纯内存
2、redis 持久化缓存
3、mongodb 面向文档
如果需要短时间响应的查询操作,没有良好模式定义的数据存储,或者模式更改频繁的
数据存储还是用 NoSQL
面试题 005:请详细描述 SQL 语句分类及对应代表性关键字。
sql 语句分类如下
DDL 数据定义语言,用来定义数据库对象:库、表、列
代表性关键字:create alter drop
DML 数据操作语言,用来定义数据库记录
代表性关键字:insert delete update
DCL 数据控制语言,用来定义访问权限和安全级别
代表性关键字:grant deny revoke
DQL 数据查询语言,用来查询记录数据
代表性关键字:select
面试题 006:请详细描述 char(4)和 varchar(4)的差别
char 长度是固定不可变的,varchar 长度是可变的(在设定内)比如同样写入 cn 字符,
char 类型对应的长度是 4(cn+两个空格),但 varchar 类型对应长度是 2
面试题 007:如何创建一个 utf8 字符集的数据库 mingongge?
create database mingongge default character utf8 collate
utf8_general_ci;面试题 008:如何授权 mingongge 用户从 172.16.1.0/24 访问数据库。
grant all on . to mingongge@‘172.16.1.0/24’ identified by ‘123456’;
面试题 009:什么是 MySQL 多实例,如何配置 MySQL 多实例?
mysql 多实例就是在同一台服务器上启用多个 mysql 服务,它们监听不同的端口,运行
多个服务进程,它们相互独立,互不影响的对外提供服务,便于节约服务器资源与后期
架构扩展
多实例的配置方法有两种:
1、一个实例一个配置文件,不同端口
2、同一配置文件(my.cnf)下配置不同实例,基于 mysqld_multi 工具
面试题 010:如何加强 MySQL 安全,请给出可行的具体措施?
1、删除数据库不使用的默认用户
2、配置相应的权限(包括远程连接)
3、不可在命令行界面下输入数据库的密码
4、定期修改密码与加强密码的复杂度
面试题 011:MySQL root 密码忘了如何找回?
参考前面的回答
面试题 012:delete 和 truncate 删除数据的区别?
前者删除数据可以恢复,它是逐条删除速度慢
后者是物理删除,不可恢复,它是整体删除速度快
面试题 013:MySQL Sleep 线程过多如何解决?
1、可以杀掉 sleep 进程,kill PID
2、修改配置,重启服务
[mysqld]
wait_timeout = 600
interactive_timeout=30
#如果生产服务器不可随便重启可以使用下面的方法解决
set global wait_timeout=600
set global interactive_timeout=30;
面试题 014:sort_buffer_size 参数作用?如何在线修改生效?
在每个 connection(session)第一次连接时需要使用到,来提访问性能
set global sort_buffer_size = 2M面试题 015:如何在线正确清理 MySQL binlog?
MySQL 中的 binlog 日志记录了数据中的数据变动,便于对数据的基于时间点和基于位
置的恢复
但日志文件的大小会越来越大,点用大量的磁盘空间,因此需要定时清理一部分日志信
息
手工删除:
首先查看主从库正在使用的 binlog 文件名称
show master(slave) status\G
删除之前一定要备份
purge master logs before’2017-09-01 00:00:00’;
#删除指定时间前的日志
purge master logs to’mysql-bin.000001’;
#删除指定的日志文件
自动删除:
通过设置 binlog 的过期时间让系统自动删除日志
show variables like ‘expire_logs_days’;
et global expire_logs_days = 30;
#查看过期时间与设置过期时间
面试题 016:Binlog 工作模式有哪些?各什么特点,企业如何选择?
1.Row(行模式);
日志中会记录成每一行数据被修改的形式,然后在 slave 端再对相同的数据进行修改
2.Statement(语句模式)
每一条修改的数据都会完整的记录到主库 master 的 binlog 里面,在 slave 上完整执行
在 master 执行的 sql 语句
3.mixed(混合模式)
结合前面的两种模式,如果在工作中有使用函数 或者触发器等特殊功能需求的时候,
使用混合模式
数据量达到比较高时候,它就会选择 statement 模式,而不会选择 Row Level 行模式
面试题 017:误操作执行了一个 drop 库 SQL 语句,如何完整恢复?
1、停止主从复制,在主库上执行锁表并刷新 binlog 操作,接着恢复之前的全备文件(比
如 0 点的全备)
2、将 0 点时的 binlog 文件与全备到故障期间的 binlog 文件合并导出成 sql 语句
mysqlbinlog --no-defaults mysql-bin.000011 mysql-bin.000012 >bin.sql
3、将导出的 sql 语句中 drop 语句删除,恢复到数据库中
mysql -uroot -pmysql123 < bin.sql
面试题 018:mysqldump 备份使用了-A -B 参数,如何实现恢复单表?
-A 此参数作用是备份所有数据库(相当于–all-databases)
-B databasename 备份指定数据(单库备份使用)面试题 019:详述 MySQL 主从复制原理及配置主从的完整
主从复制的原理如下:
主库开启 binlog 功能并授权从库连接主库,从库通过 change master 得到主库的相关
同步信息,然后连接主库进行验证,主库 IO 线程根据从库 slave 线程的请求,从
master.info 开始记录的位置点向下开始取信息,同时把取到的位置点和最新的位置与
binlog 信息一同发给从库 IO 线程,从库将相关的 sql 语句存放在 relay-log 里面,最终
从库的 sql 线程将 relay-log 里的 sql 语句应用到从库上,至此整个同步过程完成,之后
将是无限重复上述过程
完整步骤如下:
1、主库开启 binlog 功能,并进行全备,将全备文件推送到从库服务器上
2、show master status\G 记录下当前的位置信息及二进制文件名
3、登陆从库恢复全备文件
4、执行 change master to 语句
5、执行 start slave and show slave status\G
面试题 020:如何开启从库的 binlog 功能?
修改配置文件加上下面的配置
log_bin=slave-bin
log_bin_index=slave-bin.index
需要重启服务生效
面试题 021:MySQL 如何实现双向互为主从复制,并说明应用场景?
双向同步主要应用于解决单一主库写的压力,具体配置如下
主库配置
[mysqld]
auto_increment_increment = 2 # 起始 ID
auto_increment_offset
= 1 #ID 自增间隔
log-slave-updates
从库配置
[mysqld]
auto_increment_increment = 2 # 起始 ID
auto_increment_offset
= 2 #ID 自增间隔
log-slave-updates
主从库服务器都需要重启 mysql 服务面试题 022:MySQL 如何实现级联同步,并说明应用场景?
级联同步主要应用在从库需要做为其它数据库的主库
在需要做级联同步的数据库配置文件增加下面的配置即可
log_bin=slave-bin
log_bin_index=slave-bin.index
面试题 023:MySQL 主从复制故障如何解决?
登陆从库
1、执行 stop slave;停止主从同步
2、然后 set global sql_slave_skip_counter = 1;跳过一步错误
3、最后执行 start slave;并查看主从同步状态
需要重新进行主从同步操作步骤如下
进入主库
1、进行全备数据库并刷新 binlog,查看主库此的状态
2、恢复全备文件到从库,然后执行 change master
3、开启主从同步 start slave;并查看主从同步状态
面试题 024:如何监控主从复制是否故障?
mysql -uroot -ppassowrd -e “show slave status\G” |grep -E
“Slave_IO_Running|Slave_SQL_Running”|awk '{print KaTeX parse error: Expected 'EOF', got '}' at position 2: 2}̲'|grep -c Yes 通…user -p
p
a
s
s
w
d
"
d
u
m
p
=
"
m
y
s
q
l
d
u
m
p
−
u
passwd "dump="mysqldump -u
passwd"dump="mysqldump−uuser -p
p
a
s
s
w
d
"
f
o
r
d
a
t
a
b
a
s
e
i
n
‘
passwd" for database in `
passwd"fordatabasein‘cmd -e “show databases;”|sed ‘1,2d’|egrep -v
"mysql|performance_schema"do for tables in
dump -e “show tables from $databses;”|sed ‘1d’`
do
$cmd “alter table
d
a
t
a
b
a
s
e
.
database.
database.tables engine = MyISAm;”
done
done
面试题 041:如何批量更改数据库字符集?
通过 mysqldump 命令备份出一个 sql 文件,再使用 sed 命令替换 sed -i ‘s/GBK/UTF8/g’
面试题 042:网站打开慢,请给出排查方法,如是数据库慢导致,如何排查并解决,请分
析并举例?
1、可以使用 top free 等命令分析系统性能等方面的问题
2、如是因为数据库的原因造成的,就需要查看慢查询日志去查找并分析问题所在
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。