MySQL中如何开启二进制日志(Binlog)

 更新时间:2025年03月05日 17:08:33   作者:wujiada001  
本文详细介绍了如何在不同操作系统(Windows、Linux、Docker)下开启MySQL的二进制日志(Binlog),包括停止MySQL服务、编辑配置文件、创建日志文件目录、启动服务以及验证Binlog是否开启

在 MySQL 中开启二进制日志(Binlog)可以帮助记录数据库的变更信息,这在数据恢复、主从复制等场景中非常有用。

下面不同 MySQL 版本下开启 Binlog 的方法:

windows系统

手动停止mysql,修改完配置再重新启动

1. 停止 MySQL 服务

在修改配置文件之前,需要先停止 MySQL 服务,以避免在修改过程中出现问题。

你可以通过以下两种常见方式停止服务:

使用服务管理器

  • 按下 Win + R 组合键,输入 services.msc 并回车,打开 “服务” 窗口。
  • 在服务列表中找到 MySQL 服务(具体名称可能因安装时的配置有所不同),右键点击该服务,选择 “停止”。

使用命令行

以管理员身份打开命令提示符,执行以下命令:

net stop mysql

2. 找到并打开 my.ini 文件

my.ini 是 MySQL 的配置文件,其位置通常取决于 MySQL 的安装路径。

常见的位置如下:

  • 默认安装路径C:\ProgramData\MySQL\MySQL Server X.XX.X 为具体的 MySQL 版本号)。
  • 自定义安装路径:如果你在安装 MySQL 时选择了自定义路径,那么 my.ini 文件会位于你指定的安装目录下。

找到 my.ini 文件后,使用文本编辑器(如记事本、Notepad++ 等)打开它。

3. 编辑 my.ini 文件

my.ini 文件中找到 [mysqld] 部分,如果没有则手动添加。

[mysqld] 部分下添加或修改以下配置项:

[mysqld]
# 开启二进制日志
# 默认是在安装目录的data文件里面
log-bin = C:/mysql/logs/mysql-bin.log
# 设置服务器 ID,必须为正整数,在主从复制场景中,每个服务器的 ID 要唯一
server-id = 1
# 二进制日志格式,可选值有 STATEMENT、ROW、MIXED
binlog_format = ROW

配置项说明:

  • log-bin:指定二进制日志文件的路径和名称。注意在 Windows 系统中,路径分隔符要使用 / 而不是 \,或者使用双反斜杠 \\。你可以根据实际情况修改路径,例如 C:/mysql/logs/mysql-bin.log,确保该目录存在且 MySQL 服务有读写权限。
  • server-id:每个 MySQL 服务器必须有一个唯一的 server-id,用于标识不同的服务器,在主从复制中非常重要,这里设置为 1
  • binlog_format:指定二进制日志的格式。
  • STATEMENT:基于 SQL 语句的日志记录,记录执行的 SQL 语句。
  • ROW:基于行的日志记录,记录每一行数据的变更情况,这种格式更详细,能避免一些潜在的复制问题。
  • MIXED:混合模式,根据不同的 SQL 语句自动选择合适的日志记录方式。

补充:如果在 Windows 系统中找不到 my.ini 文件

创建 my.ini 文件:

若系统中没有 my.ini 文件,你需要手动创建。一般情况下,该文件会存于 MySQL 的安装目录或者 C:\ProgramData\MySQL\MySQL Server X.XX.X 代表具体的 MySQL 版本号)路径下。

  • 打开文件资源管理器,定位到相应目录。
  • 在该目录下右键单击空白处,选择 “新建” -> “文本文档”。
  • 将新建的文本文档重命名为 my.ini

4. 创建日志文件目录(如果需要)

如果你指定的日志文件目录不存在,需要手动创建该目录。例如,对于 C:/mysql/logs 目录,你可以通过以下步骤创建:

  • 打开 “此电脑”,找到 C: 盘。
  • C: 盘根目录下,右键点击空白处,选择 “新建” -> “文件夹”,将文件夹命名为 mysql
  • 进入 mysql 文件夹,重复上述操作,创建名为 logs 的文件夹。

5. 启动 MySQL 服务

完成 my.ini 文件的修改后,需要重新启动 MySQL 服务,让配置生效。

同样可以通过以下两种方式启动服务:

使用服务管理器:

  • 打开 “服务” 窗口(按下 Win + R 组合键,输入 services.msc 并回车)。
  • 在服务列表中找到 MySQL 服务,右键点击该服务,选择 “启动”。

使用命令行:

以管理员身份打开命令提示符,执行以下命令:

net start mysql

6. 验证 Binlog 是否开启

可以通过以下 SQL 语句验证 Binlog 是否已经成功开启:

SHOW VARIABLES LIKE 'log_bin';

在 MySQL 命令行客户端(如 MySQL Command Line Client 或 MySQL Workbench)中执行上述语句,如果结果中的 ValueON,则表示 Binlog 已经开启。

你还可以查看当前使用的二进制日志文件:

SHOW MASTER STATUS;

通过以上步骤,你就可以在 Windows 系统中成功开启 MySQL 的 Binlog 功能。

ps:可以手动启停MySQL

Linux 系统

1. 停止 MySQL 服务

在修改配置文件之前,需要先停止 MySQL 服务。

以 Linux 系统为例,使用以下命令停止服务:

sudo systemctl stop mysql

在 Windows 系统中,可以通过服务管理器停止 MySQL 服务。

2. 编辑 MySQL 配置文件

通常 MySQL 的配置文件为 my.cnf(Linux)或 my.ini(Windows)。

你可以使用以下命令打开该文件:

sudo vim /etc/mysql/my.cnf

在配置文件中找到 [mysqld] 部分,如果没有则添加,然后在该部分下添加或修改以下配置项:

[mysqld]
# 开启二进制日志
log_bin = /var/log/mysql/mysql-bin.log
# 设置服务器 ID,必须为正整数,在主从复制场景中,每个服务器的 ID 要唯一
server-id = 1
# 二进制日志格式,可选值有 STATEMENT、ROW、MIXED
binlog_format = ROW
  • log_bin:指定二进制日志文件的路径和名称,这里设置为 /var/log/mysql/mysql-bin.log,你可以根据实际情况修改。
  • server-id:每个 MySQL 服务器必须有一个唯一的 server-id,用于标识不同的服务器,在主从复制中非常重要。
  • binlog_format:指定二进制日志的格式。
  • STATEMENT:基于 SQL 语句的日志记录,记录执行的 SQL 语句。
  • ROW:基于行的日志记录,记录每一行数据的变更情况。
  • MIXED:混合模式,根据不同的 SQL 语句自动选择合适的日志记录方式。

3. 创建日志文件目录并设置权限

如果指定的日志文件目录不存在,需要创建该目录,并设置合适的权限:

sudo mkdir -p /var/log/mysql
sudo chown -R mysql:mysql /var/log/mysql

4. 启动 MySQL 服务

完成配置文件的修改后,启动 MySQL 服务:

sudo systemctl start mysql

5. 验证 Binlog 是否开启

可以通过以下 SQL 语句验证 Binlog 是否已经成功开启:

SHOW VARIABLES LIKE 'log_bin';

如果结果中的 ValueON,则表示 Binlog 已经开启。

你还可以查看当前使用的二进制日志文件:

SHOW MASTER STATUS;

Docker 容器中的 MySQL

如果你使用 Docker 部署 MySQL,可以在启动容器时通过环境变量或挂载配置文件的方式开启 Binlog。

使用环境变量

docker run -d \
  --name mysql \
  -e MYSQL_ROOT_PASSWORD=your_password \
  -e MYSQL_LOG_BIN_ENABLED=1 \
  -e MYSQL_LOG_BIN=/var/lib/mysql/mysql-bin.log \
  -e MYSQL_SERVER_ID=1 \
  -e MYSQL_BINLOG_FORMAT=ROW \
  -p 3306:3306 \
  mysql:8.0

挂载配置文件

创建一个包含 Binlog 配置的 my.cnf 文件:

[mysqld]
log_bin = /var/lib/mysql/mysql-bin.log
server-id = 1
binlog_format = ROW

然后使用以下命令启动容器并挂载配置文件:

docker run -d \
  --name mysql \
  -e MYSQL_ROOT_PASSWORD=your_password \
  -v /path/to/your/my.cnf:/etc/mysql/my.cnf \
  -p 3306:3306 \
  mysql:8.0

其中 /path/to/your/my.cnf 是你本地 my.cnf 文件的路径。

通过以上步骤,你就可以在 MySQL 中成功开启 Binlog 功能。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • MySQL MGR 高可用集群搭建过程详解

    MySQL MGR 高可用集群搭建过程详解

    MGR是MySQLGroupReplication的简称,是MySQL5.7.17版本诞生的一种插件,可以灵活部署,保证数据一致性又可以自动切换,具备故障检测功能、支持多节点写入,本文介绍MySQL MGR 高可用集群搭建过程,感兴趣的朋友跟随小编一起看看吧
    2025-12-12
  • MySQL的查询缓存机制基本学习教程

    MySQL的查询缓存机制基本学习教程

    这篇文章主要介绍了MySQL的查询缓存机制基本学习教程,默认针对InnoDB存储引擎下来将,需要的朋友可以参考下
    2015-11-11
  • JDK1.7下测试ConnectorJ连接MySQL8.0的方法

    JDK1.7下测试ConnectorJ连接MySQL8.0的方法

    MySQL Connector/J是一个JDBC 4型驱动程序。Type 4标志意味着驱动程序是MySQL协议的纯Java实现,不依赖于MySQL客户端库,这篇文章主要介绍了JDK1.7下测试ConnectorJ连接MySQL8.0,需要的朋友可以参考下
    2022-10-10
  • 更改Mysql root用户密码

    更改Mysql root用户密码

    这篇文章主要介绍了更改Mysql root用户密码的相关资料,需要的朋友可以参考下
    2016-03-03
  • MySQL FIND_IN_SET 函数实战实例

    MySQL FIND_IN_SET 函数实战实例

    FIND_IN_SET是MySQL处理分隔字符串的函数,用于判断字符串是否存在于列表中,返回位置或0,适用于标签、分类等多值场景,但无法使用索引,性能较差,建议结合替代方案或优化设计,注意大小写敏感和空值处理问题,对mysql find_in_set函数感兴趣的朋友一起看看吧
    2025-07-07
  • mysql中如何判断当前是字符 mysql判断字段中有无汉字

    mysql中如何判断当前是字符 mysql判断字段中有无汉字

    这篇文章主要介绍了mysql如何判断字段中有无汉字的方法,使用length与char_length两个函数就可以完成
    2014-01-01
  • mysql8.0.11安装配置方法图文教程 MySQL8.0新密码认证方式

    mysql8.0.11安装配置方法图文教程 MySQL8.0新密码认证方式

    这篇文章主要为大家详细介绍了mysql8.0.11安装配置方法图文教程,以及MySQL8.0新密码认证方式,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-11-11
  • Mysql数据库定时备份脚本分享

    Mysql数据库定时备份脚本分享

    这篇文章主要分享了Mysql数据库的定时备份脚本,帮助大家更好的理解和使用MySQL数据库,感兴趣的朋友可以了解下
    2020-09-09
  • MySQL系列之十二 备份与恢复

    MySQL系列之十二 备份与恢复

    这篇文章主要介绍了MySQL 数据备份与还原的相关知识,本文通过示例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下,希望可以帮到你们
    2021-07-07
  • MySQL数据库备份恢复实现代码

    MySQL数据库备份恢复实现代码

    这篇文章主要介绍了MySQL数据库备份恢复实现代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-06-06

最新评论