使用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', } } } }
四、初始化数据同步与启动复制
- 主库导出数据并获取位点:
在主库执行以下命令(先锁表保证数据一致性):# 登录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; - 从库导入数据并启动复制:
将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
相关产品推荐
相关产品推荐

