MySQL日志类别:
通常查询日志:log,general_log,log_output
慢查询日志:查询执行的时长超过指定的查询,即为慢查询;
错误日志:一般时指错误日志的相关信息,一般用服务器关闭和启动的日志信息,服务器运行过程当中的错误信息,还能够记录警告信息。
二进制日志:只是跟修改相关的操做,能够理解为一个重作日志,用于复制的基本凭据;
中继日志:它其实跟复制相关的,与二进制日志几乎相同;mysql
事物日志:随机I/O转换为顺序I/O,通常在两个文件存储,一个存满了就换另一个存sql
查询日志数据库
log={ON|OFF} # 是否记录全部语句的日志信息于通常查询日志文件(general_log)中; log_output={TABLE | FILE | NONE} # 定义log保存形式,none表示不保存日志;table和file能够同时出现,用逗号分隔便可; general_log={ON|OFF} # 是否启动查询日志; general_log_file # 定义通常查询日志保存的文件; mysql > SET GOLBAL general_log ={OFF|ON};启用或关闭通常查询日志 mysql > SET GLOGAL log_output=’TABLE’;选项能够控制log的存放方法,table表示以表格的方式存放。
注:安全
若想开启查询日志,则log和general_log参数都必须处于ON状态;bash
对于繁忙的MySQL,不建议开启此日志;服务器
慢查询日志:查询执行时长超过指定时长的查询,即为慢查询多线程
long_query_time # 定义慢查询的时长; slow_query_log {ON|OFF} # 全局参数,设定是否启用慢查询日志;它的输出位置也取决于log_output的值; slow_query_log_file # 定义日志文件路径及名称; log_slow_filter # 慢查询日志过滤类型; log_slow_queries # 是否启用慢查询日志,会话级别的; log_rate_limit=1 # 定义其日志记录速率; log_slow_verbosity # 是否记录详细格式的日志信息;
错误日志架构
主要记录内容:函数
服务器启动和关闭过程当中的信息;工具
服务器运行过程当中的错误信息;
事件调度器运行一个事件时产生的信息;
在复制架构中从服务器上启动从服务器线程时产生的信息;
参数设定:
log_error = /path/to/error_log_file # 定义错误日志文件 log_warnnings = {1|0} # 是否记录警告信息于错误日志中
二进制日志:
记录了对MySQL数据库进行的修改操做,,影响数据潜在的内容的信息,select的是不会被记录到二进制日志的,二进制日志也叫复制日志,默认在数据目录下,专门查看日志的命令是:mysqlbinlog
功能:一、作时间点恢复,要想从哪一个时间点恢复咱们能够手动调的,因此这是一个备份恢复的重要工具
二、 mysql主从复制架构中使用;
由于咱们的MySQL数据是单进程多线程的工做机制,因此他能够同时发起不少们修改的语句,可是咱们服务器使用的日志只有一个,那若是同时进行的多个线程 的请求都同时往日志文件中写数据,日志文件就成了资源热点,也叫资源征用点,那就会混乱不堪,为了解决这种问题,这里,当咱们的线程要往二进制日志文件中 写数据的时候,它不是直接写到日志文件中去,仍是统一写到日志缓冲区中,由日志缓冲区逐一写入日志文件中去,然而咱们的日志文件对于一个很繁忙的服务器来 讲,天天都会产生很大的数据量,若是全部的二进制日志数据都写在一个日志文件中,那管理起来就特色的不方便了,也很不合理,如是日志文件丢失,那全部的日 志数据信息都丢失了,不该该这么作,那咱们就有日志滚动的机制了,二进制日志咱们能够本身定义,有两种定义日志滚致力的方法,一种是按大小来定义的,好比 说咱们定义一个日志文件的大小为1G,那他存储一了大概1G左右就会滚动,使用下一个日志来存放二进制日志数据;另外一种能够按时间来定义的,好比说一周滚 动一次,或者说一个月,一天滚动一次均可以;或者每次重启服务时或者执行FLUSH LOGS命令时都会滚动一第二天志。
MariaDB [(none)]> SHOW MASTER STATUS;能够查看当前服务器正在使用的二进制日志文件以及下一下个事件开始时基于的位置Position,若是当前使用的是00004,那么0000一、2、3将不会再被使用,由于已经被滚动过去了。 MariaDB [hellodb]> SHOW BINARY LOGS;查看当前系统上全部的的二进制日志文件,其实就是数据目录下mysql-bin.index文件中的信息,这个文件就是保存已经滚动过的日志文件的条目。 MariaDB [hellodb]> flush logs; 清除日志文件的命令:PURGE MariaDB [hellodb]> show binlog events in ‘log_file’; # mysqlbinlog --start-time --stop-time --start- # mysqlbinlog --start-protion=1139 mysql-bin.000001:在命令行中查看某个日志文件的某个位置点日后所记录的数据信息。能够用输出重定向保存到某个文件中去未来用于执行的。 server-id:服务器的身份标识, MariaDB [hellodb]> SELECT VERSION();查看当前数据库的版本 MariaDB [(none)]> SHOW BINLOG EVENTS IN 'mysql-bin.000001' FROM 1139;查看某个二进制日志文件中从哪一个位置日后发生的事件信息。 MariaDB [(none)]> SHOW BINLOG EVENTS IN 'mysql-bin.000006'\G查看某个二进制文件中在全部时间点和结束点等相关的信息。
MySQL记录二进制日志的格式:
statement:基于语句
缺陷:执行带时间函数的语句时,会致使主从服务器执行结果不一致;
如 insert into tb1 value (current_date());
row:基于行
缺陷:批量更新操做将致使从服务器进行更多的操做 update tb2 set salary=salary+1000;
mixed:混合模式,由MySQL自行判断选择适合的方式基于语句或基于行记录日志;
二进制日志文件的内容格式
事件发生的日期和时间
服务器id:server_id
事件的结束位置:end_log_pos
事件的类型:如Query,GTID等
原服务器生成此事件时的线程id:thread_id
语句的时间戳和写入二进制日志文件的时间差,exec_time
错误代码:error_code
事件位置:at #,至关于下一事件的开始位置
设定参数:
og_bin = {ON|OFF|FileName} # 全局变量,控制二进制文件位置 log_bin_trust_function_creators # 全局变量,仅在启用二进制日志时有效,用于控制建立存储函数时若是会致使不安全的事件是否禁止建立存储函数 sql_log_bin = {ON|OFF} # 会话级别,用于控制二进制日志信息是否记录进日志文件 sync_binlog # 设定多久同步一次二进制日志至磁盘文件中,0表示不一样步,任何正数值都表示对二进制每多少次写操做以后同步一次; binlog_format={statement|row|mixed} # 指定二进制日志的类型 max_binlog_cache_size= # 二进制日志缓冲空间大小,仅用于缓冲事务类的语句, 其上限由max_binlog_stmt_cache_size决定 max_binlog_size= # 二进制日志文件大小上限,单位字节,默认大小1G # 注:切勿将二进制日志与数据文件放在同一磁盘上,减小磁盘I/O
中继日志:它其实跟复制相关的,与二进制日志几乎相同,只不过它不是用于记录事件的,而是做为读取数据的源而且在本地执行的,固然中继日志是在从服务器上。
设定参数:
MariaDB [hellodb]> SHOW GLOBAL VARIABLES LIKE
'%relay%'
;查看中继日志的相关参数信息
relay_log=file_name # 设定中继日志的文件名称 relay_log_index=file_name # 设定中继日志的索引文件名,默认为为数据目录中的host_name-relay-bin.index relay_log_purge={ON|OFF} # 是否自动清理再也不须要的中继日志 relay_log_space_limit= # 设定用于存储全部中继日志文件的可用空间大小,0表示不限制
relay_log_recovery:跟中继日志自动恢复相关的relay_log={空}:是否启用中继日志的
事务日志:
暂存事务提交的数据,实现将随机I/O转换成顺序I/O;
事务数据提交流程:innodb_buffer-->事务日志-->数据文件;
事务日志文件组,至少应该有2个日志文件,通常保存在数据目录下,为ib_logfile0和ib_logfile1;
注意事项:
尽量使用小事务以提高事务引擎的性能;由于事务越大,回滚开销越大;
崩溃恢复:将提交的事务从事务日志中同步至数据文件,将未提交的事务执行回滚操做,以保证数据一致性;
避免磁盘故障致使事务文件丢失:对事务日志所在的磁盘作数据镜像;
事务日志文件和数据文件应分离存放:防止对同一磁盘过于频繁的I/O操做;
设定参数: