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

MySQL主从复制部署

MySQL主从复制部署

前言

MySQL 8.0 的主从复制是一种常见的数据库高可用和读写分离方案 在做的时候 排了好长时间 才发现是从库的二级制格式和主的不一样 所有很小的问题 下面这些东西就是我最终的结果 如果有更好的建议 大家可以私信我的

一、准备工作

  1. 两台安装好 MySQL 8.0 的服务器(主库和从库)

    主库:Centos7:192.168.3.151/24

    从库:Ubuntu:192.168.3.141/24

  2. 确保两台服务器网络互通,防火墙开放 MySQL 端口(默认 3306)

  3. 主库和从库的 MySQL 版本保持一致

二、主库(Master)配置

  1. 修改配置文件

    编辑 MySQL 配置文件(通常是 /etc/my.cnf/etc/mysql/my.cnf):

    [mysqld]
    port = 3306
    basedir = /usr/local/mysql
    datadir = /usr/local/mysql/data
    log-error = /usr/local/mysql/data/error.log
    pid-file = /usr/local/mysql/data/mysql.pid
    socket = /tmp/mysql.sock
    character-set-server=utf8mb4
    collation-server=utf8mb4_unicode_ci
    default-storage-engine=InnoDB
    default-authentication-plugin=mysql_native_password
    sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES# 主库特有配置
    server-id = 1
    log_bin = /usr/local/mysql/data/mysql-bin
    binlog_format = row #PS!!!(从库的格式要和主库一模一样)
    expire_logs_days = 7
    max_binlog_size = 100M#server-id = 1:主库唯一标识(正确,从库需设置不同值)
    #log_bin = /usr/local/mysql/data/mysql-bin:启用二进制日志(主从复制必需)
    #binlog_format = row:使用行格式(MySQL 8.0 推荐)
    #expire_logs_days = 7:自动清理 7 天前的 binlog(避免磁盘占满)
    #max_binlog_size = 100M:单个 binlog 文件最大 100M(合理设置)
    
  • 重启主库 MySQL 服务

    systemctl restart mysqld
    
  • 创建用于复制的用户
    登录主库 MySQL:

    mysql -u root -p
    

  • 创建用户并授权:

    CREATE USER 'aa'@'%' IDENTIFIED WITH mysql_native_password BY '123'; --测试环境密码‘123’
    GRANT  ON *.* TO 'repl_user'@'从库IP地址';
    FLUSH PRIVILEGES;
    
  • 查看主库状态

    SHOW MASTER STATUS;--记录结果中的 File 和 Position 值,后续配置从库需要用到。--显示结果如下
    +------------------+----------+--------------+------------------+-------------------+
    | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
    +------------------+----------+--------------+------------------+-------------------+
    | mysql-bin.000004 |      156 |              |                  |                   |
    +------------------+----------+--------------+------------------+-------------------+
    1 row in set (0.06 sec)
    

三、从库(Slave)配置

  • 修改配置文件
    编辑从库 MySQL 配置文件:

    [mysqld]
    # 从库特有配置
    server-id = 2  # 必须与主库不同(建议为2)
    relay_log = /usr/local/mysql/data/mysql-relay-bin  # 启用中继日志
    read_only = 1  # 从库只读(防止手动写入数据冲突)
    log_bin = /usr/local/mysql/data/mysql-bin  # 可选,若从库需作为其他从库的主库则启用
    binlog_format = row  # 与主库保持一致
    expire_logs_days = 7
    max_binlog_size = 100M
    
  • 重启从库 MySQL 服务

    systemctl restart mysqld
    
  • 执行以下命令配置主从关系:

    CHANGE MASTER TOMASTER_HOST = '192.168.3.151',MASTER_USER = 'aa',MASTER_PASSWORD = '123,MASTER_LOG_FILE = 'mysql-bin.000004', MASTER_LOG_POS =  156;
    
  • 启动从库复制进程

    START SLAVE;
    
  • 查看从库状态

    SHOW SLAVE STATUS\G
    SHOW SLAVE STATUS\G
    *************************** 1. row ***************************Slave_IO_State: Waiting for source to send eventMaster_Host: 192.168.3.151Master_User: aaMaster_Port: 3306Connect_Retry: 60Master_Log_File: mysql-bin.000004Read_Master_Log_Pos: 1105Relay_Log_File: ws-virtual-machine-relay-bin.000004Relay_Log_Pos: 608Relay_Master_Log_File: mysql-bin.000004Slave_IO_Running: YesSlave_SQL_Running: YesReplicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 0Last_Error: Skip_Counter: 0Exec_Master_Log_Pos: 1105Relay_Log_Space: 1845Until_Condition: NoneUntil_Log_File: Until_Log_Pos: 0Master_SSL_Allowed: NoMaster_SSL_CA_File: Master_SSL_CA_Path: Master_SSL_Cert: Master_SSL_Cipher: Master_SSL_Key: Seconds_Behind_Master: 0
    Master_SSL_Verify_Server_Cert: NoLast_IO_Errno: 0Last_IO_Error: Last_SQL_Errno: 0Last_SQL_Error: Replicate_Ignore_Server_Ids: Master_Server_Id: 1Master_UUID: a98f6ecb-7133-11f0-a001-000c29eaadbfMaster_Info_File: mysql.slave_master_infoSQL_Delay: 0SQL_Remaining_Delay: NULLSlave_SQL_Running_State: Replica has read all relay log; waiting for more updatesMaster_Retry_Count: 86400Master_Bind: Last_IO_Error_Timestamp: Last_SQL_Error_Timestamp: Master_SSL_Crl: Master_SSL_Crlpath: Retrieved_Gtid_Set: Executed_Gtid_Set: Auto_Position: 0Replicate_Rewrite_DB: Channel_Name: Master_TLS_Version: Master_public_key_path: Get_master_public_key: 0Network_Namespace: 
    1 row in set, 1 warning (0.00 sec)
    • 检查以下两个参数是否为 Yes,如果是则表示配置成功:
      Slave_IO_Running: Yes
      Slave_SQL_Running: Yes

    • PS:

      • 配置必须重启生效:修改 my.cnf 后,务必重启 MySQL 服务,否则 binlog_format 不会更新。
      • 主从格式严格一致ROW 格式是 MySQL 8.0 主从复制的最佳实践,避免混合使用不同格式。
      • 避免从库写数据:确保从库 read_only = 1(只读模式),防止手动写入导致的数据冲突。

四、验证主从复制

  1. 在主库创建一个测试数据库和表:

    CREATE DATABASE test_repl;
    USE test_repl;
    CREATE TABLE test_table (id INT, name VARCHAR(20));
    INSERT INTO test_table VALUES (1, 'test');
    
  2. 在从库查看是否同步成功:

    SHOW DATABASES;
    USE test_repl;
    SELECT * FROM test_table;
    
  • 如果从库中能看到主库创建的数据,则说明主从复制配置成功。

五、常见错误

常见问题排查

  1. Slave_IO_RunningConnecting,可能是:

    • 网络不通
    • 主库防火墙未开放 3306 端口
    • 复制用户密码错误
    • 主库 IP 或端口错误
  2. Slave_SQL_RunningNo,可能是:

    • 主从数据不一致
    • 从库执行中继日志

可以通过查看 MySQL 错误日志(通常在 /var/log/mysql/error.log)获取更详细的错误信息 看不懂发给AI~~~~

总结:

好了 其实写下来 就那点东西 不多不少的 为什么排的时候没看日志呢?哎~~ 所以大家要有看日志的习惯

新的一天 键盘还是那个键盘 困还是困 但各自努力吧 祝各位开心!!

http://www.dtcms.com/a/315985.html

相关文章:

  • leetcode700:二叉搜索树中的搜索(递归与迭代双解法)
  • 高可用微服务架构实战:Nacos集群+Nginx负载均衡,Spring Cloud无缝对接
  • qt窗口--01
  • 2025金九银十Java后端面试攻略
  • MoonBit 月兔 - 云和边缘计算 AI云原生编程语言及开发平台
  • 【51单片机 用定时器计时,按键控制LED灯亮(按键按下多少秒,亮几个LED灯,按键松开,LED保持)】2022-10-18
  • Linux驱动24 --- RkMedia 视频 API 使用
  • 基于 Spring Boot 的小区人脸识别与出入记录管理系统实现
  • Bean 标签有哪些属性
  • CPU内存管理:MMU SMMU
  • 【arXiv2025】计算机视觉|即插即用|LWGA:即插即用!LWGA模块,视觉性能炸裂!
  • 深圳AI大会前瞻:千企集结,“模驱具身”加速AI硬件革命
  • PAT 1039 Course List for Student
  • 注意点:Git 从安装到分支协作、冲突解决的完整步骤 ---待修改,没看这个步骤,需要重新整理步骤
  • Orange的运维学习日记--28.Linux逻辑卷详解
  • MATLAB实现的基于压缩感知的图像处理
  • 分布式选举算法:Bully、Raft、ZAB
  • Spring Boot与Redis连接池配置终极指南:从版本差异到生产实践
  • 【Mysql】业务视角下,SQL字段处理专题
  • VR眼动追踪技术帮助医生更快速确认大脑神经损伤与疾病
  • MySQL索引底层原理与性能优化实践
  • JavaScript性能优化实战:从核心指标分析
  • “命令行过长“?一键解决 IntelliJ IDEA 中 Java/Spring Boot 启动失败问题
  • 武汉火影数字:VR大空间在文旅产业的创新应用
  • 7、Redis队列Stream和单线程及多线程模型
  • 二手房翻新时怎样装修省钱?
  • STM32H7+FreeRTOS+LwIP移植EtherCAT开源主站SOEM
  • 【AI论文】iLRM:一种迭代式大型3D重建模型
  • 3D 材质与纹理:让虚拟模型 “以假乱真” 的核心密码
  • Linux内核C语言代码规范