Mysql中二进制日志操作方法说明

 更新时间:2023年03月17日 10:29:15   作者:跟着飞哥学编程  
这篇文章主要介绍了Mysql中二进制日志操作方法,二进制日志中以“事件”的形式记录了数据库中数据的变化情况,对于MySQL数据库的灾难恢复起着重要的作用

二进制日志

二进制日志中以“事件”的形式记录了数据库中数据的变化情况,对于MySQL数据库的灾难恢复起着重要的作用。

开启二进制日志

可以在 my.cnf 文件或者 my.ini 文件中进行如下配置来开启二进制日志。

[mysqld]
log_bin = /data/mysql/log/bin_log/mysql-bin
binlog_format= mixed
binlog_cache_size=32m
max_binlog_cache_size=64m
max_binlog_size=512m
expire_logs_days = 10

各项配置说明如下:

log_bin:表示开启二进制日志。如果没有为此项赋值,则 MySQL 会在 DATADIR 选项指定的目录(MySQL的数据存放目录)下创建二进制文件。

binlog_format:二进制文件的格式。取值可以是STATEMENTROWMIXED

STATEMENT

记录SQL语句。日志文件小,节约IO,但是对一些系统函数不能准确复制或不能复制,如now()、uuid()等

ROW

记录表的行更改情况,可以为数据库的恢复、复制带来更好的可靠性,但是二进制文件的大小相较于STATEMENT会有所增加

MIXED

STATEMENT和ROW模式的混合。默认采用STATEMENT格式进行二进制日志文件的记录,但是在一些情况下会使用ROW格式。

业内目前推荐使用的是 ROW 模式,准确性高,虽然说文件大,但是现在有SSD和万兆光纤网络,这些磁盘IO和网络IO都是可以接受的。

  • binlog_cache_size:二进制日志的缓存大小。
  • max_binlog_cache_size:二进制日志的最大缓存大小。
  • max_binlog_size:单个二进制日志文件的最大大小,当文件大小超过此选项配置的值时,会发生日志滚动,重新生成一个新的二进制文件。
  • expire_logs_days:二进制日志的过期时间。如果配置了此选项,则 MySQL 会自动清理过期的二进制日志。此选项的默认值为 0 ,表示 MySQL 不会清理过期日志。

配置完成后,重启 MySQL 才能使配置生效。此时,会在 /data/mysql/log/bin_log 目录下生成 MySQL 的二进制文件。

重启之后,可以看到我们配置的二进制日志的相关信息。

show variables like '%log_bin%';

±--------------------------------±-----------------------------------------+

| Variable_name | Value |

±--------------------------------±-----------------------------------------+

| log_bin | ON |

| log_bin_basename | D:\mysql-8.0.28-winx64\data\binlog |

| log_bin_index | D:\mysql-8.0.28-winx64\data\binlog.index |

| log_bin_trust_function_creators | ON |

| log_bin_use_v1_row_events | OFF |

| sql_log_bin | ON |

±--------------------------------±-----------------------------------------+

6 rows in set

查看二进制日志

二进制日志文件不能以纯文本文件的形式来查看,可以使用 MySQL 的 mysqlbinlog 命令进行查看。接下来简单介绍一下查看 MySQL 二进制日志的步骤。

注:我提前创建的测试表

CREATE TABLE `test1` (
  `id` int NOT NULL,
  `name` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;

(1)向 test1 表中插入两条测试数据。

INSERT INTO test1 (id,name) VALUES(5,"赵山河");
INSERT INTO test1 (id,name) VALUES(6,"跟着学编程");

(2)使用 mysqlbinlog 命令查看二进制日志

mysqlbinlog --no-defaults /data/mysql/log/bin_log/mysql-bin.000001

二进制日志中记录了向 test1 数据表中插入数据的 SQL 语句。

注意:查看 /data/mysql/log/bin_log 目录下生成的 MySQL 二进制文件时,发现有一个 mysql-bin.index 文件,这个文件不记录二进制内容,其中记录的是当前目录下存在的所有二进制文件的完整路径。可以以纯文本文件的形式来查看 mysql-bin.index 文件。

cat /data/mysql/log/bin_log/mysql-bin.index

删除二进制日志

MySQL中除了通过配置二进制日志的过期时间,由 MySQL 自动删除过期的二进制日志外,还提供了3种安全的手动删除二进制日志的方法。

在正式介绍手动删除 MySQL 二进制日志的方法之前,先对 MySQL 进行多次重启操作,使 MySQL 能够生成多个二进制日志文件,以便进行删除测试。

多次重启MySQL后,再次查看 /data/mysql/log/bin_log 目录下的文件。

1.根据编号删除二进制日志

根据编号删除二进制日志,语法格式如下:

PURGE { BINARY | MASTER } LOGS TO 'log_name'

在MySQL命令行执行此语法格式的SQL语句,会删除比指定文件名编号小的所有二进制日志文件。例如,删除比mysql-bin.000003文件编号小的所有二进制日志文件。

mysql> PURGE MASTER LOGS TO 'mysql-bin.000003';
Query OK, 0 rows affected (0.01 sec)

SQL语句执行成功,查看/data/mysql/log/bin_log目录下的文件。

[root@binghe150 ~]# ll /data/mysql/log/bin_log
total 36
-rw-r----- 1 mysql mysql 178 Jan 17 16:20 mysql-bin.000003
-rw-r----- 1 mysql mysql 178 Jan 17 16:20 mysql-bin.000004
-rw-r----- 1 mysql mysql 178 Jan 17 16:20 mysql-bin.000005
-rw-r----- 1 mysql mysql 178 Jan 17 16:20 mysql-bin.000006
-rw-r----- 1 mysql mysql 178 Jan 17 16:21 mysql-bin.000007
-rw-r----- 1 mysql mysql 178 Jan 17 16:21 mysql-bin.000008
-rw-r----- 1 mysql mysql 178 Jan 17 16:21 mysql-bin.000009
-rw-r----- 1 mysql mysql 155 Jan 17 16:21 mysql-bin.000010
-rw-r----- 1 mysql mysql 328 Jan 17 16:29 mysql-bin.index

发现mysql-bin.000001文件和mysql-bin.000002文件被删除了。说明根据编号删除二进制日志时,只会删除比当前指定的文件编号小的二进制日志文件,不会删除当前指定的二进制日志文件。

2.根据时间删除二进制日志

根据时间删除二进制日志,语法格式如下:

PURGE { BINARY | MASTER } LOGS BEFORE datetime_expr

执行此语法格式的SQL语句时,MySQL会删除指定时间以前的二进制日志。

例如,删除“2020-01-17 16:21:00”之前的二进制日志文件。

mysql> PURGE MASTER LOGS BEFORE '2020-01-17 16:21:00';
Query OK, 0 rows affected (0.00 sec)

SQL语句执行成功,查看/data/mysql/log/bin_log目录下的文件。

[root@binghe150 ~]# ll /data/mysql/log/bin_log
total 20
-rw-r----- 1 mysql mysql 178 Jan 17 16:21 mysql-bin.000007
-rw-r----- 1 mysql mysql 178 Jan 17 16:21 mysql-bin.000008
-rw-r----- 1 mysql mysql 178 Jan 17 16:21 mysql-bin.000009
-rw-r----- 1 mysql mysql 155 Jan 17 16:21 mysql-bin.000010
-rw-r----- 1 mysql mysql 164 Jan 17 16:37 mysql-bin.index

“2020-01-17 16:21:00”之前的二进制日志文件已经被删除了,但不会删除“2020-01-17 16:21:00”时间点的二进制日志文件。

3.删除所有二进制日志

在MySQL命令行执行如下命令即可删除所有二进制日志文件。

mysql> RESET MASTER;
Query OK, 0 rows affected (0.01 sec)

SQL语句执行成功,再次查看/data/mysql/log/bin_log目录下的文件。

[root@binghe150 ~]# ll /data/mysql/log/bin_log
total 8
-rw-r----- 1 mysql mysql 155 Jan 17 16:41 mysql-bin.000001
-rw-r----- 1 mysql mysql  41 Jan 17 16:41 mysql-bin.index

此时/data/mysql/log/bin_log目录下的所有二进制文件已经被删除,并且二进制文件重新从000001开始编号。

临时开启与关闭二进制

在 Mysql 命令行执行如下命令暂时关闭二进制日志:

mysql> SET sql_log_bin = 0;
Query OK, 0 rows affected (0.00 sec)

暂时开启二进制日志,则需要在MySQL命令行执行如下命令:

mysql> SET sql_log_bin = 1;

Query OK, 0 rows affected (0.00 sec)

到此这篇关于Mysql中二进制日志操作方法说明的文章就介绍到这了,更多相关Mysql二进制日志内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • mysql 数据库死锁原因及解决办法

    mysql 数据库死锁原因及解决办法

    这篇文章主要介绍了mysql 数据库死锁原因及解决办法,需要的朋友可以参考下
    2016-01-01
  • mysql 8.0 找不到my.ini配置文件以及报sql_mode=only_full_group_by解决方案

    mysql 8.0 找不到my.ini配置文件以及报sql_mode=only_full_group

    MySQL5.7.5及以上版本启用ONLY_FULL_GROUP_BYSQL模式可能导致的问题,本文就来介绍一下找不到my.ini配置文件的解决方法,感兴趣的可以了解一下
    2024-08-08
  • MySQL中使用innobackupex、xtrabackup进行大数据的备份和还原教程

    MySQL中使用innobackupex、xtrabackup进行大数据的备份和还原教程

    这篇文章主要介绍了MySQL中使用innobackupex、xtrabackup进行大数据的备份和还原教程,xtrabackup用来对超过10G数据的Mysql进行备份和还原任务,需要的朋友可以参考下
    2014-09-09
  • MySQL数据库定时备份的几种实现方法

    MySQL数据库定时备份的几种实现方法

    本文主要介绍了MySQL数据库定时备份的几种实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-07-07
  • mysql模糊查询like和regexp小结

    mysql模糊查询like和regexp小结

    在mysql中实现模糊查询有两种方法一种是LIKE/NOT LIKE,另一种是REGEXP/NOT REGEXP方法,下面我来给大家介绍它们的用法,希望此教程对各位同学会有所帮助。
    2014-09-09
  • MySQL 常用引擎总结分享

    MySQL 常用引擎总结分享

    这篇文章主要介绍了MySQL 常用引擎总结分享,MySQL有很多存储引擎,所谓的存储引擎是指用于存储、处理和保护数据的核心服务,更多常用引擎分享,需要的小伙伴可以参考下面文章内容
    2022-06-06
  • Mysql单文件存储删除数据文件容量不会减少的bug与解决方法

    Mysql单文件存储删除数据文件容量不会减少的bug与解决方法

    这篇文章主要给大家介绍了Mysql单文件存储删除数据文件时容量不会减少的bug与解决方法,文中给出了详细的解决方法,相信对遇到这个问题的朋友们能带来一定的帮助,下面来一起看看吧。
    2016-12-12
  • mysql IS NULL使用索引案例讲解

    mysql IS NULL使用索引案例讲解

    这篇文章主要介绍了mysql IS NULL使用索引案例讲解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • mysql的定时任务实例教程

    mysql的定时任务实例教程

    定时任务是我们在日常开发维护中经常会遇到的,下面这篇文章主要给大家介绍了关于mysql定时任务的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-09-09
  • mysql 8.0.17 安装配置方法图文教程

    mysql 8.0.17 安装配置方法图文教程

    这篇文章主要为大家详细介绍了mysql 8.0.17 安装配置方法图文教程,文中安装步骤介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-08-08

最新评论