MySQL学习笔记(Day005:slow_log/generic_log/audit/存储引擎一)
一. 慢查询日志进阶
1. 相关参数:
slow_query_log
- 是否开启慢查询日志
slow_query_log_file
- 慢查询日志文件名, 在
my.cnf
我们已经定义为slow.log,默认是 机器名-slow.log
- 慢查询日志文件名, 在
long_query_time
- 制定慢查询阈值, 单位是秒,且当版本
>=5.5.X
,支持毫秒。例如0.5
即为500ms
大于
该值,不包括值本身。例如该值为2,则执行时间正好等于
2的SQL语句不会记录
log_queries_not_using_indexes
- 将没有使用索引的SQL记录到慢查询日志
- 如果一开始因为数据少,查表快,耗时的SQL语句没被记录,当数据量大时,该SQL可能会执行很长时间
- 需要测试阶段就要发现问题,减小上线后出现问题的概率
- 将没有使用索引的SQL记录到慢查询日志
log_throttle_queries_not_using_indexes
- 限制每分钟内,在慢查询日志中,去记录没有使用索引的SQL语句的次数;版本需要
>=5.6.X
- 因为没有使用索引的SQL可能会短时间重复执行,为了避免日志快速增大,限制每分钟的记录次数
- 限制每分钟内,在慢查询日志中,去记录没有使用索引的SQL语句的次数;版本需要
min_examined_row_limit
- 扫描记录少于改值的SQL不记录到慢查询日志
- 结合去记录没有使用索引的SQL语句的例子,有可能存在某一个表,数据量维持在百行左右,且没有建立索引。这种表即使不建立索引,查询也很快,扫描记录很小,如果确定有这种表,则可以通过此参数设置,将这个SQL不记录到慢查询日志。
- 扫描记录少于改值的SQL不记录到慢查询日志
log_slow_admin_statements
- 记录超时的管理操作SQL到慢查询日志,比如ALTER/ANALYZE TABLE
log_output
- 慢查询日志的格式,[FILE | TABLE | NONE],默认是FILE;版本
>=5.5
- 如果设置为TABLE,则记录的到
mysql.slow_log
- 慢查询日志的格式,[FILE | TABLE | NONE],默认是FILE;版本
log_slow_slave_statements
- 在从服务器上开启慢查询日志
log_timestamps
- 写入时区信息。可根据需求记录UTC时间或者服务器本地系统时间
2. 慢查询日志实践
- 设置慢查询记录的相关参数
1 | -- |
- 查看慢查询日志
1 | # |
- 进行模拟耗时操作
1 | -- |
- 最终产生慢查询日志
1 | # |
注意
如果在终端A中set global min_examined_row_limit = 100;
, 然后执行select sleep(5);
,会发现该记录仍然被记录到慢查询日志中。原因是因为set global min_examined_row_limit
设置的是全局变量,此次会话不生效。
但是我们上面
set global slow_query_log = 1;
却是在线生效的,这点有所不通
- mysqldumpslow
1 | [root@localhost mysql_data]# mysqldumpslow slow.log |
如果在线上操作,不需要
mysqldumpslow
去扫整个slow.log
, 可以去tail -n 10000 slow.log > last_10000_slow.log
(10000这个数字根据实际情况进行调整),然后进行mysqldumpslow last_10000_slow.log
- 慢查询日志存入表
1 | -- |
使用
TABLE
的优势在于方便查询,但是记住当在备份的时候,不要备份慢查询日志的表,避免备份过大。
使用FILE
也可以,需要定时清除该文件,避免单文件过大。
二. 通用日志(generic_log)与审计
####1. 通用日志作用
当需要查找某条特定SQL语句,且该SQL语句执行较快,无法记录到slow_log中时,可以开启通用日志
generic_log
,进行全面记录, 可用于审计Audit
通用日志会记录所有操作,性能下降明显。所以如果需要审计,需要
Audit Plugin
####2. 审计插件
MariaDB Audit 插件
- MySQL社区版本目前没有提供Audit的功能,企业版本提供了该功能。MariaDB 提供了开源的Audit插件,且MySQL也能使用。
插件下载
- server_audit-1.2.0.tar.gz 上述链接如果失效,可以进入官方页面注册,然后下载
- 官方注册下载插件
####3. Audit Plugin安装
MySQL5.7.9
审计插件安装失败,提示如下:
ERROR 1126 (HY000): Can't open shared library '/usr/lib64/mysql/plugin/server_audit.so' (errno: 13 /usr/lib64/mysql/plugin/server_audit.so: undefined symbol: _my_thread_var)
- MySQL5.6.27 审计插件安装成功,步骤如下:
1 | # 找到plugin位置 |
1 | -- |
1 | # |
以上仅为基本功能操作,详细的细粒度控制请参考官方文档
三. 存储引擎(一)
1.Mysql上支持的存储引擎
1 | mysql> show engines; |
2. 存储引擎的概念
用来处理数据库的相关CRUD操作
每个数据库都有存储引擎,只是MySQL比较强调存储引擎的概念。
3. MySQL存储引擎
- 官方存储引擎
- MyISAM
InnoDB
– 推荐;其他引擎已经体停止维护和开发- Memory
- Federated
- CSV
- Archive
- 第三方存储引擎
- TokuDB – 开源,适合插入密集型
- InfoBright – 商业,开源版本有数据量限制。属于列存储,面向OLAP场景
- Spider
第三方存储引擎在特定场合下比较适合,除此之外,都应该使用InnoDB
3. 存储引擎之MyISAM
- MySQL5.1版本之前的默认存储引擎
- 堆表数据结构
- 表锁设计
- 支持数据静态压缩
- 不支持事物
- 数据容易丢失
- 索引容易损坏
- 唯一优点
- 数据文件可以直接拷贝到另一台服务器使用
现在MySQL中还有用MyISAM的表,主要是历史原因。数据库文件以
MY
开头的基本都是MyISAM的表