数据库学习----MySQL 日志
MySQL 日志
记录MySQL学习过程中的所有日志,可能不一定所有的都会用到
MySQL 常用的日志类型
日志名称 | 作用 |
---|---|
错误日志(error_log) | 记录mysql在启动、运行或停止时出现的问题 |
常规日志(general_log) | 记录所有发向MySQL的请求 |
慢查日志(slow_query_log) | 记录符合条件的查询 |
二进制日志(binary_log) | 记录全部有效的数据修改日志 |
中继日志(relay_log) | 用于主从复制,临时存储从主库的二进制日志 |
错误日志
- 分析排除MySQL 运行错误
- 记录未经授权的访问
配置错误日志
- log_error=$mysql/sql_log/mysql-error.log(MySQL 的错误日志存储目录)
- log_error_verbosity=[1,2,3] (级别越高,记录的日志越多)
verbosity | 作用 |
---|---|
1 | Error messages |
2 | Error and warning messages |
3 | Error,warning,and note messages |
- log_error_services=[日志服务组件;日志服务组件] (MySQL 8.0 中才有)
组件名称 | 作用 |
---|---|
log_filter_internal | 默认的日志过滤组件,依赖log_error_verbosity |
log_sink_internal | 默认的日志输出组件,依赖log_error |
log_sink_json | 将错误日志输出到json文件 |
log_sink_syseventlog | 将错误日志输出到系统日志文件 |
查看日志目录存放目录
select @@log_error;
查看log_error_verbosity
select @@log_error_verbosity;
查看log_error_services;
select @@log_error_services;
查看日志使用的时区
select @@log_timestamps;
设置系统时间作为时间撮
set persist log_timestamps='SYSTEM';
配置常规日志
分析客户端发送到MySQL 的实际请求(短时间内会有大量的日志被记录)
这个日志会从建立连接开始知道连接断开的所有操作日志。
密码明文是不会记录下来的
- general_log=[ON|OFF]打开或关闭常规日志(不是特殊情况不要打开)
- general_log_file=$mysql/sql_log/general.log (常规日志文件的位置)
- log_output=[FILE|TABLE|NONE] 保存在表中或文件中 mysql 库中的 general_log表
查看general_log
select @@general_log; 0 未启动 1启动
查看general_log 文件位置
select @@general_log_file;
设置general_log 文件目录
set persist general_log_file='/home/mysql/sql_log/general.log'
启动general_log
set global general_log=on;
设置log_output的位置
set global general_log='table’;
关闭log_output
set global general_log=off;
配置慢查询日志
将执行成功并符合条件的查询记录到日志中
找到需要优化的SQL
- slow_query_log=[ON|OFF] (配置是否打开慢查询日志)
- slow_query_log_file=$mysql/sql_log/slowlog.log(慢查询日志文件位置)
- long_query_time=xx秒(执行成功符合的条件----查询时间)记录所有sql可以将这个参数设置为0
- log_queries_not_using_indexes=[ON|OFF] (记录所有没有使用索引的SQL)
- log_slow_admin_statements=[ON|OFF] (记录所有使用admin 操作的日志)
- log_slow_slave_statements=[ON|OFF] (记录二进制日志,主从数据库,很少使用,基本不打开了)
查看慢查询日志设置的慢查询时间
show variables like 'long_query_time';
修改慢查询日志的慢查询时间
set global long_query_time=0.01;
配置二进制日志
记录所有对数据库中数据的修改
基于时间点的备份和恢复
主从复制
-
log-bin [=base_name]
-
binlog_format=[Row|STATEMENT|MIXED] (二进制日志格式)
- Row 每修改一行就记录一条记录
- STATEMENT 5.7之前 默认 只记录执行的SQL 语句(可避免主从不一致的问题)
- MIXED MySQL 数据Row 与 STATEMENT 写得混合
-
binlog_row_image=[FULL|MINIMAL|NOBLOB]
- FULL 全部记录
- MINIMAL 只记录被修改的值
- NOBLOB 值记录除了BLOB 外的值的修改
-
binlog_rows_query_log_events=[ON|OFF] (在ROW格式下记录SQL)
-
log_slave_updates=[ON|OFF] 记录从主数据库同步过来的二进制数据
-
sync_binlog=[1|0] 控制MySQL 如何刷新日志到磁盘
- 1 :每写一次就刷一次
- 0 :由操作系统决定
-
expire_logs_days=days(每天清理一次二进制日志)
-
PURGE BINARY LOGS TO ‘mysql-bin.010’ (把mysql-bin.001~mysql-bin.009 全部删除掉)
-
PURGE BINARY LOGS BEFORE ‘2010-10-22 10:12:33’ (小于这个时间点的二进制日志全部删除掉)
查看是否打开二进制日志
show variables like 'log_bin';
查看配置文件目录
show variables like 'log_bin_basename';
查看binlog_row_image
show variables like 'binlog_row_image';
查看二进制日志格式
show variables like 'binlog_format';
读取二进制日志(转换为可读的内容)
mysqlbinlog --no-defaults -vv --base64-output=DECODE-
ROWS
二进制日志名
修改二进制日志格式
set global binlog_row_image=minimal;
打开ROW 格式下记录SQL
set binlog_rows_query_log_events=on;
配置中继日志
只有在主从复制的数据库中才有
临时记录从主服务器同步的二进制日志
- relay_log=filename (用于文件位置和文件前缀,不填的话则会存在数据目录中,会用主机名作为前缀)
- relay_log_purge=[ON|OFF] (对relay_log进行自动清除)
PS:flush logs 可以刷新日志的配置