欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

MySQL使用日志备份和恢复数据

程序员文章站 2022-05-29 21:25:47
...

MySQL中日志主要分为三类:

  • 二进制日志:以二进制文件的形式记录数据库中所有更改数据的语句。
  • 错误日志:记录MySQL服务的启动、运行或停止MySQL服务时出现的问题。
  • 查询日志:又分为通用查询日志和慢查询日志。其中通用查询日志记录建立的客户端连接和记录查询的信息;慢查询日志记录所有执行时间超过long_query_time的所有查询或不使用索引的查询。

二进制日志

二进制日志记录了所有的DDL语句和DML语句对数据的更改操作。语句以“事件”的形式保存,它描述了数据的更改过程。二进制日志时基于时间点的恢复,对于数据灾难时的数据恢复起着极其重要的作用。
二进制文件主要包括如下两类文件。

  • 二进制日志索引文件:用于记录所有的二进制文件,文件后缀为.index。
  • 二进制日志文件:用于记录数据库所有的DDL语句和DML(除了select操作)语句的事件,文件后缀名为.00000n,n是从1开始的自然数。

1.启动和设置二进制日志

  • 默认情况下。二进制日志是关闭的,可以通过修改MySQL的配置文件my.ini来设置和启动二进制日志。
show variables like "%char%";  在MySQL中输入这个就可以看到文件运行的地址

在配置文件my.ini中与二进制日志相关的参数在[mysqld]组中设置,主要参数如下。

[mysqld]
log-bin[=path/[filename]]
expire_logs_days=10
max_binlog_size=100M
  • log-bin:用于开启二进制日志;path表明日志文件所在的物理路径,在目录的文件夹命名中不能有空格,否则在访问日志时会报错。filename则指定了日志文件的名称,如文件的命名为filename.000001等,另外还有一个名称为filename.index的文件,文件内容为所有日志的清单,该文件为文本文件。
  • expire_logs_days:用来定义MySQL清除过期日志的时间,即二进制日志自动删除的天数。默认值为0,表示没有自动删除。
  • max_binlog_size:表示定义了单个日志文件的大小限制,如果二进制日志写入的内容大下超出给定值,日志就会发生滚动(关闭当前文件,重新打开一个新的日志文件)。不能将改变量设置大于1GB或小于4KB。默认值时1GB。
  • 设置完成需要重启MySQL服务才会生效。
  • 可以通过 show variables 语句来查询日志设置。

从二进制日志中恢复数据

mysqlbinlog [option] filename |mysql -uuser -ppassword

其中filename为二进制日志文件名,option为可选参数,说明如下:

  • –start-date:恢复数据操作的起始时间点。
  • –stop-date:恢复数据操作的结束时间点。
  • –start-position:恢复数据操作的起始偏移位置。
  • –stop-position:恢复数据操作的结束偏移位置
    举例
    使用mysqlbinlog恢复MySQL数据库到2017年10月24日09:57:00时的状态。
    (1)首先,在存放二进制文件的目录下找到2017年10月24日09:57:00这个时间点的日志文件对应为logbin.000004。
    (2)在终端,将二进制文件所在的目录设置为当前目录。
    (3)在MySQL终端输入以下命令:
mysqlbinlog --start-data="2017-10-24 09:57:00" "C:\Program Files\logbin.000004" |mysql -uroot -p123456

现在就已经恢复完成了
举例
使用mysqlbinlog恢复logbin.000001文件中偏移位置从179至288之间的所有操作恢复。

mysqlbinlog --start-position=179 --stop-position=309 --databases=bank logbin.000001 | mysql -uroot -p123456

bank是数据库名

删除二进制日志

二进制日志文件记录用户对数据库的修改操作,随着时间的推移,该文件会不断的增长,势必会影响数据库服务器的性能,对于过期的二进制日志应当及时删除。MySQL的二进制日志文件可以配置为自动删除,也可以采用安全的手动删除方法。
(1)使用reset master 语句删除所有二进制日志文件:

RESET MASTER

执行该语句后,当前数据库服务器下所有的二进制日志文件将被删除,MySQL会重新创建二进制文件,日志文件扩展名的编号重新从000001开始。
(2)使用purge master logs 语句删除指定日志文件有两种方法:

PURGE {MASTER|BINARY} LOGS TO 'log_name';PURGE {MASTER|BINARY} LOGS BEFORE 'data'

其中MASTER和BINARY等效,第一种方法是指定文件名,执行该命令将删除文件名编号比指定文件名编号小的所有日志。第二张是指定日期,执行该命令将删除指定日期以前的所有日志。

错误日志

1.启动和设置错误日志
默认情况下,MySQL会开启错误日志,用于记录MySQL服务器运行过程中发生的错误相关信息。错误日志文件默认放在MySQL服务器的data目录下,文件名默认为主机名.err.
在my.ini中配置

[mysqld]
log-error=[path/[file_name]]

path为日志所在的目录路径,file_name为日志文件名,修改后重启即可
2.查看错误日志

show variables like 'log_error';

返回错误日志名和路径
3.删除错误日志重新加载

mysql>flush logs;
或
C:\mysqladmin -uroot -p123456 flush logs;
相关标签: 笔记 mysql