博客
关于我
MySQL学习笔记十七:复制特性
阅读量:789 次
发布时间:2023-02-12

本文共 4108 字,大约阅读时间需要 13 分钟。

MySQL 复制详解

MySQL 复制是一种高效的数据库管理策略,通过将主数据库(master)的数据复制到从数据库(slave)上,实现数据的高效同步。本文将从基础到高级功能,全面介绍MySQL复制的实现原理、配置方法及优化技巧。

一、MySQL 复制的基本原理

MySQL 复制基于二进制日志功能,通过将主库的DDL和DML操作记录到二进制日志中,然后由从库根据这些日志文件进行数据恢复,实现主从数据的一致性。具体流程如下:

  • 主库开启二进制日志:确保主库的二进制日志功能正常运行。
  • 从库启动复制:通过start slave命令启动复制过程。
  • 数据同步机制:主库将二进制日志事件传递给从库,从库通过SQL线程应用这些事件,完成数据同步。
  • 二、MySQL 复制的优势

  • 负载均衡:将读写操作分散到从库,减轻主库负载。
  • 高可用性:主库故障时,快速切换到从库,确保业务连续性。
  • 数据备份:通过从库备份,减少对主库的影响。
  • 数据分析:从库适合进行数据挖掘和分析,避免对主库造成性能影响。
  • 三、MySQL 复制的数据处理模式

    MySQL 提供三种复制模式,根据需求选择合适的模式:

  • 基于语句复制(SBR):使用BINLOG_FORMAT=STATEMENT,记录完整的SQL语句。
  • 基于行复制(RBR):使用BINLOG_FORMAT=ROW,记录每行数据的变更。
  • 混合复制模式(MBR):结合以上两种模式,灵活配置复制策略。
  • 四、二进制日志的查看与设置

    1. 查看二进制日志格式

    mysql> show global variables like 'binlog_format';+---------------+-----------+| Variable_name | Value     |+---------------+-----------+| binlog_format | STATEMENT |+---------------+-----------+1 row in set (0.00 sec)

    2. 设置二进制日志格式

    mysql> set global binlog_format='row';Query OK, 0 rows affected (0.00 sec)mysql> show global variables like 'binlog_format';+---------------+-------+| Variable_name | Value |+---------------+-------+| binlog_format | ROW   |+---------------+-------+1 row in set (0.00 sec)

    3. 查看日志事件

    mysql> show binlog events in 'mysql-bin.000027' from 107;+------------------+-----+------------+-----------+-------------+---------------------------------------------+| Log_name         | Pos | Event_type | Server_id | End_log_pos | Info                                        |+------------------+-----+------------+-----------+-------------+---------------------------------------------+| mysql-bin.000027 | 107 | Query      |      3306 |         175 | BEGIN                                       || mysql-bin.000027 | 175 | Query      |      3306 |         264 | use `test`; insert into t1 values (10)      || mysql-bin.000027 | 264 | Query      |      3306 |         333 | COMMIT                                      || mysql-bin.000027 | 333 | Query      |      3306 |         401 | BEGIN                                       || mysql-bin.000027 | 401 | Query      |      3306 |         495 | use `test`; update t1 set id=70 where id=60 || mysql-bin.000027 | 495 | Query      |      3306 |         564 | COMMIT                                      || mysql-bin.000027 | 564 | Stop       |      3306 |         583 |                                             |+------------------+-----+------------+-----------+-------------+---------------------------------------------+7 rows in set (0.00 sec)

    五、MySQL 复制流程

    1. 搭建复制环境

  • 停止mysql服务
  • 复制mysql安装目录到指定路径
  • 复制数据文件到目标目录
  • 复制并修改my.ini配置文件
  • 重启mysql服务
  • 配置主从数据库参数
  • 2. 主库配置

    [client]port=3306# 其他配置...[mysqld]server-id=3306log-bin=mysql-binread-only=0binlog_do_db=testbinlog_ignore_db=mysql

    3. 从库配置

    [mysqld]server-id=3307log-bin=mysql-binmaster_host=127.0.0.1master_port=3306master_user=replmaster_password=asdfreplicate_do_db=testreplicate_ignore_db=mysql

    4. 数据同步准备

  • 锁定表为读有效状态
    mysql> flush tables with read lock;mysql> unlock tables;
  • 复制数据文件
    cp /path/to-master/data/* /path/to-slave/data/
  • 5. 启动复制

    mysql> start slave;

    6. 验证复制状态

    mysql> show slave status\G

    六、半同步复制

    1. 安装插件

    mysql> install plugin rpl_semi_sync_master soname 'semisync_master.dll';mysql> install plugin rpl_semi_sync_slave soname 'semisync_slave.dll';

    2. 启动半同步

    mysql> set global rpl_semi_sync_master_enabled=on;mysql> set global rpl_semi_sync_slave_enabled=on;

    3. 查看半同步状态

    mysql> show global status like '%semi_sync%';

    七、常用复制参数说明

  • log_slave_updates:默认关闭,需开启以支持多主复制。
  • read-only:限制从库的写操作权限。
  • master_connect_retry:配置主库连接重试间隔。
  • replicate_do_dbreplicate_ignore_db:指定复制的数据库。
  • slave_skip_errors:忽略特定错误号。
  • master_delay:配置延迟复制时间。
  • 八、复制的管理与维护

  • 从库状态查看

    mysql> show slave status\G
  • 主从同步

    mysql> flush tables with read lock;mysql> select master_pos_wait('mysql-bin.000031', '736');
  • 从库复制错误处理

    mysql> set global sql_slave_skip_counter=1;mysql> start slave;
  • 主-主复制解决冲突

    auto_increment_increment=2auto_increment_offset=1
  • 性能优化

    • 多主复制:通过replicate_do_dbreplicate_ignore_db实现。
    • 并发复制:通过设置slave_parallel_workers实现。
  • 九、主从切换

  • 停止从库复制
    mysql> stop slave;
  • 重置从库
    mysql> reset slave;mysql> reset master;
  • 切换主库
    mysql> change master to master_host='新主库地址';
  • 通过以上步骤和配置,读者可以实现一个高效、可靠的MySQL复制环境,提升数据库的性能和可用性。

    转载地址:http://dkdfk.baihongyu.com/

    你可能感兴趣的文章
    MySQL千万级多表关联SQL语句调优
    查看>>
    mysql千万级大数据SQL查询优化
    查看>>
    MySQL千万级大表优化策略
    查看>>
    MySQL单实例或多实例启动脚本
    查看>>
    MySQL压缩包方式安装,傻瓜式教学
    查看>>
    MySQL原理、设计与应用全面解析
    查看>>
    MySQL原理简介—1.SQL的执行流程
    查看>>
    MySQL参数调优详解
    查看>>
    mysql参考触发条件_MySQL 5.0-触发器(参考)_mysql
    查看>>
    MySQL及navicat for mysql中文乱码
    查看>>
    MySqL双机热备份(二)--MysqL主-主复制实现
    查看>>
    MySQL各个版本区别及问题总结
    查看>>
    MySql各种查询
    查看>>
    mysql同主机下 复制一个数据库所有文件到另一个数据库
    查看>>
    mysql启动以后会自动关闭_驾照虽然是C1,一直是开自动挡的车,会不会以后就不会开手动了?...
    查看>>
    mysql启动和关闭外键约束的方法(FOREIGN_KEY_CHECKS)
    查看>>
    Mysql启动失败解决过程
    查看>>
    MySQL启动失败:Can't start server: Bind on TCP/IP port
    查看>>
    mysql启动报错
    查看>>
    mysql启动报错The server quit without updating PID file几种解决办法
    查看>>