MySQL—日志的操作管理
Posted 清晨丶暖阳
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL—日志的操作管理相关的知识,希望对你有一定的参考价值。
一、日志种类
- **错误日志:**记录启动、运行或停止时出现的问题,一般也会记录警告信息。
- **一般查询日志:**记录建立的客户端连接和执行的语句。
- **慢查询日志:**记录所有执行时间超过long_query_time秒的所有查询或不使用索引的查询,可以帮我们定位服务器性能问题。
- 二进制日志:任何引起或可能引起数据库变化的操作,主要用于复制和即时点恢复。
- **中继日志:**从主服务器的二进制日志文件中复制而来的事件,并保存为的日志文件。
- **事务日志:**记录InnoDB等支持事务的存储引擎执行事务时产生的日志。
如何查看日志?
### 查看MySQL中的所有日志
show global variables like '%log%';
二、日志功能
1、错误日志
①. 服务器启动和关闭过程中的信息
②. 服务器运行过程中的错误信息
③. 事件调度器运行一个事件时产生的信息
④. 在从服务器上启动从服务器进程时产生的信息
错误日志定义:修改配置文件:my.cnf。 可以用"log-error [ = file_name ]”选项来指定mysqld保存错误日志文件的位置。如果没有给定file_name值,mysqld使用错误日志名host_name.err 并在数据目录中写入日志文件。如果你执行FLUSH LOGS,错误日志用-old重新命名后缀并且mysqld创建一个新的空日志文件。(这部分我也不知道怎么用)(如果未给出“log-error”选项,则不会重新命名)。
配置文件中定义后,会显示日志的存储位置。
2、一般查询日志
### 开启一般日志
set global general_log=1
show global variables like 'general_log';
启动开关:general_log={ON|OFF}。
日志文件变量:general_log_file [ =/PATH/TO/file]。
全局日志开关:log={ON|OFF} 该开关打开后,所有日志都会被启用。
记录类型:log_output={TABLE|FILE|NONE} log_output定义了日志的输出格式,可以是表,文件,若设置为NONE,则不启用日志,因此,要启用通用查询日志,需要至少配置general_log=ON,log_output={TABLE|FILE}。而general_log_file如果没有指定,默认名是host_name.log。由于一般查询使用量比较大,启用写入日志文件,服务器的I/O操作较多,会大大降低服务器的性能,所以默认为关闭的。
3、慢查询日志
show global variables like '%slow_query_log%';
查询超时时间:long_query_time
启动慢查日志:log_slow_queries={YES|NO}。
启动慢查日志 : slow_query_log
日志记录文件:slow_query_log_file [= file_name ]
MySQL如果启用了slow_query_log=ON选项,就会记录执行时间超过long_query_time的查询(初使表锁定的时间不算作执行时间)。日志记录文件如果没有给出file_name值, 默认为主机名,后缀为-slow.log。如果给出了文件名,但不是绝对路径名,文件则写入数据目录。
查询慢日志超时时间
3、二进制日志
修改配置文件:/etc/my.cnf,添加下行指定二进制文件.
二进制日志启动开关:log-bin [= file_name]
二进制日志用于记录所有更改数据的语句,主要用于复制和即时点恢复。二进制日志的主要目的是在数据库存在故障时,恢复时能够最大可能地更新数据库(即时点恢复),因为二进制日志包含备份后进行的所有更新,二进制日志还用于在主复制服务器上记录所有将发送给从服务器的语句。
vim /etc/my.cnf
# 二进制日志
log_bin=mysql-bin
binlog_format=MIXED
server-id=1
# 然后重启MySQL服务
systemctl restart mysqld
## 用于生成新的备份日志文件:这不过是为了增量备份而生成二进制文件.
mysqladmin -u root -p flush-logs
## 对数据库进行过的表增删改查都会记录在此二进制文件内
## 将二进制文件单独移出
cp ...../mysql-bin.0000x /opt/
### 查看二进制文件的方式
mysqlbinlog --no-defaults --base64-output=decode-rows -v /opt/mysql-bin.0000x
### 基于位置进行恢复
##指定的 at xxx 之前的数据进行恢复
mysqlbinlog --no-defaults --stop-position='xxx' /opt/mysql-bin.00000x | mysql -uroot -p
##指定的 at xxx 之后,包括xxx 的数据进行恢复
mysqlbinlog --no-defaults --start-position='xxx' /opt/mysql-bin.00000x | mysql -uroot -p
日志的滚动:
MySQL的滚动方式与其他日志不太一样,滚动时会创建一个新的编号大1的日志用于记录最新的日志,而原日志名字不会被改变。每次重启MySQL服务,日志都会自动滚动一次。
另外如果需要手动滚动,则使用命令
flush logs;#手动回滚
show master status; #查看当前正在使用的二进制文件
show binary logs; #查看所有的二进制文件
4、事务日志
事务性存储引擎用于保证(ACID)原子性、一致性、隔离性和持久性;其不会立即写到数据文件中,而是写到事务日志中。
innodb_flush_log_at_trx_commit:
0: 每秒同步,并执行磁盘flush操作;
1:每事务同步,并执行磁盘flush操作;
2: 每事务同步,但不执行磁盘flush操作;
show global variables like 'innodb_flush_log_at_trx_commit';
以上是关于MySQL—日志的操作管理的主要内容,如果未能解决你的问题,请参考以下文章