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

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

windows系统

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

1. 停止 MySQL 服务

在修改配置文件之前,需要先停止 MySQL 服务,以避免在修改过程中出现问题。你可以通过以下两种常见方式停止服务:

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

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

bash 复制代码
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] 部分下添加或修改以下配置项:

bash 复制代码
[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 服务,右键点击该服务,选择 "启动"。
使用命令行

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

bash 复制代码
net start mysql

6. 验证 Binlog 是否开启

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

bash 复制代码
SHOW VARIABLES LIKE 'log_bin';

在 MySQL 命令行客户端(如 MySQL Command Line Client 或 MySQL Workbench)中执行上述语句,如果结果中的 ValueON,则表示 Binlog 已经开启。你还可以查看当前使用的二进制日志文件:

bash 复制代码
SHOW MASTER STATUS;

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

ps:可以手动启停MySQL

Linux 系统

1. 停止 MySQL 服务

在修改配置文件之前,需要先停止 MySQL 服务。以 Linux 系统为例,使用以下命令停止服务:

bash 复制代码
sudo systemctl stop mysql

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

2. 编辑 MySQL 配置文件

通常 MySQL 的配置文件为 my.cnf(Linux)或 my.ini(Windows)。你可以使用以下命令打开该文件:

bash 复制代码
sudo vim /etc/mysql/my.cnf

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

XML 复制代码
[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. 创建日志文件目录并设置权限

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

bash 复制代码
sudo mkdir -p /var/log/mysql
sudo chown -R mysql:mysql /var/log/mysql

4. 启动 MySQL 服务

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

sql 复制代码
sudo systemctl start mysql

5. 验证 Binlog 是否开启

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

sql 复制代码
SHOW VARIABLES LIKE 'log_bin';

如果结果中的 ValueON,则表示 Binlog 已经开启。你还可以查看当前使用的二进制日志文件:

sql 复制代码
SHOW MASTER STATUS;

Docker 容器中的 MySQL

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

使用环境变量

bash 复制代码
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 文件:

XML 复制代码
[mysqld]
log_bin = /var/lib/mysql/mysql-bin.log
server-id = 1
binlog_format = ROW

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

bash 复制代码
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 功能。

相关推荐
行十万里人生18 分钟前
Qt 对象树详解:从原理到运用
开发语言·数据库·qt·华为od·华为·华为云·harmonyos
松岛的枫叶26 分钟前
【缓冲区】数据库备份的衍生问题,缓冲区在哪里?JVMor操作系统?(二)
数据库
obboda1 小时前
使用haproxy实现MySQL服务器负载均衡
服务器·mysql·负载均衡
鸠摩智首席音效师1 小时前
解决 ERROR 1130 (HY000): Host is not allowed to connect to this MySQL server
mysql
littlegirll1 小时前
命令行方式安装KFS同步KES到KADB
java·大数据·数据库
Y编程小白2 小时前
MySQL的存储引擎
数据库·mysql
爱老的虎油2 小时前
MySQL零基础教程10—正则表达式搜索(下)
数据库·mysql·正则表达式
️Carrie️2 小时前
6.6.3 SQL数据查询(一)
数据库·sql·select·子查询·连接查询·简单查询·聚集函数
jay丿2 小时前
Django应用的高级配置和管理
数据库·django·sqlite
ILUUSION_S3 小时前
学习路程五 向量数据库Milvus操作
数据库·python·学习·langchain·milvus