MySQL DBA 面试题目 答疑记 《01》
来源:互联网 发布:transmac制作mac安装盘 编辑:程序博客网 时间:2024/06/11 16:54
MySQL DBA 面试题解惑
一个朋友发了帖子,询问一些mysql dba面试题,回答的人比较少,他把地址给了我,只是我没有那个网站的账号,所以就整理下发在我的blog里面,大家可以参考下,也欢迎提出更加合理更加高效的处理方案。
1、对于一台DB服务器,有哪些是必须监控的基础指标,如何得到这些值?
必须监控的有:cpu负载、内存使用率、磁盘大小、io读写、网络流量、db端口流量、数据库客户端连接数等
如何得到这些值:可以通过第三方工具比如cacti、zabbix等;
Cacti监控mysql参考:http://blog.csdn.net/mchdba/article/details/27404109
zabbix监控mysql参考:http://blog.csdn.net/mchdba/article/details/51447750
2、简单介绍一个你用过的MYSQL状态探测或监控工具,第三方的或自己写的都可以,说出你觉得最好用的地方
自己使用过的有nagios、cacti以及zabbix;一般nagios和cacti搭配使用;zabbix可以单独使用。
(1) Nagios的优势在于报警内容丰富第三方控件成熟,cacti的图画效果比较清晰逼真;
(2) Zabbix的优势在于分布式部署,快速搭建,但是监控图比较粗糙,很多模板都需要自己实现,而且版本之间改动太大模板不能兼容。
Zabbix心得参考我的blog:http://blog.csdn.net/mchdba/article/category/2220809
Nagios心得参考:http://blog.csdn.net/mchdba/article/category/2247105
Cacti心得参考:http://blog.csdn.net/mchdba/article/category/2292853
3、简单介绍一个你用过的MySQL日志(slow/general/binary log)分析工具,第三方的或自己写的都可以,说出你觉得最好用的地方
Generl、binary log只是偶尔作为验证使用,很少经常哪来分析的,毕竟消耗性能太大了,倒是slow log经常作为分析的依据。
分析下自己做的比较简单的处理slow log的脚本:
# check_slow.sh 分析slow log脚本,按照执行数和执行时间来排序
[root@hch_test_121_61 ~]# vim /home/data/mysql/script/check_slow.sh
datestr=`date -d "1 day ago" +"%Y-%m-%d"`
mysql_command=/usr/local/mysql/bin/mysql
mysqlslow_command=/usr/local/mysql/bin/mysqldumpslow
# su - mysql
cd /home/data/mysql/slowlog/
mkdir $datestr
cd $datestr
$mysql_command -uroot --password='' -e 'set global slow_query_log=0;';
$mysql_command -uroot --password='' -e 'SHOW VARIABLES LIKE "slow_query_log";';
cp /home/data/mysql/data/db-master-1-slow.log .
> /home/data/mysql/data/db-master-1-slow.log
# > /data/mysql/data/localhost-slow.log
$mysql_command -uroot --password='' -e 'set global slow_query_log=1;';
$mysql_command -uroot --password='' -e 'SHOW VARIABLES LIKE "slow_query_log";';
$mysqlslow_command -s c -t 50 db-master-1-slow.log > business_db_count_$datestr.log
$mysqlslow_command -s at -t 50 db-master-1-slow.log > business_db_time_$datestr.log
# crontab 任务调度,一天执行一次
00 00 * * * /home/data/mysql/script/check_slow.sh >> /tmp/check_slow.log 2>&1
4、介绍一件遇到过的DB服务器故障
以前遇到的也比较多,有些记录下来了,有些没有来得及记录,谈不上印象最深刻的,因为解决完了后,随着时间推移的,慢慢都淡忘了,如果那件让你刻骨铭心的话,那估计是你惹上了大篓子了,让你承受超过一般的代价。
不过幸好,我比较谨慎、比较认真,暂时还没有出过比较大的篓子,属于小问题处理了很多,但是大篓子基本没有,但是小问题积小成多,也会厚积薄发的,我把以前的一些故障记录在了:http://blog.csdn.net/mchdba/article/category/1596355,欢迎参考,所谓三人行必有我师焉,大家一起交流一起进步。
5、如果出现Too many connections,应该采取哪些措施?
这种遇到过,高并发的时候,很多慢sql导致的。
(1)记得当时的处理办法是,先在线加大connections连接数,如下所示:
mysql> set global max_connections=20000;
Query OK, 0 rows affected (0.10 sec)
mysql>
(2)然后看哪些无效的连接数,直接kill掉;
分析下曾经写过的一个kill无效连接的脚本,大家可以参考下:
#It is used to kill processlist of mysql sleep
#!/bin/sh
while :
do
n=`mysqladmin processlist -uadmin -pxxxxx|grep -i sleep |wc -l`
date=`date +%Y%m%d\[%H:%M:%S]`
echo $n
if [ "$n" -gt 10 ]
then
for i in `mysqladmin processlist -uadmin -pxxxxxx|grep -i sleep |awk '{print $2}'`
do
mysqladmin -uadmin -pxxxx kill $i
done
echo "sleep is too many I killed it " >> /tmp/sleep.log
echo "$date : $n" >> /tmp/sleep.log
fi
sleep 1
done
(3) 然后查找产生这么多无效sql的真实原因,可能有如下几种情况:
(a) 是人为误删除索引,则补上索引。
(b) 是高并发sql导致,则看下优化sql添加索引,如果还不能减少连接数,则看哪个应用导致的高并发sql,暂时停止这个应用。
(c) 如果连接来源是不认识的非应用服务器的ip发起的,那么直接在网络层做下数据端口访问限制。
(d) 如果是某个比较慢的临时select语句消耗了临时内存资源,则kill掉这个临时select语句。
PS:产生的原因可能有多种多样,可以因地制宜,稳妥处理掉。遇到的时候不要慌 千万要镇静心平气和的逐个排查逐个处理。
- MySQL DBA 面试题目 答疑记 《01》
- MySQL DBA 面试题目小结
- MySQL DBA的基础面试题目
- MySQL DBA的基础面试题目
- MySQL DBA的基础面试题目
- 阿里巴巴 DBA 面试题目
- 阿里巴巴 的DBA 面试题目
- 题目答疑
- MySQL DBA面试全揭秘
- 面试答疑
- MySQL 面试题目
- MySQL 面试题目
- MySQL面试题目
- MySQL面试题目
- 公司招聘MySQL DBA面试心得
- [置顶]MySQL DBA面试全揭秘
- 一些基础的Oracle DBA笔试题和面试题目
- 一道Oracle面试年薪70W的DBA题目
- 使用Category标签隐藏Jekyll博客文章
- Linux 终端生存指南
- debian8.5下Cinnamon桌面Bug#2解决方法
- LeetCode | Search a 2D Matrix
- iOS UI: UIMenuController | InputView 折腾记
- MySQL DBA 面试题目 答疑记 《01》
- Java中接口与实例化【引用】
- 【杭电oj2012】素数判定
- HDU 5811 (拓扑排序 LIS)
- “懒惰”Linux 管理员的 10 个关键技巧
- 【杭电oj2013】蟠桃记
- Lua入门教程
- 网格计算
- 博弈论专题——推理与动态规划相关博弈之POJ2068 POJ3688动态规划)