当前位置: 首页 > news >正文

MySQL 8 主从同步安装与配置

拟机,由 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.dtcms.com/a/68190.html

相关文章:

  • C语言实现括号匹配检查及栈的应用详解
  • C#—【在不同的场景该用哪种线程?】
  • 机器狗硬件设计踩坑实录
  • 【愚公系列】《高效使用DeepSeek》004-DeepSeek的产品形态和功能详解
  • 前端UnoCSS面试题及参考答案
  • Opencv之掩码实现图片抠图
  • 金融时间序列分析(Yahoo Finance API实战)
  • 《炎龙骑士团外传风之纹章》秘籍
  • Cadence学习笔记3
  • C++类的基础题(4)
  • MIPI电平标准详解
  • 【Spring Cloud】 核心组件全解析与 2024 【微服务框架】选型指南
  • 数据结构与算法——算法3 面试常用排序算法
  • Java的SPI机制详解
  • Android之RecyclerView列表拖动排序
  • printf 和 echo 区别
  • 解析富集分析中的过表达分析(ORA):原理、应用与优化
  • REST 请求返回 Invalid Credentials
  • Android wifi的开关Settings值异常分析
  • PCL 点云OBB包围盒(二)
  • 【Java篇】一法不变,万象归一:方法封装与递归的思想之道
  • golang算法二叉搜索树
  • 静态时序分析:SDC约束命令set_sense详解
  • ​​vue-router编程式导航,params传参拿不到
  • FastAPI复杂查询终极指南:告别if-else的现代化过滤架构
  • Secs/Gem第一讲(基于secs4net项目的ChatGpt介绍)
  • 《JavaScript高级程序设计(第5版)》学习大纲
  • 【通缩螺旋的深度解析与科技破局路径】
  • Java中关于Optional的 orElse 操作,以及 orElse 与 orElseGet 的区别
  • 目标跟踪之DeepSort算法(4)