MySQL日志类型
错误日志
记录的信息类型:
1、服务器启动和关闭过程中的信息
2、服务器运行过程中的错误信息
3、事件调度器运行一个时间是产生的信息
4、在从服务器上启动从服务器进程是产生的信息
开启二进制日志:log-error[=file_name]
[root@localhost ~]# vim /etc/my.cnf
log-error
[root@localhost ~]# systemctl restart mysqld
日志文件的位置定义:
可以用log-error[=file_name]选项来指定mysqld保存错误日志文件的位置
查看当前错误日志配置
mysql> SHOW GLOBAL VARIABLES LIKE '%log_error%';
是否记录警告日志
mysql> SHOW GLOBAL VARIABLES LIKE '%log_warnings%';
查询所有日志
mysql> SHOW GLOBAL VARIABLES LIKE '%log%';
mysql> SHOW GLOBAL VARIABLES LIKE '%log_error%';
+---------------------+---------------------+
| Variable_name | Value |
+---------------------+---------------------+
| binlog_error_action | ABORT_SERVER |
| log_error | /var/log/mysqld.log |
| log_error_verbosity | 3 |
+---------------------+---------------------+
[root@localhost ~]# vim /etc/my.cnf
#log-error=/var/log/mysqld.log
log-error
[root@localhost ~]# systemctl restart mysqld
mysql> SHOW GLOBAL VARIABLES LIKE '%log_error%';
+---------------------+----------------------------+
| Variable_name | Value |
+---------------------+----------------------------+
| binlog_error_action | ABORT_SERVER |
| log_error | /var/run/mysqld/mysqld.err | 错误日志存储文件
| log_error_verbosity | 3 |
+---------------------+----------------------------+
[root@localhost ~]# vim /etc/my.cnf
log-error=no1.log
[root@localhost ~]# systemctl restart mysqld
mysql> SHOW GLOBAL VARIABLES LIKE '%log_error%';
+---------------------+--------------+
| Variable_name | Value |
+---------------------+--------------+
| binlog_error_action | ABORT_SERVER |
| log_error | ./no1.log |
| log_error_verbosity | 3 |
+---------------------+--------------+
查询日志
记录的信息类型
建立的客户端连接和执行的语句
日志文件变量:general_log_file[=/PATH/TO/file]
全局日志开关:log={ON|OFF} 该开关打开后,所有日志都会被启用
记录类型:log_output={TABLE|FILE|NONE}:
因此,要启用通用查询日志,需要至少配置general_log=ON,log_output={TABLE|FILE}。
而 general_log_file如果没有指定,默认名是host_name.log。
开启查询日志:general_log={ON|OFF}
临时开启
mysql> set global general_log =on/1;
永久开启
[root@localhost ~]# vim /etc/my.cnf
general_log=ON
[root@localhost ~]# systemctl restart mysqld
查询日志相关变量:
mysql> SHOW GLOBAL VARIABLES LIKE '%general_log%';
+------------------+------------------------------+
| Variable_name | Value |
+------------------+------------------------------+
| general_log | ON |
| general_log_file | /var/lib/mysql/localhost.log | 查询日志存储位置
+------------------+------------------------------+
慢日志
记录的信息类型
所有执行时间超过long_query_time秒的所有查询或不适用索引的查询;
long_query_time 默认10秒,如果查询时长超过long_query_time的定义值(默认10秒),即为慢查询
开启慢日志:GLOBAL slow_query_log=ON; 默认没有启用慢查询,为了服务器调优,建议开启
临时开启
mysql> SET GLOBAL slow_query_log=ON;
永久开启
[root@localhost ~]# vim /etc/my.cnf
GLOBAL slow_query_log=ON
[root@localhost ~]# systemctl restart mysqld
查看码查询定义的时间值:
mysql> SHOW GLOBAL VARIABLES LIKE 'long_query_time';
+-----------------+-----------+
| Variable_name | Value |
+-----------------+-----------+
| long_query_time | 10.000000 |
+-----------------+-----------+
1 row in set (0.00 sec)
慢查询日志相关变量:
mysql> SHOW GLOBAL VARIABLES LIKE '%slow_query_log%';
+---------------------+-----------------------------------+
| Variable_name | Value |
+---------------------+-----------------------------------+
| slow_query_log | ON |
| slow_query_log_file | /var/lib/mysql/localhost-slow.log | 慢查询日志存储位置
+---------------------+-----------------------------------+
2 rows in set (0.00 sec)
二进制日志
记录的信息类型:
所有更改数据的语句,主要用于复制和即时点恢复
目的是在数据库存在故障时,恢复时能够最大可能地更新数据库(即时点恢复),因为二进 制日志包含备份后进行的所有更新。
二进制日志还用于在主复制服务器上记录所有将发送给从服务器的语句。
开启二进制日志:log-bin [= file_name]
[root@localhost ~]# vim /etc/my.cnf
log_bin
server_id=128
[root@localhost ~]# systemctl restart mysqld
mysql> SHOW GLOBAL VARIABLES LIKE '%log_bin%';
+---------------------------------+------------------------------------+
| Variable_name | Value |
+---------------------------------+------------------------------------+
| log_bin | ON |
| log_bin_basename | /var/lib/mysql/localhost-bin |
| log_bin_index | /var/lib/mysql/localhost-bin.index | 二进制日志存储位置
| log_bin_trust_function_creators | OFF |
| log_bin_use_v1_row_events | OFF |
+---------------------------------+------------------------------------+
二进制日志的管理
日志滚动
1、在my.cnf
中设定max_binlog_size = 200M
,表示限制二进制日志最大尺寸为200M,超过200M后进行滚动。
2、MySQL滚动时会创建一个新的编号大1的日志用于记录最新的日志,而原日志名字不会改变。
3、每次重启MySQL服务,日志都会自动滚动一次。
4、手动滚动,使用命令 mysql> FLUSH LOGS;
日志查看
查看有哪些二进制日志文件:mysql> SHOW BINARY LOGS;
查看当前正在使用的是哪一个二进制日志文件:mysql> SHOW MASTER STATUS;
查看二进制日志内容:mysql> SHOW BINLOG EVENTS IN 'mysqld-binlog.000002';
使用命令mysqlbinlog查看二进制日志内容:mysqlbinlog [options] log-files;
日志还原数据
使用mysqlbinlog读取需要的日志内容,重定向到一个sql文件,然后在mysql服务器上导入
例如:[root@localhost mysql]# mysqlbinlog mysqld-binlog.000002 >/root/temp_date.sql
删除日志文件
1、不能直接删除,若使用rm
删除可能会导致数据库崩溃
2、使用PURGE
删除日志:PURGE { BINARY | MASTER } LOGS { TO 'log_name' | BEFORE datetime_expr }
,
用purge master logs to ‘filename.******’ 命令可以删除指定编号前的所有日志
3、使用reset master
命令删除所有日志,新日志重新从000001开始编号
mysql> flush logs;
mysql> show binary logs;
+------------------+-----------+
| Log_name | File_size |
+------------------+-----------+
| mysql-bin.000001 | 201 |
| mysql-bin.000002 | 201 |
| mysql-bin.000003 | 201 |
| mysql-bin.000004 | 154 |
+------------------+-----------+
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000004 | 154 | | | |
+------------------+----------+--------------+------------------+-------------------+
mysql> purge master logs to 'mysql-bin.000003';
事务日志
记录的信息类型:InnDB等支持事务的存储引擎执行事务时产生的日志。