标签:mysql 日志 database table view
查看所有日志相关变量:
SHOW GLOBAL VARIABLES LIKE ‘%log%‘;
1.查询日志:
log_output = {TABLE|FILE|NONE}
log_output = TABLE,FILE 查询日志放在哪,可以记录在文件中也可以记录在表中
FILE: gerenal_log
general_log = {ON|OFF}: 是否启用查询日志
general_log_file = HOSTNAME.log:当log_output有FILE类型时,日志信息的记录位置
2.慢查询日志:查询执行时长超过指定时长的查询操作所记录日志
生产环境中应该启用,通过在配置文件修改参数启用! SELECT @@GLOBAL.long_query_time; +--------------------------+ | @@GLOBAL.long_query_time | +--------------------------+ | 10.000000 | +--------------------------+ 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.错误日志:会记录以下信息:
mysqld启动和关闭过程中输出的信息;
mysqld运行中产生的错误信息;
event scheduler运行一个event时产生的日志信息;
在主从复制架构中的从服务器上启动从服务器线程时产生的日志信息;
相关变量:
log_error = /path/to/somefile 也可以使用ON或OFF
log_warnings = {ON|OFF}:是否记录警告信息于错误日志中;
4.二进制日志:记录导致数据改变或潜在导致数据改变的SQL语句,便于崩溃了丢失数据后重放记录的事件实现数据恢复
SHOW {BINARY | MASTER} LOGS:查看主服务器端处于由mysqld维护状态中的二进制日志文件; SHOW MASTER STATUS:查看当前正在使用的二进制日志文件是哪个以及记录到哪个位置了 SHOW BINLOG EVENTS [IN ‘log_name‘] [FROM pos] [LIMIT [offset,] row_count]:显示指定的二进制日志文件中的相关事件 示例: MariaDB [(none)]> CREATE DATABASE mydb; Query OK, 1 row affected (0.04 sec) MariaDB [(none)]> SHOW MASTER LOGS; +------------------+-----------+ | Log_name | File_size | +------------------+-----------+ | mysql-bin.000001 | 328 | +------------------+-----------+ 1 row in set (0.00 sec) MariaDB [(none)]> SHOW BINLOG EVENTS IN ‘mysql-bin.000001‘ -> ; +------------------+-----+-------------+-----------+-------------+-----------------------------------------------+ | Log_name | Pos | Event_type | Server_id | End_log_pos | Info | +------------------+-----+-------------+-----------+-------------+-----------------------------------------------+ | mysql-bin.000001 | 4 | Format_desc | 1 | 245 | Server ver: 5.5.44-MariaDB-log, Binlog ver: 4 | | mysql-bin.000001 | 245 | Query | 1 | 328 | CREATE DATABASE mydb | +------------------+-----+-------------+-----------+-------------+-----------------------------------------------+ 2 rows in set (0.00 sec)
日志记录格式:
①基于“语句”记录;statement 高效,对IO影响小,但是并发或者调用函数记录时有时会产生数据不一致而重放错误
②基于“行”记录;row 基于语句执行后结果记录,精确度高,但是对IO影响较大
③混合 :mixed 系统自行判断
二进制日志文件的构成:
日志文件:文件名前缀.文件名后缀 mysql-bin.000001
索引文件:文件名前缀.index mysql-bin.index
服务器变量:
log_bin = /path/to/somefile 记录位置
binlog_format = MIXED|statement|row 记录格式
sql_log_bin = ON 是否启用
max_binlog_size = 1073741824定义二进制日志文件的单文件上限,不宜太大,默认1G,到达1G会自动滚动
max_binlog_cache_size = 18446744073709547520
max_binlog_stmt_cache_size = 18446744073709547520
expire_logs_days 多久不使用就删除,0表示不启用根据时间自动清理功能
sync_binlog = 1|0:设定多久从内存同步一次二进制日志文件到磁盘;0表示不同步;1表示只要事务commit就要执行一次同步,其他任何正值都表示记录多少个语句后同步一次;
二进制日志的查看命令:
mysqlbinlog [-u|-p|-h]
-j, --start-position=#:从指定的事件位置查看
--stop-position=#:只显示到指定的事件位置
--start-datetime=name
--stop-datetime=name
YYYY-MM-DD hh:mm:ss
二进制日志的格式:
mysqlbinlog mysql-bin.000001 显示二进制日志文件的工具
[root@testserver mysql]# mysqlbinlog mysql-bin.000001 /*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/; /*!40019 SET @@session.max_insert_delayed_threads=0*/; /*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/; DELIMITER /*!*/; # at 4 #151109 22:10:10 server id 1 end_log_pos 245 Start: binlog v 4, server v 5.5.44-MariaDB-log created 151109 22:10:10 at startup # Warning: this binlog is either in use or was not closed properly. ROLLBACK/*!*/; BINLOG ‘ QqlAVg8BAAAA8QAAAPUAAAABAAQANS41LjQ0LU1hcmlhREItbG9nAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAABCqUBWEzgNAAgAEgAEBAQEEgAA2QAEGggAAAAICAgCAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAABub2HQ== ‘/*!*/; # at 245 #151109 22:27:20 server id 1 end_log_pos 328 Query thread_id=2 exec_time=0 error_code=0 SET TIMESTAMP=1447079240/*!*/; SET @@session.pseudo_thread_id=2/*!*/; SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1/*!*/; SET @@session.sql_mode=0/*!*/; SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/; /*!\C utf8 *//*!*/; SET @@session.character_set_client=33,@@session.collation_connection=33,@@session.collation_server=33/*!*/; SET @@session.lc_time_names=0/*!*/; SET @@session.collation_database=DEFAULT/*!*/; CREATE DATABASE mydb /*!*/; DELIMITER ; # End of log file ROLLBACK /* added by mysqlbinlog */; /*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/; /*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;
以上信息解析:
事件发生的日期和时间;(140829 15:50:07)
事件发生在服务器的标识(server id)避免多次重复重放
事件的结束位置:(end_log_pos 19486)下一个事件的起始位置
事件的类型:(Query)
事件发生时所在的服务器执行此事件的线程的ID:(thread_id=13)
语句的时间戳与将其写入二进制文件中的时间差:(exec_time=0表示事件一产生就直接记录到日志中了)
错误代码:(error_code=0)
事件内容:(SET TIMESTAMP=1409298607/*!*/处开始;)
GTID事件专属:用于复制时定义一个ID,避免事物间的冲突,可以按照指定顺序提交事务
事件所属的全局事务的GTID:(GTID 0-1-2)
5.中继日志:复制架构中从服务器用于保存从主服务器的二进制文件中读取到的事件
6.事务日志(innodb存储引擎):帮助事务型存储引擎实现ACID
分组保存于硬盘上一段连续的存储空间上,避免了大量的随机IO,转而用顺序IO,一个组至少两个文件,循环使用。
查询时不仅会查询数据文件,也会查询缓存在内存中(加速查询)的事务日志文件。否则可能会出现数据不一致情况,这段内存空间就是buffer_pool
innodb_log_buffer_size | 8388608 buffer_pool大小定义 innodb_log_file_size | 5242880 事务日志文件大小定义
本文出自 “明天过后” 博客,请务必保留此出处http://leeyan.blog.51cto.com/8379003/1711235
标签:mysql 日志 database table view
原文地址:http://leeyan.blog.51cto.com/8379003/1711235