MySQL的日志次要分为六类:
(1) 谬误日志log_error:记录MySQL服务的启动、运行或进行MySQL服务时呈现的问题
(2) 查问日志general_log:记录简历的客户端连贯和执行的语句
(3) 慢查问日志slow_query_log:记录所有执行工夫超过long_query_time的所有查问或不应用索引的查问
(4)二进制日志binlog:记录所有更改数据的语句,能够用于数据复制
(5)事务日志innodb_log:用来记录数据库更新状况的文件,它能够记录针对数据库的任何操作,并将记录的后果保留到独立的文件中
(6)中继日志relay_log:复制中应用
各类日志简介
1.二进制日志binlog
次要记录MySQL数据库的变动,二进制日志以一种无效的格局,并且是事务平安的形式蕴含更新日志中可用的所有信息,二进制日志蕴含了所有更新了数据或者曾经潜在更新了数据的语句,语句以“事件”的模式保留,形容数据更改。
二进制日志还蕴含对于每个更新数据库的语句的执行工夫信息,不蕴含没有批改任何数据的语句,如果想要记录所有的语句,须要应用个别查问日志,应用二进制日志的次要目标是最大可能的复原数据库,因为二进制日志蕴含备份后进行的所有更新。
binlog附加参数
max_binlog_size:
设置binlog的最大存储上线,当日志达到该日志的下限时,mysql会从新创立一个日志开始记录,不过偶然也会超出该设置的binlog,个别都是因为行将达到下限时候,产生了一个比拟大的事物,为了保障事物的平安,mysql不会将同一个事物离开记录到两个binlog
binlog-do-db=db_name:
明确通知mysql,须要对某个数据库记录binlog,如果有了binlog-do-db=db_name 显示指定,mysql会疏忽正对其余书库执行query,而仅仅记录只对指定数据库执行的query
binlog-ignore-db=db_name:
显示的指定疏忽某个数据库的binlog记录。
binlog-do-db 和binlog-ignore-db参数:
有一个独特的概念,参数db_name 不是指query 语句更新的数据所在的数据库,而是执行query的时候,以后所处的数据库。不管更新哪个数据库的数据,mysql仅仅比拟以后连贯所处的数据库与参数设置的数据库名。而不会剖析query语句所更新的数据库所在数据库。
binlog_cache_size :
当应用事务的存储引擎InnoDB时,所有未提交的事务会记录到一个缓存中,期待事务提交时,间接将缓冲中的二进制日志写入二进制日志文件,而该缓冲的大小由binlog_cache_size决定,默认大小为32KB,此外,binlog_cache_size是基于回话的,也就是,当一个线程开始一个事务时,mysql会主动调配一个大小为binlog_cache_size的缓存,因而该值得设置须要相当小心,能够通过show global status 查看binlog_cache_use、binlog_cache_disk_use的状态,能够判断以后binlog_cache_size的设置是否适合。
sync_binlog:
参数sync_binlog=[N]示意每写缓存多少次就同步到磁盘,如果将N设置为1,则示意采纳同步写磁盘的形式来写二进制日志,该参数很重要,这个当前还会提到。值得注意的是,在将该参数设置为1时,也应该将innodb_support_xa设为1来解决,这能够确保二进制日志和InnoDB存储引擎数据文件的同步
expire_logs_days:
定义了MySQL分明过期日志的工夫
二进制日志的开启形式:
(1)指定日志门路
mysqld_safe --user=mysql --log-bin=[path] &
如果没有指定文件名 默认mysql-bin,默认门路为datadir目录
(2)编辑my.cnf
[mysqld]
log-bin=[path]
log-bin= /var/log/mysql/mysql-bin.log --指定二进制日志的名称
log_bin_index= /var/log/mysql/mysql-bin.log.index
--二进制日志索引的名称
relay_log= /var/log/mysql/mysql-bin.relay ---中继日志的名称
relay_log_index= /var/log/mysql/mysql-bin.relay.index
---中继日志索引的名称
二进制日志的查看形式:
show binary logs能够查看以后的二进制日志文件个数以及文件名
| Log_name | File_size |
| mysqlbin.000001 | 27365 |
| mysqlbin.000002 | 1029074 |
| mysqlbin.000003 | 3457 |
| mysqlbin.000004 | 126 |
| mysqlbin.000005 | 1074144657 |
| mysqlbin.000006 | 1074572441
mysqlbinlog命令能够用来查看以后日志外面的内容
如果执行FLUSH LOGS,log-bin 会应用新的二进制日志编号
2.通用查问日志general_log
通用查问日志记录在MySQL上执行过的SQL语句,蕴含查问语句与启动工夫。倡议不是在调试环境下不要开启查问日志,因为它会一直占据磁盘空间,并且产生大量的IO,个别是在须要采样剖析或者调试的时候才开启。
通用日志的开启办法:
(1)执行命令开启:
set global general_log=1;//=0就是敞开通用查问日志
此时在默认在mysql的data目录中生成了localhost.log文件,该文件就是通用查问日志文件
(2)my.cnf中配置的形式,在my.cnf文件的[mysqld]上面任意一行减少或批改配置:
general_log-file[=path/[filename]] //=前面都是可选的,即有默认的保留日志的文件
general_log=1 //示意开启通用查问日志
举荐应用第一种形式开启或敞开通用查问日志,因为my.cnf的批改要失效须要重启mysql服务,并且这种通用查问日志的开启不须要始终开启而是短时间开启就须要敞开,所以在 my.cnf敞开时又要重启mysql服务。
3.谬误日志err_log
谬误日志文件蕴含了当mysqld启动和进行时,以及服务器在运行过程中产生严重错误时候的相干信息,在mysql中,谬误日志十分有用,MySQL会将启动和进行数据库信息以及一些错误信息记录保留到谬误日志文件中。
默认时谬误日志的寄存地位在数据目录中,名称为“server_name.err”
谬误日志记录的事件:
a)、服务器启动敞开过程中的信息
b)、服务器运行过程中的错误信息
c)、事件调试器运行一个事件工夫生的信息
d)、在从服务器上启动从服务器过程时产生的信息
查看与日志相干的变量:
mysql> SHOW GLOBAL VARIABLES LIKE '%log_error%';
my.cnf中谬误日志开启:
log_error=/PATH/TO/ERROR_LOG_FILENAME
例如:log_error = /mydata/data/hostname.err
定义谬误日志文件。作用范畴为全局或会话级别,可用于配置文件,属非动静变量。
log_warnings=#
设定是否将正告信息记录进谬误日志。默认设定为1,示意启用;能够将其设置为0以禁用;而其值为大于1的数值时示意将新发动连贯时产生的“失败的连贯”和“回绝拜访”类的错误信息也记录进谬误日志。
删除谬误日志之后要想重建日志:
在运行状态下删除谬误日志文件后,mysql并不会主动创立日志文件,flush logs在重建加载日志的时候,如果文件不存在,则会主动创立,所以在删除谬误日志之后,如果须要重建日志文件,须要在服务端执行以下命令:
mysqladmin -uroot -p flush-logs
4.慢查问日志log-slow-queries
慢查问日志是记录查问时长超过指定工夫的日志,慢查问日志次要用来记录执行工夫较长的查问语句,
mysql中慢查问日志默认是敞开的,
开启办法如下:
(1)能够通过配置文件my.cnf中的log-slow-queries选项关上,设定是否启用慢查问日志。0或OFF示意禁用,1或ON示意启用。日志信息的输入地位取决于log_output变量的定义,如果其值为NONE,则即使slow_query_log为ON,也不会记录任何慢查问信息。作用范畴为全局级别,可用于选项文件,属动静变量。
(2)也能够在MySQL服务启动的时候应用--log-slow-queries[=file_name]启动慢查问日志
启动慢查问时,须要在my.cnf文件中配置long_query_time选项指定记录阈值,如果某条查问语句的查问工夫超过了这个值,这个查问过程将被记录到慢查问日志文件中。
5.事务日志
Innodb次要是通过事务日志实现ACID个性
事务日志包含:重做日志redo和回滚日志undo
事务日志文件名为"ib_logfile0"和“ib_logfile1”,默认寄存在表空间所在目录,它是用来记录数据库更新状况的文件,它能够记录针对数据库的任何操作,并将记录的后果保留到独立的文件中。对于每一次数据库更新的过程,事务日志文件都有十分全面的记录。依据这些记录能够复原数据库更新前的状态。
与事务日志相干变量:
innodb_log_group_home_dir=/PATH/TO/DIR:
设定InnoDB重做日志文件的存储目录。在缺省应用InnoDB日志相干的所有变量时,其默认会在数据目录中创立两个大小为5MB的名为ib_logfile0和ib_logfile1的日志文件。作用范畴为全局级别,可用于选项文件,属非动静变量。
innodb_log_file_size={108576 .. 4294967295}
设定日志组中每个日志文件的大小,单位是字节,默认值是5MB。较为理智的取值范畴是从1MB到缓存池体积的1/n,其中n示意日志组中日志文件的个数。日志文件越大,在缓存池中须要执行的检查点刷写操作就越少,这意味着所需的I/O操作也就越少,然而这也会导致较慢的故障复原速度。作用范畴为全局级别,可用于选项文件,属非动静变量。
innodb_log_files_in_group={2 .. 100}
设定日志组中日志文件的个数。InnoDB以循环的形式应用这些日志文件。默认值为2。作用范畴为全局级别,可用于选项文件,属非动静变量。
innodb_log_buffer_size={262144 .. 4294967295}
设定InnoDB用于辅助实现日志文件写操作的日志缓冲区大小,单位是字节,默认为8MB。较大的事务能够借助于更大的日志缓冲区来防止在事务实现之前将日志缓冲区的数据写入日志文件,以缩小I/O操作进而晋升零碎性能。因而,在有着较大事务的利用场景中,倡议为此变量设定一个更大的值。作用范畴为全局级别,可用于选项文件,属非动静变量。
innodb_flush_log_at_trx_commit = 1
\# 示意有事务提交后,不会让事务先写进buffer,再同步到事务日志文件,而是一旦有事务提交就立即写进事务日志,并且还每隔1秒钟也会把buffer里的数据同步到文件,这样IO耗费大,默认值是"1",可批改为“2”
innodb_locks_unsafe_for_binlog OFF
\#这个变量倡议放弃OFF状态,具体的原理不分明
innodb_mirrored_log_groups = 1
\#事务日志组保留的镜像数
6.中继日志
在复制环境中产的的日志信息
与中继日志相干的变量:
log_slave_updates
用于设定复制场景中的从服务器是否将从主服务器收到的更新操作记录进本机的二进制日志中。本参数设定的失效须要在从服务器上启用二进制日志性能。
relay_log=file_name
设定中继日志的文件名称,默认为host_name-relay-bin。也能够应用绝对路径,以指定非数据目录来存储中继日志。作用范畴为全局级别,可用于选项文件,属非动静变量。
relay_log_index=file_name
设定中继日志的索引文件名,默认为为数据目录中的host_name-relay-bin.index。作用范畴为全局级别,可用于选项文件,属非动静变量。
relay-log-info-file=file_name
设定中继服务用于记录中继信息的文件,默认为数据目录中的relay-log.info。作用范畴为全局级别,可用于选项文件,属非动静变量。
relay_log_purge={ON|OFF}
设定对不再须要的中继日志是否主动进行清理。默认值为ON。作用范畴为全局级别,可用于选项文件,属动静变量。
relay_log_space_limit=#
设定用于存储所有中继日志文件的可用空间大小。默认为0,示意不限定。最大值取决于零碎平台位数。作用范畴为全局级别,可用于选项文件,属非动静变量。
max_relay_log_size={4096..1073741824}
设定从服务器上中继日志的体积下限,达到此限度时其会主动进行中继日志滚动。此参数值为0时,mysqld将应用max_binlog_size参数同时为二进制日志和中继日志设定日志文件体积下限。作用范畴为全局级别,可用于配置文件,属动静变量。
。
relay_log_space_limit=#
设定用于存储所有中继日志文件的可用空间大小。默认为0,示意不限定。最大值取决于零碎平台位数。作用范畴为全局级别,可用于选项文件,属非动静变量。
max_relay_log_size={4096..1073741824}
设定从服务器上中继日志的体积下限,达到此限度时其会主动进行中继日志滚动。此参数值为0时,mysqld将应用max_binlog_size参数同时为二进制日志和中继日志设定日志文件体积下限。作用范畴为全局级别,可用于配置文件,属动静变量。
对于MySQL日志,你学废了么?