MySQL 基于 binlog 的主从复制

从服务器读取 主服务器的 binlog 日志,进行解析后写入到从服务器的 relay log 中继日志中,再被 sql线程执行命令到数据库中

  • Log Dump Thead : master 生成binlog日志的线程
  • I/O Thread : 同步master 的binlog日志到slave 的中继日志中
  • SQL Thread: 解析SQL入库

默认异步复制:存在问题是多个slave进行复制时,会存在延迟的问题

半同步复制: 当一个slave 将binlog日志写入到 relay log 中继日志中时,就返回给master

全同步复制:存在问题是master 的事务操作慢。

Master

  1. 连接MySQL 并创建主从复制的用户

    create user masterSync;
    
  2. 给新建用户赋权

    GRANT REPLICATION SLAVE,FILE ON *.* TO 'masterSync'@'%' IDENTIFIED BY 'masterSync';
    
  3. 指定服务ID,开启binlog日志记录,在 /etc/my.cnf 中加入如下配置

    [mysqld]
    # 通常设置为ip
    server-id=135
    # 记录到 mysql-bin 文件中
    log-bin=mysql-bin
    # 同步的指定db 与binlog_ignore_db(指定不同步的db) 互斥,
    binlog-do-db=demo
    binlog-do-db=db_store
    

    重启MySQL

    service mysqld restart
    
  4. 通过命令查看Master db状态.

    SHOW MASTER STATUS;
    

Slave

  1. 指定服务器ID,指定同步的binlog存储位置,在 my.cnf中加入如下配置

    server-id=134
    relay-log=slave-relay-bin
    relay-log-index=slave-relay-bin.index
    read_only=1
    # 复制的db
    replicate_do_db=demo
    replicate_do_db=db_store
    
  2. 重启MySQL

service mysqld restart
  1. 接入slave的mysql服务,开始复制

    change master to master_host='192.168.45.135',master_port=3306,master_user='masterSync',master_password='masterSync',master_log_file='mysql-bin.000006',master_log_pos=462; 
    start slave;
    
  2. 查看slave服务器状态

    show slave status\G 
    
### 配置 MySQL 使用 Binlog 实现主从复制 #### 主库配置 为了使MySQL能够利用Binlog实现主从复制,需先在主服务器上启用Binlog功能。这涉及到编辑`my.cnf`文件中的特定参数[^3]。 ```ini [mysqld] server_id=1 read_only=0 log_bin=mysql-bin expire_logs_days=5 max_binlog_size=100M binlog_ignore_db=test_ignore_001 binlog_ignore_db=test_ignore_002 binlog_do_db=test ``` 上述配置项解释: - `server_id`: 设置唯一的服务器ID。 - `read_only`: 设为主库可读写模式。 - `log_bin`: 开启二进制日志并命名前缀。 - `expire_logs_days`: 定义过期删除策略。 - `max_binlog_size`: 控制单个日志的最大尺寸。 - `binlog_ignore_db/binlog_do_db`: 过滤不需要同步或仅需同步的数据库列表。 完成以上更改后,重启MySQL服务以应用新的设置。 #### 从库配置 同样地,在从服务器上的`my.cnf`也需要相应调整。 ```ini [mysqld] server_id=2 relay_log=mysql-relay-bin log_slave_updates=ON read_only=1 replicate_do_db=test replicate_ignore_db=test_ignore_001 replicate_ignore_db=test_ignore_002 ``` 这里的关键点在于设置了不同于主库的`server_id`以及开启了中继日志(`relay_log`)和允许子节点更新其自身的二进制日志(`log_slave_updates`)。此外,还设定了只读状态,并指明哪些数据库应该被忽略或是特别处理。 #### 初始化数据同步 首次建立主从关系之前,建议先将现有数据完整备份至从机。可以通过导出SQL脚本或者直接拷贝表空间的方式来进行初始化加载。之后再启动复制进程即可确保两者的初始一致性。 #### 复制线程启动 最后一步是在Slave端执行CHANGE MASTER TO命令连接Master,并开启IO_THREAD与SQL_THREAD两个工作线程负责抓取及重放事件流[^5]。 ```sql CHANGE MASTER TO MASTER_HOST='master_ip', MASTER_USER='repl_user', MASTER_PASSWORD='password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=<position>; START SLAVE; ``` 其中`<position>`应替换为实际位置偏移量;而其他字段则对应着上游主机的信息凭证等必要参数。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值