mysql的日志文件
文件位置:
在配置文件中指定
主要包含:错误日志、查询日志、慢查询日志、事务日志、二进制日志;
在mysql中输入:
mysql> SHOW GLOBAL VARIABLES LIKE '%log%';
可以查看各种日志的使用情况。
对其中常用字段的解释:
| back_log 指定MySQL可能的连接数量。back_log值说明MySQL临时停止响应新请求前在短时间内可以堆起多少请求。 | binlog_cache_size 二进制日志缓存大小 | binlog_checksum 主从复制事件校验 | binlog_direct_non_transactional_updates 让非事务性的语句直接写入到binlog里面 | binlog_error_action 当不能写binlog时,mysql-server将会采取什么行动。 | binlog_format 基于语句的二进制日志 | binlog_gtid_simple_recovery 当mysql启动或重启时,mysql在搜寻GTIDs时是如何迭代使用binlog文件的。 | binlog_max_flush_queue_time 单位为微妙,用于从flush队列中取事务的超时时间,这主要是防止并发事务过高,导致某些事务的RT上升。 | binlog_stmt_cache_size 二进制日志缓存大小,但是超出binlog_stmt_cache_size时,使用一个临时文件来存放这些语句。 | expire_logs_days 日志过期天数(开启后自动清理二进制日志) | general_log 查询日志关闭 | general_log_file 查询日志的位置以及文件名 | innodb_flush_log_at_timeout 刷新日志的时间,与innodb_flush_log_at_trx_commit 配合使用 | innodb_flush_log_at_trx_commit 在事务提交时innodb是否将日志从缓冲同步到文件中【而从日志文件同步到数据文件中的行为是由mysql后台进程完成】,0表示每秒将内存中的缓存数据同步到日志文件中去,不在内存中缓存。1表示事务一提交就同步不提交每隔一秒同步一次,性能会很差造成大量的磁盘I/O;定义为2表示只有在事务提交时才会同步但是可能会丢失整个事务 | innodb_log_buffer_size 设定InnoDB用于辅助完成日志文件写操作的日志缓冲区大小,单位是字节,默认为8MB。 | innodb_log_file_size 事务日志文件大小 | innodb_log_files_in_group 事务组中的文件个数 | innodb_log_group_home_dir 定义innodb事务日志日志文件目录 | innodb_mirrored_log_groups 事务日志镜像文件目录 | log_bin 关闭二进制日志,可以接受一个文件路径,表示将二进制日志写至该目录下的这个文件中 | log_error 错误日志的位置 | log_output 日志的记录的方式 | log_slave_updates 用于设定复制场景中的从服务器是否将从主服务器收到的更新操作记录进本机的二进制日志中。本参数设定的生效需要在从服务器上启用二进制日志功能。 | log_warnings 是否将警告写进错误日志 | max_binlog_cache_size 二进定日志缓存空间大小,5.5.9及以后的版本仅应用于事务缓存,其上限由max_binlog_stmt_cache_size决定。 | max_binlog_stmt_cache_size 二进定日志缓存空间大小,5.5.9及以后的版本仅应用于事务缓存 | max_relay_log_size 设定从服务器上中继日志的体积上限,到达此限度时其会自动进行中继日志滚动。此参数值为0时,mysqld将使用max_binlog_size参数同时为二进制日志和中继日志设定日志文件体积上限。 | relay_log 设定中继日志的文件名称,默认为host_name-relay-bin。 | relay_log_index 设定中继日志的索引文件名,默认为为数据目录中的host_name-relay-bin.index。 | relay_log_info_file 设定中继服务用于记录中继信息的文件,默认为数据目录中的relay-log.info。 | relay_log_purge 设定对不再需要的中继日志是否自动进行清理。默认值为ON。 | relay_log_space_limit 设定用于存储所有中继日志文件的可用空间大小。默认为0,表示不限定。 | slow_query_log 关闭慢查询日志 | slow_query_log_file 慢查询日志位置 | sql_log_bin 是否将二进制日志信息同步进磁盘文件 | sql_log_off 是否禁止将一般查询日志类信息记录进查询日志文件 | sync_binlog 设定多久同步一次二进制日志至磁盘文件中,0表示不同步,任何正数值都表示对二进制每多少次写操作之后同步一次。当autocommit的值为1时,每条语句的执行都会引起二进制日志同步,否则,每个事务的提交会引起二进制日志同步。
一、错误日志:
- 相关字段
log_error
log_warnings在mysql数据库中,错误日志功能是默认开启的。并且,错误日志无法被禁止。默认情况下,错误日志存储在mysql数据库所在存储目录下。错误日志文件通常的名称为hostname.err。其中,hostname表示服务器主机名。
- 删除错误日志:
我们需要先将错误日志重命名,再执行service mysqld reload 来删除错误日志。flush logs一般只会滚动中继日志和二进制日志
- 错误日志主要记录内容:
服务器启动和关闭过程中的信息。
服务器运行过程中的错误信息。
事务调度器运行一个事件时产生的信息。
在从服务器上启动从服务器进程时产生的信息。
二、一般查询日志:
默认情况下查询日志是关闭的。由于查询日志会记录用户的所有操作,大量的IO操作会影响mysql的性能的。如若不是为了调试数据库的目的建议不要开启查询日志。
- 相关字段:
general_log
general_log_file
log
log_output
三、慢查询日志:
慢查询日志是用来记录执行时间超过指定时间的查询语句。通过慢查询日志,可以查找出哪些查询语句的执行效率很低,以便进行优化。一般在服务器调优时开启,记录mysql服务器上执行了很长时间的查询语句。可以帮助我们定位性能问题的。
- 相关字段:
long_query_time定义时间长短,最小0默认10s
long_query_time
log_slow_queries={YES|NO}
slow_query_log
slow_query_log_file
mysql>SET GLOBAL slow_query_log=1;开启慢查询日志(但是要将慢查询日志存储位置改变需要重启服务器)
- 定义位置:
[mysqld]
slow_query_log=1
log-slow-queries [= DIR/[filename] ]
一般都是通过long_query_time选项来设置这个时间值,时间以秒为单位,可以精确到微秒。如果查询时间超过了这个时间值(默认为10秒),这个查询语句将被记录到慢查询日志中。
四、事务日志:事务性存储引擎用于保证原子性、一致性、隔离性和持久性。
利用事务日志,对表中的数据操作可以恢复,但是若删除了表则恢复不了。
事务日志(InnoDB特有的日志)可以帮助提高事务的效率。使用事务日志,存储引擎在修改表的数据时只需要修改其内存拷贝,再把改修改行为记录到持久在硬盘上的事务日志中,而不用每次都将修改的数据本身持久到磁盘。事务日志采用追加的方式,因此写日志的操作是磁盘上一小块区域内的顺序I/O,而不像随机I/O需要在磁盘的多个地方移动磁头,所以采用事务日志的方式相对来说要快得多。事务日志持久以后,内存中被修改的数据在后台可以慢慢的刷回到磁盘。目前大多数的存储引擎都是这样实现的,我们通常称之为预写式日志,修改数据需要写两次磁盘。
- 相关字段:
innodb_log_files_in_group //一般一组俩个,每个5M即可。
innodb_flush_log_at_timeout
innodb_flush_log_at_trx_commit
innodb_log_buffer_size
innodb_log_file_size
innodb_log_group_home_dir
五、二进制日志:(用于复制,及时点恢复)
二进制日志也叫作变更日志,主要用于记录引起或有可能引起数据库改变的mysql语句,并且记录了语句发生时间、执行时长、操作的数据等等。所以说通过二进制日志可以查询mysql数据库中进行了哪些变化。一般大小体积上限为1G。mysql每重启一次,都滚动一次
- 查看二进制日志命令:mysqlbinlog
- 二进制日志的格式(binlog_format):
基于语句: statement(记录mysql语句比如将1000个人的工资都加100元)
基于行: row (记录行,记录mysql语句的执行结果)
混合方式: mixed(mysql自己选择基于语句或者基于行)
- 二进制日志文件组成有两类:
索引文件
二进制日志文件
- 查看
当前正在使用的二进制日志文件
mysql> SHOW MASTER STATUS;
显示当前存在的二进制日志文件
mysql> SHOW BINARY LOGS;
查看某个二进制日志中的内容
mysql> SHOW BINLOG EVENTS IN ‘二进制日志文件名’ [FROM pos];
mysqlbinlog mysql-bin.000001 查看二进制日志文件
mysqlbinlog mysql-bin.000001 >/root/a.sql 将二进制日志文件保存至a.sql文件中,用于还原
mysqlbinlog –start-datetime=‘2013-04-26 15:14:39’ mysql-bin.000001 查看从指定时间开始的二进制日志文件
相关选项:
–stop-datetime
–start-position
–stop-position
- 删除二进制日志信息:
不能rm去删除二进制日志文件,否则mysql再次启动会崩溃!
删除该二进制日志文件之前的所有二进制文件:
mysql> PURGE BINARY LOGS TO ‘某二进制日志文件’
mysql>flush logs一般只会滚动中继日志和二进制日志
- 事务日志与二进制日志的区别:
二进制日志:数据库崩溃时,实现数据还原的。
事务日志:确保数据安全性的重要机制,保证事务本身可靠性。
事务日志可以roolback二进制日志不行
假如我们的备份策略是一月做一次完全备份,每周日做一次增量备份,突然有周周三还没到备份时间,mysql挂了,那么这周从周一到周三的数据由二进制日志来还原,而执行了一半的 事务由事务日志来还原。
六、中继日志:(从服务上)
从服务器从主服务器上复制而来并保存在从服务器上的日志文件就是中继日志文件,用于同主服务器同步。