1. 日志
1.1 错误日志
错误日志是 MySQL 中最重要的日志之一,它记录了当 mysqld 启动和停止时,以及服务器在运行过程中发生任何严重错误时的相关信息。当数据库出现任何故障导致无法正常使用时,建议首先查看此日志。
该日志是默认开启的,默认存放目录 /var/log/,默认的日志文件名为 mysqld.log 。查看日志位置:
#先登录mysql
mysql -uroot -p1234
#通过此系统变量查看日志文件的位置
show variables like '%log_error%';

#通过tail指令查看文件尾部的50行日志
tail -n 50 /var/log/mysqld.log

1.2 二进制日志
1.2.1 介绍
二进制日志(BINLOG)记录了所有的 DDL(数据定义语言:创建数据库…)语句和 DML(数据操纵语言:增删改)语句,但不包括数据查询(SELECT、SHOW)语句。
作用:
- ①. 灾难时的数据恢复;
- 因为二进制日志中记录了数据库、表、以及数据的变更。只需要把这里面的语句再次执行就可以恢复数据了。
- ②. MySQL的主从复制。在MySQL8版本中
- 主从复制底层原理就是基于二进制日志的,具体查看下一章。
mysql8.0版本默认二进制日志是开启着的,涉及到的参数如下:
#先登录mysql
mysql -uroot -p1234
#通过此系统变量来查看二进制日志相关的参数配置
show variables like '%log_bin%';

参数说明:
-
log_bin:on代表二进制日志是开着的。
-
log_bin_basename:最终生成的二进制日志文件就在
/var/lib/mysql目录下,文件名叫做binlog,但是日志文件有可能有很多,binlog只是它的前缀。- 当前数据库服务器的binlog日志的基础名称(前缀),具体的binlog文件名需要再该basename的基础上加上编号(编号从000001开始往上自增)。
- 第一个日志文件写满了或者日志的格式变更了之后,它会再次开启一个新的文件来写日志。
-
log_bin_index:binlog的索引文件,里面记录了当前服务器关联的binlog文件有哪些。
测试:
进入到/var/lib/mysql目录查看二进制文件到底有没有·
#不登录mysql执行
cd /var/lib/mysql
#可以看到二进制日志文件和索引文件
ll
#查看索引文件:里面就记录了当前mysql数据库关联的日志文件有哪些
cat binlog.index


1.2.2 格式
MySQL服务器中提供了多种格式来记录二进制日志,具体格式及特点如下:
| 日志格式 | 含义 |
|---|---|
| STATEMENT | 基于SQL语句的日志记录,记录的是SQL语句,对数据进行修改的SQL都会记录在日志文件中。 |
| ROW | 基于行的日志记录,记录的是每一行的数据变更。(默认) |
| MIXED | 混合了STATEMENT和ROW两种格式,默认采用STATEMENT,在某些特殊情况下会自动切换为ROW进行记录。 |
举例:如果我们执行了一条update语句,这条update语句影响的行数是5行
- STATEMENT:记录的就是这条update语句
- ROW :它记录的是update语句所影响的这五行,每一行的数据内容在变更之前怎么样,在变更之后是什么样。
#先登录mysql
mysql -uroot -p1234
#通过此系统变量,查看当前mysql的版本中默认的日志格式是那个
show variables like '%binlog_format%';

如果我们需要配置二进制日志的格式,只需要在 /etc/my.cnf 中配置 binlog_format 参数即可。
vim /etc/my.cnf
#在这个文件中添加一行内容
binlog_format=STATEMENT
#重新启动mysql服务
systemctl restart mysqld.service
cd /var/lib/mysql
#可以看到此时重新生成了一个日志文件binlog.000005,原先是1~4。
#因为它的二进制日志格式改了,他不会再往原来的二进制日志文件写入了,而是写到一个新的日志文件中。
ll


再次查看此系统变量,发现日志格式已经修改为STATEMENT
#先登录mysql
mysql -uroot -p1234
#通过此系统变量,查看当前mysql的版本中默认的日志格式是哪个
show variables like '%binlog_format%';

1.2.3 查看
由于日志是以二进制方式存储的,不能直接读取,需要通过二进制日志查询工具 mysqlbinlog 来查看,具体语法:
#logfilename:二进制文件名
mysqlbinlog [ 参数选项 ] logfilename
参数选项:
-d 指定数据库名称,只列出指定的数据库相关操作。
-o 忽略掉日志中的前n行命令。
-v 将行事件(数据变更)重构为SQL语句
-vv 将行事件(数据变更)重构为SQL语句,并输出注释信息
测试:接下来呢我们就来设置一下这两种日志格式,来看一下它们之间的区别是什么样子的。
情况1:当前的日志格式是row
第一步:以db01数据库下的stu表为例进行演示。
客户端1:就是登录进mysql执行的命令
mysql -uroot -p1234
#当前的日志格式是row
show variables like '%binlog_format%';
use db01;
#查看db01数据库下面有哪些表
show tables;
#查看stu表下面有哪些数据
select * from stu;

第

本文围绕MySQL展开,介绍了错误、二进制、查询、慢查询等日志的相关知识,包括日志的开启、查看、删除等操作。同时详细阐述了主从复制的概念、原理、搭建步骤及测试方法,通过主从复制可实现数据同步、读写分离等功能,提升数据库性能和可用性。
864

被折叠的 条评论
为什么被折叠?



