共计 5787 个字符,预计需要花费 15 分钟才能阅读完成。
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 日志,你学废了么?