一、mysql的日志类型
- 普通日志
- 慢查询日志
- 错误日志
- binlog日志
- 中继日志
1)普通日志
- general_log开启后会记录所有执行的sql,所以开启后很容易导致磁盘爆满,一般只是用于临时使用的时候开启,使用完后关闭。日志保存在general_log_file的路径下。
## 查看普通的日志是否开启,默认不开启,一般不开启
mysql> show variables like 'general_log%';
+------------------+--------------------------------+
| Variable_name | Value |
+------------------+--------------------------------+
| general_log | OFF |
| general_log_file | /data/mysql_data/k8s-node2.log |
+------------------+--------------------------------+
2 rows in set (0.00 sec)
2)慢查询日志
- SQL查询时间超过设置阈值时间,则记录为慢查询sql。主要用于优化,性能排查等。
## 查看慢查询的阈值
show global variables like 'long_query_time';
## 设置慢查询时间
set global long_query_time = 5;
## 查看是否开启慢查询
show variables like 'slow_query_log';
## 开启慢查询
set global slow_query_log=on;
## 查询慢日志输出格式
show variables like 'log_output';
## 查看慢查询的相关配置
show variables like '%slow%';
+---------------------------+-------------------------------------+
| Variable_name | Value |
+---------------------------+-------------------------------------+
| log_slow_admin_statements | OFF |
| log_slow_extra | OFF |
| log_slow_slave_statements | OFF |
| slow_launch_time | 2 |
| slow_query_log | ON |
| slow_query_log_file | /data/mysql_data/k8s-node2-slow.log |
+---------------------------+-------------------------------------+
6 rows in set (0.00 sec)
3)错误日志
- 记录执行过程的错误信息,告警信息
- 记录mysql启动,关闭过程信息
- 复制的一些IO信息
- 事件调度器运行事件产生的信息
PS: 错误日志如果不清理或删除,则会一直增长。5.5.7之前可以通过命令mysqladmin flush-logs命令删除,5.5.7版本之后可以通过mv备份进行删除。
## 查看错误日志存储位置
show variables like 'log_error';
+---------------+---------------------------+
| Variable_name | Value |
+---------------+---------------------------+
| log_error | /data/mysql_log/mysql.log |
+---------------+---------------------------+
1 row in set (0.00 sec)
## 查看log_warnings的配置
show variables like 'log_warnings';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_warnings | 2 |
+---------------+-------+
1 row in set (0.00 sec)
相关参数说明:
- log-error:定义错误日志的功能和错误日志的存储位置
- log-warnings:定义是否将警告信息记录在错误日志,在8.0版本之后该参数被移除
- 0:表示不记录警告信息
- 1:表示警告信息一并记录到错误日志中
- 大于1:表示"失败的连接"的信息和创建新连接时"拒接访问"类的错误信息也会被记录到错误日志中。
- log_error_verbosity:系统变量,从5.7.2版本开始,主要首选该参数,而不是log-warnings
- 1:错误信息
- 2:错误信息和告警信息
- 3:错误信息,告警信息和通知信息
4)binlog日志
- mysql binlog日志记录了对mysql数据库执行更改的所有操作,但是不包括select和show这类的操作。主要的作用是复制,恢复,审计。
## 查看binlog的最新位点
show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000007 | 155 | | | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
## 查看当前系统上所有的二进制日志文件
show binary logs;
## 查看binlog的相关配置
show variables like '%log_bin%';
+---------------------------------+---------------------------------+
| Variable_name | Value |
+---------------------------------+---------------------------------+
| log_bin | ON |
| log_bin_basename | /data/mysql_log/mysql-bin |
| log_bin_index | /data/mysql_log/mysql-bin.index |
| log_bin_trust_function_creators | OFF |
| log_bin_use_v1_row_events | OFF |
| sql_log_bin | ON |
+---------------------------------+---------------------------------+
6 rows in set (0.00 sec)
## 临时关闭当前会话的binlog
set session sql_log_bin = OFF;
## 查看binlog日志大小设置相关参数
show variables like 'max_binlog%';
+----------------------------+----------------------+
| Variable_name | Value |
+----------------------------+----------------------+
| max_binlog_cache_size | 18446744073709547520 |
| max_binlog_size | 1073741824 |
| max_binlog_stmt_cache_size | 18446744073709547520 |
+----------------------------+----------------------+
3 rows in set (0.00 sec)
相关参数说明:
- log_bin:是否开启二进制日志文件
- log_bin_basename:binlog存储位置
- log_bin_index:binlog日志下标方式
- sql_log_bin:会话级别,用于控制二进制日志信息是否记录进binlog里面
5)中继日志
relay log日志文件和binlog日志文件格式相同,主要用于从库的复制。slave先从master读取二进制日志数据,写入从库本地,后继续再异步由SQL线程读取解析relay log为对应的sql命令执行。
## 查询中继日志相关配置信息
show variables like '%relay_log%';
+---------------------------+---------------------------------+
| Variable_name | Value |
+---------------------------+---------------------------------+
| max_relay_log_size | 0 |
| relay_log | /data/mysql_log/relay-bin.index |
| relay_log_basename | /data/mysql_log/relay-bin |
| relay_log_index | /data/mysql_log/relay-bin.index |
| relay_log_info_file | relay-log.info |
| relay_log_info_repository | TABLE |
| relay_log_purge | ON |
| relay_log_recovery | OFF |
| relay_log_space_limit | 0 |
| sync_relay_log | 10000 |
| sync_relay_log_info | 10000 |
+---------------------------+---------------------------------+
11 rows in set (0.00 sec)
相关参数说明:
- relay_log:中继日志存储位置
- relay_log_purge:是否自动清空中继日志
- relay_log_recovery:当从库宕机后,假如relay-log损坏了,导致一部分中继日志没有处理,则自动放弃所有未执行的relay-log,并且重新从master上获取日志,从而保证relay-log的完整性。
- relay_log_info_file:定义relay-log.info的位置和名称
- relay-log.info:记录master主库的binary_log的恢复位置和从库relay_log的位置
二、二进制文件格式
mysql binlog有三种格式:
- statement:基于语句
- row:基于行
- mixed:混合模式
## 查看当前二进制日志格式
show variables like 'binlog_format';
1、statement
- 5.7版本之前默认二进制日志格式
- 记录每一条修改的SQL语句,在批量修改时会记录批量修改SQL语句事件,而不是单条SQL语句。
1)优点:
- 日志记录量较小,节约磁盘及网络I/O
2)缺点:
- 必须要记录上下文信息,保证在从服务器上执行结果和主服务器上相同
- 对一些非确定性函数无法进行正确复制,如UUID(),USER()等
- 可能造成mysql复制的主备服务器数据不一致
2、row
- 5.7之后默认二进制日志格式
- 不记录SQL上下文相关信息,仅记录增删查改的数据行信息,通过binlog_row_image=full|minimal|noblob控制日方式
binlog_row_image参数:
- full:数据修改时会记录一行数据所有列的内容,无论这些列是否被修改过。
- minimal:只会记录被修改前与修改后的内容
- noblob:和full方式二相似,仅仅当blog或text这些列没有进行修改时,不会记录这些属性的列
1)优点:
- 使mysql主从复制更加安全
- 对每一行数据的修改比基于段的复制高效
- 有利于数据恢复
2)缺点:
- 日志量较大
3、mixed
- MySQL自行判断选择合适的方式基于语句或基于行记录日志