本章内容:
- 查询日志
- 慢查询日志 ***
- 错误日志
- 二进制日志 *****
- 中继日志
- 事务日志 ****
mariadb 日志文件默认路径:/var/lib/mysql
查询日志
- 数据库的查询日志记录了每一条sql语句;
- 访问量较大时建议不开启,因为设想一下如果同时又几百万个用户同时访问数据库,查询日志的记录就会占用大量的系统开销,直接影响服务器性能;
开启方式
vim /etc/my.cnf.d/server.cnf
general_log = ON| OFF #查询日志开关
general_log_file localhost.log #查询日志的文件名字(/var/lib/mysql)
log_output TABLE | FILE | NONE #查询日志的存储形式
慢查询日志* * * *
- 它用来记录在mariadb中响应时间超过阀值的语句。具体指运行时间超过long_query_time值的SQL语句,则会被记录到慢查询日志中。
- 慢查询日志是做数据优化可查的分析项
slow_query_log = OFF|ON #开启慢查询日志
slow_query_log_file = LOCALHOST-SLOW.log #慢查询日志的文件路径
long_query_time #慢查询时长;默认是10s
log_slow_rate_limit #如果要记录的慢查询日志非常多的话,会按照速率来记录,默认1秒记录一个
log_slow_verbosity=full | query_plan #记录的详细级别
第一步:查看默认设置
MariaDB [mysql]> show variables like '%slow_query%';
+---------------------+--------------------+
| Variable_name | Value |
+---------------------+--------------------+
| slow_query_log | OFF |
| slow_query_log_file | localhost-slow.log |
+---------------------+--------------------+
查看默认等待时长
MariaDB [(none)]> show variables like 'long_query_time';
+-----------------+-----------+
| Variable_name | Value |
+-----------------+-----------+
| long_query_time | 10.000000 |
+-----------------+-----------+
第二步:编辑配置文件开启慢查询日志
╭─root@localhost.localdomain ~
╰─➤ vim /etc/my.cnf.d/server.cnf
[server]
slow_query_log=1
long_query_time=3
第三步:可以用测试命令:select sleep(4)
错误日志
- 错误日志包含了mariadb 启动和关闭的次数.
- 包含了错误,警告,和注释的相关诊断信息.
- mariadb 在运行时,如果你的mariadb 中的表需要自动检查或者修复.这些信息都会写入到error log 里面.
- 在主从复制架构中的从服务器上启动从服务器线程时产生的信息
- event scheduler 运行一个event时产生的日志信息
log_error = /var/log/mysql_error.log#指定错误日志的输出位置
log_warnings 为0, 表示不记录告警信息。
log_warnings 为1, 表示告警信息写入错误日志。
log_warnings 大于1, 表示各类告警信息,例如有关网络故障的信息和重新连接信息写入错误日志。(默认为2)
MariaDB [mysql]> show variables like '%log_warning%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_warnings | 2 |
+---------------+-------+
二进制日志* * * * *
- 二进制日志:记录着所有更改数据的语句,可以用于数据的恢复,并且是针对时间点还原
- 二进制日志:是在数据库中起着至关重要的作用(主从架构,数据备份,数据恢复等)
log_bin = OFF | ON
log_bin_basename = /var/lib/mysql/mysql-bin
sql_log_bin=1|0 #是否启用二进制日志
log_bin_index=PATH #二进制日志索引位置
sync_binlog=1|0 #设定是否启动二进制日志同步功能
max_binlog_size=SIZE #单个二进制文件最大体积,默认为1G
expire_logs_days=0 #超过多少天就清除二进制日志,默认为0,代表不启用此功能
binlog_format=STATEMENT|ROW|MIXED
#二进制记录格式(STATEMENT:基于“语句”记录; ROW:基于“行”记录 ;MIXED:让系统自行判定该基于哪种方式进行)
开启二进制日志
╭─root@localhost.localdomain ~
╰─➤ vim /etc/my.cnf.d/server.cnf
[server]
log_bin=mysql-bin
二进制日志文件内容查询
用数据库自带的日志查看工具mysqlbinlog
╭─root@localhost.localdomain /var/lib/mysql
╰─➤ mysqlbinlog mysql-bin.000001
查看position(数据的位置)
#手动滚动二进制日志文件
MariaDB [mysql]> flush logs;
Query OK, 0 rows affected (0.006 sec)
#查看所有二进制日志文件
MariaDB [mysql]> show master logs;
+------------------+-----------+
| Log_name | File_size |
+------------------+-----------+
| mysql-bin.000001 | 375 |
| mysql-bin.000002 | 371 |
+------------------+-----------+
#查看当前位置
MariaDB [mysql]> show master status;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000002 | 371 | | |
+------------------+----------+--------------+------------------+
二进制日志文件滚动
- flush logs;
- 文件超出指定大小
- service mariadb restart
客户端命令工具:mysqlbinlog
通过二进制日志恢复还原数据库文件
mysqlbinlog [options] log_file ...
--start-datetime=
--stop-datetime=
--start-position=
--stop-position=
中继日志
中继日志:复制架构中,备服务器用于保存主服务器的二进制日志中读取到的事件
事务日志* * * *
InnoDB的事务日志主要分为redo log(重做日志,提供前滚操作)和undo log(回滚日志,提供回滚操作),为了最大程度上减少数据写入时io问题,在存储引擎修改表的数据时,会将数据从磁盘拷贝到内存中,然后修改内存中的数据拷贝,再将修改行为持久化到磁盘中(先写redo log buffer(日志缓冲区)(PS:这块我会在下文详细说明),再定期批量写入),而不用每次将修改的数据本身持久化到硬盘中.
事务日志参数
innodb_buffer_pool_size 一般设置成为物理内存的3/4,或者4/5
innodb_log_files_in_group = 2 事务日志文件的个数,默认为2个事务日志文件
innodb_log_file_size = 50331648(48m) 事务日志文件的单个大小48m
innodb_log_group_home_dir = ./ 事务日志文件的所在路径,默认mariadb的数据目录/var/lib/mysql
查看
MariaDB [mysql]> show variables like '%innodb_log%';
+-----------------------------+----------+
| Variable_name | Value |
+-----------------------------+----------+
| innodb_log_buffer_size | 16777216 |
| innodb_log_checksums | ON |
| innodb_log_compressed_pages | ON |
| innodb_log_file_size | 50331648 |
| innodb_log_files_in_group | 2 |
| innodb_log_group_home_dir | ./ |
| innodb_log_optimize_ddl | ON |
| innodb_log_write_ahead_size | 8192 |
+-----------------------------+----------+
8 rows in set (0.002 sec)
# -- 缓冲池(buffer_pool)大小非常重要
MariaDB [mysql]> show variables like '%innodb_buffer_pool_size%';
+-------------------------+-----------+
| Variable_name | Value |
+-------------------------+-----------+
| innodb_buffer_pool_size | 134217728 |
+-------------------------+-----------+
1 row in set (0.001 sec)
事务日志推荐文章:https://www.cnblogs.com/f-ck-need-u/archive/2018/05/08/9010872.html