macOS 配置 MySQL 主从同步:VirtualBox Win7 作为 Slave 的完整指南

向北走
向北走
发布时间:2026-10-13| 4人浏览过
原创

在 macOS 环境下管理 MySQL 数据库时,借助 VirtualBox 安装 Windows 系统并使用 SQLOY 等工具进行备份或开发是常见需求。通过配置网络桥接和 MySQL 主从同步(Replication),可以实现主机(macOS)作为 Master,虚拟机作为 Slave 的数据备份与读写分离基础。本文将详细说明从网络配置到主从参数修改、状态验证及排错的全过程。

准备环境与网络配置

为了实现跨操作系统访问,首先需要在 VirtualBox 中配置 Windows 系统与 macOS 宿主机的网络连接,确保两者在同一局域网内且 IP 互通。

第1步:设置 VirtualBox 网卡为桥接模式

目的:使虚拟机获得独立局域网 IP,与宿主机互通。
操作:打开 VirtualBox 管理器,选择 Windows 虚拟机设置,进入“网络”选项卡,将连接方式设置为“桥接网卡”。
注意:建议确保路由器已绑定设备 IP,或使用固定 IP,避免重启后 IP 变更导致连接中断。

配置完成后,主机(macOS)与虚拟机(Win7)应当可以相互 ping 通。

第2步:使用 SQLOY 连接 MySQL

入口:Windows 系统的 SQLOY 客户端。
动作:输入 macOS 上 MySQL 的 IP 地址、端口(默认 3306)、用户名和密码进行连接测试。
完成状态:成功建立连接并浏览数据库列表。

若无法固定 IP,可使用小米路由器等具有“IP 绑定 MAC”功能的设备,将 Mac 和虚拟机的 MAC 地址固定在局域网特定 IP 上,方便后续主从连接。

配置 MySQL 主从同步(Master & Slave)

在本方案中,macOS 上的 MySQL 作为 Master(主库),VirtualBox 中的 Windows MySQL 作为 Slave(从库)。

第3步:修改 macOS (Master) 的 MySQL 配置

背景:macOS 下默认的 MySQL 安装可能没有直接可用的 my.cnf,或者修改 /usr/local/mysql/ 下的文件无效。需要创建自定义配置文件。

操作步骤:

  1. 找到源配置文件:/usr/local/mysql/support-files/my-default.cnf。
  2. 将其拷贝至 /etc 目录下并重命名为 my.cnf。
    注意:如果执行后 MySQL 服务无法启动,通常是缺少时间戳相关参数。

参数修正:若在 /etc/my.cnf 中遇到启动报错,需添加以下行以允许自动处理时间戳字段:

[mysqld]
explicit_defaults_for_timestamp=true
server-id=1
log-bin=mysql-bin
binlog-format=ROW

关键参数说明:

  • server-id=1:主库唯一标识,必须为正整数。
  • log-bin=mysql-bin:开启二进制日志,这是主从同步的基础。

第4步:修改 Windows (Slave) 的 MySQL 配置

操作:编辑 Windows 系统中 MySQL 的 my.ini 或 my.cnf 文件。

在 [mysqld] 节点下添加:

[mysqld]
server-id=2

注意:从库只需指定唯一的 server-id,通常不需要开启 log-bin,除非需要从库也作为其他库的主库(级联复制)。

第5步:重启并验证主从状态

动作:分别重启 Master 和 Slave 的 MySQL 服务。

查看 Master 状态:登录 Master 数据库,执行以下命令:

SHOW MASTER STATUS;

完成状态:应能看到 File 和 Position 值,例如 mysql-bin.000002 和 16093。记下这两个值,稍后会在 Slave 配置中使用。

查看 Slave 状态:登录 Slave 数据库,执行:

SHOW SLAVE STATUS;

初始状态:此时 Slave 尚未连接 Master,Io_Running 和 Sql_Running 均为 NO。

常见问题与排错

问题一:Error 1236 - Fatal error reading binlog

现象:Slave 端报 Got fatal error 1236 from master when reading data from binary log。

原因:通常是因为 Master 的二进制日志文件(File)或位置(Position)与 Slave 请求的不一致,或者 Slave 上次读取的位置已经失效。

解决:

  1. 在 Master 上再次确认当前状态:SHOW MASTER STATUS;,记录最新的 File 和 Position。
  2. 在 Slave 上停止同步:
STOP SLAVE;
  1. 重置同步指针,重新指向 Master 的最新位置:
CHANGE MASTER TO 
MASTER_HOST='<Master_IP>',
MASTER_USER='<user>',
MASTER_PASSWORD='<password>',
MASTER_LOG_FILE='<记录的File>',
MASTER_LOG_POS=<记录的Position>;

然后重新启动同步:START SLAVE;。

问题二:Checksum 不匹配 (crc32)

现象:Slave can not handle replication events with the checksum that master is configured to log。

原因:Master (如 5.6+) 使用了 CRC32 校验算法生成 binlog,而 Slave 版本较低,不支持该校验。

解决:在 Master 的 my.cnf 中将 binlog 校验改为 NONE:

binlog-checksum = none

重启 Master 后重试同步。

问题三:数据不同步但状态显示正常

现象:Slave 状态显示 Yes/Yes,但 Master 插入数据后,Slave 无反应。

分析:这有时是由于进程假死、网络瞬时中断导致的会话睡眠。直接通过 Slave 端工具手动插入数据测试时也可能出现异常。

经验之谈:如果遇到此类“玄学”问题,且反复调整配置无效,可尝试在 Master 端直接使用命令行(Terminal)进行数据更新,绕过某些 GUI 工具的潜在兼容性问题。若命令行操作能触发同步,则可能是客户端连接层面的问题。

总结

通过 VirtualBox 桥接网络并结合 MySQL 原生主从复制功能,可以有效解决 macOS 下数据库管理工具受限的问题。关键在于正确配置 server-id 和 log-bin,以及在发生偏移时使用 CHANGE MASTER TO 准确修复同步点。

以上就是 macOS 配置 MySQL 主从同步的详细流程,更多关于 MySQL 主从架构优化的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。