数据库学习----MySQL 日志
MySQL 日志
记录
MySQL 学习过程中的所有日志,可能不一定所有的都会用到
MySQL 常用的日志类型
日志名称 | 作用 |
---|---|
错误日志 |
记录 |
常规日志 |
记录所有发向 |
慢查日志 |
记录符合条件的查询 |
二进制日志 |
记录全部有效的数据修改日志 |
中继日志 |
用于主从复制,临时存储从主库的二进制日志 |
错误日志
- 分析排除
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_sink_internal | 默认的日志输出组件,依赖 |
log_sink_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 进行自动清除)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· 因为Apifox不支持离线,我果断选择了Apipost!