MySQL 8 主从同步安装与配置

devtools/2025/3/16 17:10:04/

拟机,由 CentOS 换成了 Ubuntu,用 Xteminal 连接之后,为了方便改配置文件,把文件权限改成 666 了,结果因为这个调半天,一直以为是网络问题或者是配置问题。要注意为了防止配置文件被未经授权的用户修改,MySQL 会忽略权限为“全局可写”的配置文件。


1. 环境准备

  • 主服务器(Master)
    • IP:192.168.1.50
    • 操作系统:Ubuntu 22.04
    • MySQL 版本:8.0.41
  • 从服务器(Slave)
    • IP:192.168.1.51
    • 操作系统:Ubuntu 22.04
    • MySQL 版本:8.0.41

2. 安装 MySQL 8

2.1 在主服务器和从服务器上安装 MySQL

  1. 更新系统包:

    sudo apt update
    sudo apt upgrade -y
    
  2. 安装 MySQL Server:

    sudo apt install mysql-server -y
    
  3. 启动 MySQL 服务并设置开机自启:

    sudo systemctl start mysql
    sudo systemctl enable mysql
    
  4. 运行安全脚本,设置 root 密码并移除不安全配置:

    sudo mysql_secure_installation
    

3. 配置主服务器(Master)

3.1 修改主服务器配置文件

  1. 编辑 MySQL 配置文件:

    sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
    
  2. 添加或修改以下内容:

    [mysqld]
    # 启用二进制日志(必须)
    log_bin = /var/log/mysql/mysql-bin.log
    # 设置唯一的服务器 ID(必须)
    server-id = 1
    # 可选:指定需要同步的数据库
    binlog_do_db = your_database_name
    # 可选:忽略系统库的同步
    binlog_ignore_db = mysql
    binlog_ignore_db = information_schema
    binlog_ignore_db = performance_schema
    binlog_ignore_db = sys
    
  3. 保存并退出,然后重启 MySQL 服务:

    sudo systemctl restart mysql
    

3.2 创建复制用户

  1. 登录 MySQL:

    sudo mysql -u root -p
    
  2. 创建用于复制的用户并授权:

    CREATE USER 'replica_user'@'192.168.1.51' IDENTIFIED WITH 'caching_sha2_password' BY 'secure_password';
    GRANT REPLICATION SLAVE ON *.* TO 'replica_user'@'192.168.1.51';
    FLUSH PRIVILEGES;
    
  3. 获取主服务器的二进制日志状态:

    SHOW MASTER STATUS;
    

    记录 FilePosition 的值,稍后会在从服务器上用到。


4. 配置从服务器(Slave)

4.1 修改从服务器配置文件

  1. 编辑 MySQL 配置文件:

    sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
    
  2. 添加或修改以下内容:

    [mysqld]
    # 设置唯一的服务器 ID(必须)
    server-id = 2
    # 启用中继日志(必须)
    relay_log = /var/log/mysql/mysql-relay-bin.log
    # 可选:指定需要同步的数据库
    replicate_do_db = your_database_name
    # 可选:忽略系统库的同步
    replicate_ignore_db = mysql
    replicate_ignore_db = information_schema
    replicate_ignore_db = performance_schema
    replicate_ignore_db = sys
    
  3. 保存并退出,然后重启 MySQL 服务:

    sudo systemctl restart mysql
    

4.2 配置从服务器连接主服务器

  1. 登录 MySQL:

    sudo mysql -u root -p
    
  2. 配置主从连接:

    CHANGE REPLICATION SOURCE TO
    SOURCE_HOST='192.168.1.50',
    SOURCE_USER='replica_user',
    SOURCE_PASSWORD='secure_password',
    SOURCE_LOG_FILE='mysql-bin.000001',  -- 替换为主服务器的 File 值
    SOURCE_LOG_POS=123;                  -- 替换为主服务器的 Position 值
    
  3. 启动复制:

    START REPLICA;
    
  4. 检查复制状态:

    SHOW REPLICA STATUS\G
    

    确保 Replica_IO_RunningReplica_SQL_Running 均为 Yes


5. 验证主从同步

5.1 在主服务器上插入测试数据

  1. 登录 MySQL:

    sudo mysql -u root -p
    
  2. 创建测试数据库和表:

    CREATE DATABASE your_database_name;
    USE your_database_name;
    CREATE TABLE test_table (id INT PRIMARY KEY, name VARCHAR(50));
    INSERT INTO test_table VALUES (1, 'Test Data');
    

5.2 在从服务器上检查数据

  1. 登录 MySQL:

    sudo mysql -u root -p
    
  2. 检查数据是否同步:

    USE your_database_name;
    SELECT * FROM test_table;
    

如果数据同步成功,说明主从同步配置完成。


6. 常见问题排查

6.1 主从服务器 server-id 相同

  • 错误信息
    [ERROR] [MY-013117] [Repl] Replica I/O for channel '': Fatal error: The replica I/O thread stops because source and replica have equal MySQL server ids.
    
  • 解决方法
    1. 确保主从服务器的 server-id 不同。
    2. 修改配置文件后重启 MySQL 服务。

6.2 配置文件权限问题

  • 错误信息
    mysqld: [Warning] World-writable config file '/etc/mysql/conf.d/slave.cnf' is ignored.
    
  • 解决方法
    1. 修改配置文件的权限:
      sudo chmod 644 /etc/mysql/conf.d/slave.cnf
      
    2. 重启 MySQL 服务。

6.3 认证插件问题

  • 错误信息
    Authentication plugin 'caching_sha2_password' reported error: Authentication requires secure connection.
    
  • 解决方法
    1. 启用 TLS/SSL 加密连接。
    2. 或者将复制用户的认证插件切换为 mysql_native_password
      ALTER USER 'replica_user'@'192.168.1.51' IDENTIFIED WITH 'mysql_native_password' BY 'secure_password';
      

7. 总结

  • 主从同步配置步骤

    1. 安装 MySQL。
    2. 配置主服务器的 server-id 和二进制日志。
    3. 创建复制用户并授权。
    4. 配置从服务器的 server-id 和中继日志。
    5. 配置从服务器连接主服务器并启动复制。
    6. 验证主从同步。
  • 注意事项

    1. 确保主从服务器的 server-id 不同。
    2. 确保配置文件的权限正确。
    3. 使用安全的认证方式(如 TLS/SSL 或 mysql_native_password)。
    4. 定期检查复制状态和错误日志。

通过以上步骤,你可以成功搭建 MySQL 8 的主从同步环境。


http://www.ppmy.cn/devtools/167609.html

相关文章

STM32 单片机常见的 8 种输入输出模式

STM32 单片机常见的 8 种输入输出模式 文章目录 STM32 单片机常见的 8 种输入输出模式1. 浮空输入模式 (GPIO_Mode_IN_FLOATING)介绍使用场景示例代码 2. 上拉输入模式 (GPIO_Mode_IPU)介绍使用场景示例代码 3. 下拉输入模式 (GPIO_Mode_IPD)介绍使用场景示例代码 4. 模拟输入模…

拥有一台云服务器能做什么呢?

拥有一台云服务器就像拥有了一台24小时在线的远程电脑,你可以通过互联网随时随地管理它。它的用途非常广泛,无论是个人学习、开发测试,还是企业级应用部署,都能发挥重要作用。以下是常见的应用场景,按需求分类整理&…

SwanLab私有化部署教程!

SwanLab私有化部署版面向所有个人用户免费开放,部署方案基于Docker Compose,能非常轻松地部署在 Windows/MacOS/Linux 机器上,希望能成为各位训练师的独门炼丹利器。 下面我们会介绍一下如何安装私有化部署版。 1. SwanLab介绍 SwanLab 是…

Unity 封装一个依赖于MonoBehaviour的计时器(上) 基本功能

灵感来自下面这本书的协程部分,因此我就自己尝试写了一个 我的新书Unity3D游戏开发(第3版) | 雨松MOMO程序研究院 如果你不知道什么是协程:unity保姆级教程之协同程序_unity协同-CSDN博客 一句话概括:协程就是单线程的异步操作,其作用于Unity的主线程 1…

如何在github上参与开源项目

1. 创建 GitHub 账号 如果你还没有 GitHub 账号,首先需要注册一个: 访问 GitHub 官网。 点击右上角的“Sign up”按钮,填写注册信息并完成注册。 2. 找到感兴趣的项目 GitHub 上有成千上万的开源项目,你可以通过以下方式找到感兴趣…

prototype和proto的区别

在 JavaScript 中,prototype 和 __proto__ 都与原型链和继承机制有关,但它们的含义和作用是不同的。下面来详细讲解它们的区别。 一、prototype 和 proto 的区别 特性prototype__proto__作用构造函数的原型对象实例对象的隐式原型类型对象对象访问方式构…

数据库管理-第302期 国产类RAC架构数据库网络连接方式(20250314)

数据库管理302期 2025-03-14 数据库管理-第302期 国产类RAC架构数据库网络连接方式(20250314)1 Oracle RAC2 DMDSC3 YAC4 KES RAC总结 数据库管理-第302期 国产类RAC架构数据库网络连接方式(20250314) 作者:胖头鱼的鱼…

封装WPF中转换器常用用法封装

代码经常遇到类型A转换到类型C&#xff0c;但是已经写好类型A转换到类型B、类型B转换类型C。往往遇到这种情况&#xff0c;通常会重新写过一个转换器来进行满足需求。以下是解决该痛点。 /// <summary> /// 转换器组转换器 /// </summary> [ContentProperty(nameo…