You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Puppetlabs-mysql模块配置MySQL复制的技术咨询

Puppetlabs-MySQL模块配置MySQL复制的指导与排查

咱们先从你当前的主库配置说起,已经做了不少正确的基础设置:比如设置了root密码、移除默认账户(安全最佳实践)、开启了binlog并设置为mixed格式、配置了ACID相关的安全参数(innodb_flush_log_at_trx_commit=1和sync_binlog=1),这些都没问题。接下来帮你补全配置细节,以及梳理从库配置和常见排查点:

一、主库配置补全

你的配置里binlog-do-d...没写完,这里需要明确指定要同步的数据库(如果需要同步所有库可以省略这个参数,但生产环境建议精准指定)。如果是多个库,要用数组形式配置:

class core {
  class { '::mysql::server':
    root_password          => '*23AE809DDACAF96AF0FD78ED04B6A265E05AA257',
    remove_default_accounts => true,
    override_options       => {
      'mysqld' => {
        'bind-address' => '0.0.0.0',
        'server-id' => '1', # 主库ID必须唯一,不能与从库重复
        'binlog-format' => 'mixed',
        'log-bin' => 'mysql-bin',
        'datadir' => '/var/lib/mysql',
        'innodb_flush_log_at_trx_commit' => '1',
        'sync_binlog' => '1',
        'binlog-do-db' => ['your_db1', 'your_db2'], # 替换成实际要同步的数据库
        # 如果需要排除某些库,添加下面一行
        # 'binlog-ignore-db' => ['mysql', 'information_schema']
      }
    }
  }
}

二、创建复制专用用户(主库)

必须在主库上创建一个拥有REPLICATION SLAVE权限的用户,用于从库连接同步。用Puppet资源实现:

# 在core类内添加以下资源
mysql_user { 'repl@%':
  ensure        => present,
  password_hash => mysql::password('your_repl_password'), # 替换成实际密码
}

mysql_grant { 'repl@%/*.*':
  ensure     => present,
  options    => ['GRANT'],
  privileges => ['REPLICATION SLAVE'],
  table      => '*.*',
  user       => 'repl@%',
}

三、从库配置要点

从库的核心配置需要注意唯一的server-id,以及开启中继日志等:

class core_slave {
  class { '::mysql::server':
    root_password          => '*23AE809DDACAF96AF0FD78ED04B6A265E05AA257',
    remove_default_accounts => true,
    override_options       => {
      'mysqld' => {
        'bind-address' => '0.0.0.0',
        'server-id' => '2', # 必须与主库ID不同,每个从库ID都要唯一
        'relay-log' => 'mysql-relay-bin',
        'read-only' => '1', # 普通用户只读,超级用户仍可写,生产环境建议开启
        'log-slave-updates' => '1', # 如果是级联复制(从库作为其他从库的主库)需要开启,否则可选
        'datadir' => '/var/lib/mysql',
        'innodb_flush_log_at_trx_commit' => '1',
        'sync_binlog' => '1',
      }
    }
  }
}

四、初始化数据同步与启动复制

  1. 主库导出数据并获取位点:
    在主库执行以下命令(先锁表保证数据一致性):
    # 登录MySQL
    FLUSH TABLES WITH READ LOCK;
    SHOW MASTER STATUS; # 记录下File(比如mysql-bin.000001)和Position(比如107)的值
    # 另开一个终端导出数据
    mysqldump -u root -p --all-databases --master-data=2 > backup.sql
    # 回到MySQL终端解锁表
    UNLOCK TABLES;
    
  2. 从库导入数据并启动复制:
    将backup.sql传到从库,导入后执行:
    CHANGE MASTER TO
    MASTER_HOST='主库IP地址',
    MASTER_USER='repl',
    MASTER_PASSWORD='your_repl_password',
    MASTER_LOG_FILE='刚才记录的File值',
    MASTER_LOG_POS=刚才记录的Position值;
    
    START SLAVE;
    # 检查复制状态,两个Running都为Yes才正常
    SHOW SLAVE STATUS\G;
    

五、常见问题排查

  • server-id重复:主从库的server-id必须唯一,不能为0,用SHOW VARIABLES LIKE 'server_id';检查
  • binlog未开启:主库执行SHOW VARIABLES LIKE 'log_bin';,确保值为ON
  • 网络连通性问题:从库测试能否连接主库3306端口,比如telnet 主库IP 3306或nc -zv 主库IP 3306
  • 复制用户权限不足:主库执行SHOW GRANTS FOR 'repl'@'%';,确认包含REPLICATION SLAVE权限
  • 从库复制报错:查看从库错误日志(通常是/var/log/mysql/error.log),比如日志文件不存在、数据不一致等问题,根据日志提示修复
  • GTID复制优化:如果想简化复制配置,可以在主从库都添加gtid_mode=ON和enforce_gtid_consistency=1到override_options,这样启动复制时无需指定File和Position,用CHANGE MASTER TO MASTER_HOST='xxx', MASTER_USER='repl', MASTER_PASSWORD='xxx', MASTER_AUTO_POSITION=1;即可

内容的提问来源于stack exchange,提问作者Valentine

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:48:51