MySQL GTID复制 方式 搭建主从集群

原文可见更多内容

包括详细配置、常见报错等

MySQL以GTID方式搭建主备集群 - 码到城攻GTID同步在建立复制的时候,将传统复制由人为指定binlog的pos位点改为了MASTER_AUTO_POSITION=1自动获取binlog的pos位点,简单快捷https://www.codecomeon.com/posts/191/

master


在 .cnf 中 `[mysqld]`下配置:

    [mysqld]
    # 服务器基础参数
    port=3308
    pid-file        = /var/run/mysqld/mysqld.pid
    socket          = /var/run/mysqld/mysqld.sock
    datadir         = /var/lib/mysql
    secure-file-priv= NULL
    
    # GTID:
    # 服务器id,设置为机器 IP 地址后三位即可
    server_id=188
    # 开启gtid模式
    gtid_mode=on
    
    # 强制gtid一致性,开启后对于特定create table不被支持
    enforce_gtid_consistency=on
    
    # binlog:
    # 二进制日志文件存放路径
    log_bin = mysql-bin
    log-slave-updates=true
    
    # 强烈建议,其他格式可能造成数据不一致
    binlog_format=row
    
    # relay log:
    skip_slave_start=1


切记,配置完成后,重启数据库服务,连接数据库并验证配置是否生效(不报错,基本都是生效了)。

slave


在 .cnf 中 `[mysqld]`下配置:

   

<think>我们正在讨论如何搭建MySQL主从复制集群。根据引用内容,主从复制的基本原理是主服务器(Master)将数据更改记录到二进制日志(binlog)中,从服务器(Slave)通过读取并执行这些日志来复制数据。配置步骤主要分为主服务器配置和从服务器配置。主服务器配置步骤:1.修改主服务器MySQL配置文件(如my.ini或my.cnf),设置server-id(唯一)并启用二进制日志。2.重启MySQL服务使配置生效。3.创建用于复制的用户并授予复制权限。4.查看主服务器的二进制日志状态,记录File和Position值。从服务器配置步骤:1.修改从服务器MySQL配置文件,设置唯一的server-id,启用中继日志(relay-log)并设置只读模式(可选)。2.重启从服务器MySQL服务。3.配置从服务器连接到主服务器,使用主服务器记录的File和Position值。4.启动从服务器复制进程。接下来,我们将详细说明每一步的操作。注意:在开始之前,请确保主从服务器上的MySQL版本兼容,并且网络互通。详细步骤:一、主服务器(Master)配置1.修改配置文件:在[mysqld]部分添加或修改以下参数(以Linux系统为例,配置文件通常为/etc/my.cnf或/etc/mysql/my.cnf):```[mysqld]server-id=1#服务器唯一ID,主库建议设置为1,从库设置为其他非1且唯一的数字log-bin=mysql-bin#启用二进制日志,指定日志文件前缀binlog-do-db=your_database#可选,指定要复制数据库,多个则重复此配置行;如果不指定,则复制所有数据库#其他配置...```2.重启MySQL服务:Linux系统:`systemctl restartmysqld`Windows系统:通过服务管理器重启MySQL服务3.创建复制用户:登录主服务器MySQL,执行:```sqlCREATEUSER 'repl'@'%' IDENTIFIEDBY 'password';GRANT REPLICATIONSLAVEON *.* TO'repl'@'%';FLUSH PRIVILEGES;```4.查看主服务器状态:```sqlSHOWMASTERSTATUS;```记录下返回结果中的File(例如mysql-bin.000001)和Position(例如107),从服务器连接时需要用到。二、从服务器(Slave)配置1.修改配置文件:在[mysqld]部分添加或修改以下参数:```[mysqld]server-id=2#必须唯一,不能与主服务器相同relay-log=mysql-relay-bin#启用中继日志read-only=1#设置为只读模式(可选,根据需求)#如果只想复制特定的数据库,可以使用以下配置(可选)replicate-do-db=your_database```2.重启MySQL服务(同上)。3.配置复制参数:登录从服务器MySQL,执行:```sqlCHANGE MASTER TOMASTER_HOST='master_ip',--主服务器的IP地址MASTER_USER='repl',--主服务器上创建的复制用户MASTER_PASSWORD='password',--复制用户的密码MASTER_LOG_FILE='mysql-bin.000001', --主服务器上SHOWMASTERSTATUS得到的FileMASTER_LOG_POS=107;--主服务器上SHOW MASTER STATUS得到的Position```4.启动复制:```sqlSTARTSLAVE;```5.检查复制状态:```sqlSHOW SLAVE STATUS\G```查看输出中的`Slave_IO_Running`和`Slave_SQL_Running`是否为Yes,以及`Seconds_Behind_Master`是否正常(表示复制延迟)。注意事项: -如果主服务器已有数据,需要先将主服务器的数据导出并导入到从服务器,以保证数据一致。可以使用mysqldump工具。 -配置过程中,确保防火墙允许MySQL端口(默认3306)的通信。以上是搭建MySQL主从复制集群的基本步骤。根据实际环境,可能还需要考虑其他配置,如复制过滤、SSL加密等。相关问题:1.如何监控MySQL主从复制的状态和延迟?2. MySQL主从复制出现中断时,如何排查和修复?3.除了主从复制MySQL还有哪些高可用方案?</think>### MySQL主从复制集群搭建指南 MySQL主从复制通过二进制日志实现数据同步,主库(Master)处理写操作并将变更记录到binlog,从库(Slave)读取并重放这些日志实现数据复制[^1]。以下是详细配置步骤: --- #### 一、主库配置(Master) 1. **修改配置文件** 编辑`my.cnf`(Linux)或`my.ini`(Windows): ```ini [mysqld] server-id=1 # 主库唯一ID log-bin=mysql-bin # 启用二进制日志 binlog-do-db=your_db # 需复制数据库(可选) binlog-ignore-db=mysql # 忽略系统库 ``` 重启MySQL服务:`systemctl restart mysqld`(Linux)或服务管理器重启(Windows)[^2]。 2. **创建复制账户** 登录MySQL执行: ```sql CREATE USER 'repl'@'%' IDENTIFIED BY 'SecurePass123!'; GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%'; FLUSH PRIVILEGES; ``` 3. **查看主库状态** ```sql SHOW MASTER STATUS; ``` 记录`File`(如`mysql-bin.000002`)和`Position`(如`154`),从库连接需使用[^1]。 --- #### 二、从库配置(Slave) 1. **修改配置文件** ```ini [mysqld] server-id=2 # 从库唯一ID(≠主库) relay-log=mysql-relay-bin # 启用中继日志 read-only=1 # 设为只读模式 replicate-do-db=your_db # 指定复制数据库(与主库一致) ``` 2. **配置主库连接** 登录MySQL执行: ```sql CHANGE MASTER TO MASTER_HOST='192.168.1.100', -- 主库IP MASTER_USER='repl', MASTER_PASSWORD='SecurePass123!', MASTER_LOG_FILE='mysql-bin.000002', MASTER_LOG_POS=154; ``` 3. **启动复制** ```sql START SLAVE; SHOW SLAVE STATUS\G ``` 验证关键字段: - `Slave_IO_Running: Yes` - `Slave_SQL_Running: Yes` - `Seconds_Behind_Master: 0`(无延迟)[^3] --- #### 三、数据一致性初始化(可选) 若主库已有数据: ```bash # 主库导出数据 mysqldump -u root -p --single-transaction your_db > master_db.sql # 从库导入数据 mysql -u root -p your_db < master_db.sql ``` *注:导出时加`--single-transaction`确保一致性[^1]。* --- #### 四、验证复制 1. 主库插入数据: ```sql USE your_db; INSERT INTO test_table VALUES (1, 'replica_test'); ``` 2. 从库查询: ```sql SELECT * FROM test_table; # 应显示相同数据 ``` --- ### 关键注意事项 1. **防火墙**:确保3306端口互通 2. **版本兼容**:主从MySQL版本需兼容(建议主≥从) 3. **数据冲突**:从库设为`read-only`避免写入冲突 4. **监控命令**: - 主库:`SHOW MASTER STATUS` - 从库:`SHOW SLAVE STATUS` --- ### 相关问题 1. MySQL主从复制延迟过高有哪些优化方法? 2. 如何实现MySQL主从故障自动切换? 3. GTID复制模式相比传统复制有哪些优势? [^1]: MySQL高可用性攻略:快速搭建MySQL主从复制集群 [^2]: Windows系统搭建MySQL主从复制集群 [^3]: MySQL主从复制集群搭建与配置
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值