数据库原理与应用 第 10 章 · 第五节
课程 › 第 10 章 › 第五节 四种日志错误日志二进制日志删除二进制日志用日志还原 版式
第 10 章 数据库备份还原和日志管理 · 第五节

错误日志与二进制日志

四种日志的作用,错误日志和二进制日志的查看与删除,用二进制日志还原数据
本 节 知 识 点
  1. 17MySQL 的四种日志
  2. 18错误日志
  3. 19二进制日志的设置与查看
  4. 20删除二进制日志(例 10-16、例 10-17)
  5. 21用二进制日志还原数据(例 10-18)
17
第 10 章 · 第五节 · 课件第 33、34、35 页合并重做

MySQL 的四种日志

日志记录数据库运行期间发生的事情。

10.6 MySQL 日志管理课件第 33、34、35 页合并

MySQL 的四种日志

日志文件记录 MySQL 运行期间发生的变化,包括客户端的连接、SQL 语句的执行情况和错误信息等。
日志记录的内容作用8.0 默认
错误日志服务启动、停止和运行中出现的错误、警告查找服务不能启动、意外停止的原因打开,不能关闭
二进制日志修改数据和表结构的语句,不记 SELECT结合备份还原数据打开
通用查询日志客户端的连接和执行的全部语句查看用户做过哪些操作关闭
慢查询日志执行时间超过 long_query_time 的查询找出需要优化的查询关闭
MySQL 8.0 默认已经打开二进制日志,my.ini 中的 log-bin 只用来指定文件名。

试一试遇到这件事,看哪一种日志

遇到
日志记录的内容

重 点

二进制日志只记修改数据的语句。SELECT 不修改数据,不记。

18
第 10 章 · 第五节 · 课件第 36、37、38 页合并重做

错误日志

错误日志是文本文件,一直打开,不能关闭。

10.6 MySQL 日志管理课件第 36、37、38 页合并

错误日志

设置和查看
SHOW VARIABLES LIKE 'log_error';
  • my.ini 中的 log-error 指定路径和文件名,默认是数据目录中的 主机名.err,修改后重启服务才生效
  • log_error_verbosity:1 只记错误,2 再记警告,3 再记提示信息
  • 错误日志是文本文件,可以用记事本打开。MySQL 8.0 还可以查询 performance_schema.error_log 表
新建错误日志
mysqladmin -u root -p flush-logs
  • 服务器关闭错误日志,再重新打开
  • 要保留旧的内容,先把旧文件改名,再执行这条命令,服务器会建一个新文件
  • 在 Workbench 中执行 FLUSH ERROR LOGS 效果相同
MySQL 8.0 中控制错误日志详细程度的是 log_error_verbosity。执行 flush-logs 后旧文件不会自动改名,要保留就先手动改名。

重 点

服务不能启动时,先打开错误日志,看最后几行。

实 验

实验 3-1 查看错误日志

19
第 10 章 · 第五节 · 课件第 39、40 页合并重做

二进制日志的设置与查看

二进制日志默认打开,记录全部修改数据的操作。

10.6 MySQL 日志管理课件第 39、40 页合并

二进制日志的设置与查看

my.ini 中的设置
log-bin="DESKTOP-TKC62RP-bin"
binlog_expire_logs_seconds=2592000
max_binlog_size=100M
  • log-bin:文件的路径和名称,后面自动加编号 .000001、.000002 …
  • binlog_expire_logs_seconds:多少秒后自动删除,默认 30 天
  • max_binlog_size:单个文件的大小上限,超过后换一个新文件
查看
SHOW VARIABLES LIKE 'log_bin';
SHOW BINARY LOGS;
SHOW MASTER STATUS;
SHOW BINLOG EVENTS IN '文件名';
  • SHOW BINARY LOGS 列出全部日志文件
  • SHOW MASTER STATUS 显示正在写的文件
  • SHOW BINLOG EVENTS 列出文件中的事件
  • 文件是二进制格式,记事本打不开,要用 mysqlbinlog 转成文本

log_bin 是只读变量,SET GLOBAL 不能打开或关闭二进制日志,要修改 my.ini 后重启服务。MySQL 8.4 中 SHOW MASTER STATUS 改为 SHOW BINARY LOG STATUS。

重 点

执行一次 FLUSH LOGS 或重启一次服务,就换一个新的日志文件,编号加 1。

实 验

实验 3-2 查看二进制日志的状态

实 验

实验 3-4 查看二进制日志的内容

20
第 10 章 · 第五节 · 课件第 41、42 页合并重做

删除二进制日志(例 10-16、例 10-17)

用 PURGE 删除旧的日志,不要直接删除文件。

10.6 MySQL 日志管理课件第 41、42 页合并

删除二进制日志(例 10-16、例 10-17)

PURGE {BINARY | MASTER} LOGS {TO '文件名' | BEFORE '日期时间'}
PURGE MASTER LOGS TO
  'DESKTOP-TKC62RP-bin.000004';
PURGE MASTER LOGS BEFORE
  '2021-03-04 11:30:00';
RESET MASTER;
  • 正在写的文件不会被删除
  • 不要在文件夹中直接删除日志文件,日志索引与文件对不上,MySQL 会出错
写法删除哪些日志
TO '文件名'编号比它小的,它本身保留(例 10-16)
BEFORE '日期时间'这个时间以前生成的(例 10-17)
RESET MASTER全部删除,新文件从 000001 开始
21
第 10 章 · 第五节 · 课件第 43、44 页合并重做

用二进制日志还原数据(例 10-18)

先还原备份,再重放备份以后的日志。

10.6 MySQL 日志管理课件第 43、44 页合并

用二进制日志还原数据(例 10-18)

mysqlbinlog [选项] 日志文件名 | mysql -u root -p
选项含义
--start-datetime --stop-datetime从哪个时间开始,到哪个时间停止
--start-position --stop-position从哪个位置开始,到哪个位置停止,位置是事件的 Pos
-R通过服务器读取日志,只写文件名,不用管文件在哪个文件夹
例 10-18 后两行在命令提示符中写成一行
cd /d "C:\ProgramData\MySQL\MySQL Server 8.0\Data"
mysqlbinlog --stop-datetime="2021-03-10 10:00:00"
  DESKTOP-TKC62RP-bin.000005 | mysql -u root -p
  • 先用完整备份还原,再重放备份以后的日志,停在误操作之前
  • 有多个日志文件时,按编号从小到大依次重放
选项 --stop-datetime 前面是两个横杠。路径中有空格,要用英文双引号括起来。

试一试早上备份,下午误删

还原方法
    还原以后结果

    实 验

    实验 3-5 备份后误删了一张表

    实 验

    实验 3-6 用备份和日志还原

    保山学院·人工智能教研室·曹鼎鼎