MySQL 日志:
查询日志: query log
慢查询日志: 查询执行时长超过指定时长的查询操作所记录日志 #slow query log
错误日志: error log 包括服务自己启动或关闭的正常信息
二进制日志: binary log 非常重要的日志, 数据恢复
中继日志: reley log MySQL 复制中用到的日志
事务日志: transaction log
ACID, 随机 I/O 转换为顺序 I/O
1, 查询日志:
记录查询操作:
记录在文件中: file
表中: table
- MySQL> SHOW GLOBAL VARIABLES LIKE '%log%';
- log_output = {TABLE|FILE|NONE}
- log_output = TABLE,FILE,NONE
- FILE: gerenal_log
general_log = {ON|OFF}: 是否启用查询日志
general_log_file = HOSTNAME.log: 当 log_output 有 FILE 类型时, 日志信息的记录位置;
2, 慢查询日志:
查询时长超过指定时长的查询操作:
- MySQL> SELECT @@GLOBAL.long_query_time; #查看执行的指定时长
- +--------------------------+
- | @@GLOBAL.long_query_time |
- +--------------------------+
- | 10.000000 |
- +--------------------------+
- 1 row in set (0.01 sec)
- MySQL> SHOW GLOBAL VARIABLES LIKE 'long_query_time';
- +-----------------+-----------+
- | Variable_name | Value |
- +-----------------+-----------+
- | long_query_time | 10.000000 |
- +-----------------+-----------+
- 1 row in set (0.00 sec)
- MySQL> SET GLOBAL long_query_time=''; #设置临时修改, 如需要永久生效, 需要写入配置文件
slow_query_log = {ON|OFF}: 是否启用慢查询日志
slow_query_log = /path/to/somefile: 日志文件路径
log_slow_filter = admin,filesort,filesort_on_disk,full_join,full_scan,query_cache,query_cache_miss,tmp_table,tmp_table_on_disk
慢查询日志过滤器, 哪一种查询需要记录, 哪种不需要记录
- log_slow_rate_limit = #指明记录的速率
- log_slow_verbosity = #详细级别
3, 错误日志:# 默认是不开启的
记录的并非完全的错误日志信息, 记录 MySQL 的正常启动与关闭的日志信息
mysqld 启动和关闭过程中输出的信息;
mysqld 运行中产生的错误信息;
event scheduler 运行一个 event 时产生的日志信息;
在主从复制架构中的从服务器上启动从服务器线程时产生的日志信息;
log_error = /path/to/somefile #指向绝对路径
log_warnings = {ON|OFF}:1|0 也是可以的,# 是否记录警告信息于错误日志中;
4, 二进制日志: 不能使用 cat 等命令打开, 可能会导致文件损坏
记录导致数据改变或潜在导致数据改变的 SQL 语句;
功能: 用于通过 "重放" 日志文件中的事件来生成数据副本;
SHOW {BINARY | MASTER} LOGS: 查看主服务器端处于由 mysqld 维护状态中的二进制日志文件;
SHOW MASTER STATUS: 查看使用的二进制日志文件;
SHOW BINLOG EVENTS [IN 'log_name'] [FROM pos] [LIMIT [offset,] row_count]: 显示指定的二进制日志文件中的相关事件
二进制日志记录格式:
基于 "语句" 记录; statement
基于 "行" 记录; row
"混合模式" :mixed, 让系统自动判定该基于那种方式进行;
二进制日志文件的构成:
两类文件
日志文件: 文件名前缀. 文件名后缀
索引文件: 文件名前缀. index #文本格式
服务器变量:
log_bin = /path/to/somefile 二进制日志记录的文件位置, 通常为 OFF
binlog_format = STAETMENT|ROW|MIXED 二进制日志记录的格式;
sql_log_bin = ON 是否记录二进制日志
max_binlog_size = 1073741824 #单个二进制日志文件的最大体积, 默认是 1G;
注意:(1) 到达最大值会自动滚动;(2) 文件到达上限时的大小未必会到达指定的最大值
二进制日志文件的单文件上限;
- max_binlog_cache_size = 18446744073709547520
- max_binlog_stmt_cache_size = 18446744073709547520
expire_logs_days = 0 二进制日志的自动清理功能默认设置为 0, 不启动该功能.
sync_binlog = 0|1: 设定多久同步一次二进制日志文件;
0 表示不同步; 任何正值都表示记录多少个语句后同步一次;
1 表示同步数据, 当遇到事务 commit 时将进行二进制日志同步一次;
二进制日志事件的格式:
- # at 19364
- #140829 15:50:07 server id 1 end_log_pos 19486 Query thread_id=13 exec_time=0 error_code=0
- SET TIMESTAMP=1409298607/*!*/;
- GRANT SELECT ON tdb.* TO tuser@localhost
- /*!*/;
- # at 19486
事件发生的日期和时间;(140829 15:50:07)
事件发生在服务器的标识 (server id)
事件的结束位置:(end_log_pos 19486) 下一个事件的起始位置
事件的类型:(Query)
事件发生时所在的服务器执行此事件的线程的 ID:(thread_id=13)
语句的时间戳与将其写入二进制文件中的时间差:(exec_time=0)
错误代码:(error_code=0)
事件内容:(SET TIMESTAMP=1409298607/*!*/;
GRANT SELECT ON tdb.* TO tuser@localhost)
GTID 事件专属: Global Rransction ID;
事件所属的全局事务的 GTID:(GTID 0-1-2)
二进制日志的查看命令:
mysqlbinlog: 客户端命令工具
查看二进制文件事件信息
mysqlbinlog [OPTIONS] log_files
./mysqlbinlog /usr/log/MySQL-bin.000003 二进制文件的觉得路径
- mysqlbinlog
- -j, --start-position=#: 从指定的事件位置查看
- --stop-position=#: 只显示到指定的事件位置
- --start-datetime=name
- --stop-datetime=name
- YYYY-MM-DD hh:mm:ss
- -u
- -h
- -p
5, 中继日志:
复制架构中, 从服务器用于保存从主服务器的二进制日志中读取到的事件;
6, 事务日志 (innodb 存储引擎):
帮助事务性存储引擎保存数据的, 事务型存储引擎自行管理和使用的;
事务型存储引擎自行管理和使用
- redo log
- undo log
来源: http://www.bubuko.com/infodetail-2961523.html