推荐一首歌
发现自己每天就听这么几首歌
一:慢查询日志
- SQL 完成查询并完成对于锁资源的释放之后,msqld 会将符合条件的SQL写入慢日志。因此慢日志可能和执行顺序不一样。
- 主要参数
- slow_query_log 是否输出慢查询日志 ON为开启 / OFF为关闭
- slow_query_log_file 指定日志文件路径和文件名
- log_query_time 设定慢查询日志时间阙值,单位/s,默认为10s。
- log_queries_not_using_indexes 是否将未使用索引的SQL输出到日志
- 配置 慢查询
设置开启慢查询
mysql> set global slow_query_log='ON';
Query OK, rows affected (0.00 sec) 设置超时时间
mysql> set global long_query_time=;
Query OK, rows affected (0.00 sec) 设置查找未使用索引
mysql> set global log_queries_not_using_indexes='ON';
Query OK, rows affected (0.00 sec)
- 注意,在开启慢日志查询之后,可能会产生大量的慢查询日志需要处理,及时的注意日志文件大小和其他方面也是很重要的。
二:普通查询日志(输出所有SQL)
- general_log 是否输出日志
- general_log_file 定义日志的存储路径
三:在 MySQL 中,有哪些二进制?
- 两个比较重要的概念
- 二进制日志( Binary Log ) 记录数据库的修改事件
- 二进制日志文件( Binary Log File ) 保存数据库中修改事件的文件
四:二进制日志的作用是什么呢?
- 二进制日志的两个重要作用
- 主从复制 Mastr/slave
- 故障恢复
五:如何开启二进制日志?
- log_bin 是否开启二进制日志功能(默认的话是不启用的)
- 在开启时,主要注意,需要配置 server-id 同时 关闭 bind-address 的默认端口绑定
- max_binlog_size 来指定日志文件大小(当达到指定大小时,会生成新的日志文件)
- 对于非事务来说,语句执行之后会立即写入二进制日志中
- 对于事务来说,在收到更新操作后(CURD),会被缓存起来,直到收到 COMMIT ,才会将整个事务写入二进制文件中。
- 在处理事务时,会通过 binlog_cache_size 指定内存
- max_binlog_cache_size 来指定事务可以使用的最大缓存区,如果大于这个,事务会报错并回滚(最小为4096)
六:二进制日志是时时同步的么?
- 同 Redis 的 RDB 一样,二进制日志并不是时时同步到磁盘的
- sync_binlog (1s安全级别最高,同时也是最慢的设置)
- 在设置为1(秒)的情况下,也可能出现数据丢失的情况。
- 例如在 Innodb 下,操作已经写入二进制日志,但是还未写入提交,此时数据库崩溃,当数据库重启时,必然造成数据的回滚造成丢失。
- 为了解决这种问题,提供了 innodb_support_xa 设置该参数,启动分布式的事务支持,确保二进制日志和 Innodb 的数据文件同步