• 搭建Mysql主从复制


    MySQL主从复制是一种常用的数据库高可用性解决方案,可以提高数据库的可用性和性能。本教程将介绍如何搭建MySQL主从复制。

    1、MySQL 支持的复制类型


    基于语句的复制(STATEMENT):在主服务器上执行的 SQL 语句,在从服务器上执行同样的语句。MySQL 默认采用基于语句的复制,效率比较高。

    • 传输效率高,减少延迟。
    • 在从库更新不存在的记录时,语句赋值不会失败。而行复制会导致失败,从而更早发现主从之间的不一致。
    • 可能出现数据一致性问题

    基于行的复制(ROW):不记录 SQL 语句上下文信息,仅保存哪条记录被修改。

    • 大量的binlog日志占用的空间大,传输带宽占用大。但是这种方式比基于语句的复制要更加精确。

    混合类型的复制(MIXED):默认采用基于语句的复制,一旦发现基于语句无法精确复制时,就会采用基于行的复制。

    2、MySQL主从复制的工作过程


    主从复制原理:

    1、change master to 时,ip pot user password binlog position写入到master.info进行记录

    2、start slave 时,从库会启动IO线程和SQL线程

    3、IO_T,读取master.info信息,获取主库信息连接主库

    4、主库会生成一个准备binlog DUMP线程,来响应从库

    5、IO_T根据master.info记录的binlog文件名和position号,请求主库DUMP最新日志

    6、DUMP线程检查主库的binlog日志,如果有新的,TP(传送)给从从库的IO_T

    7、IO_T将收到的日志存储到了TCP/IP 缓存,立即返回ACK给主库 ,主库工作完成

    8、IO_T将缓存中的数据,存储到relay-log日志文件,更新master.info文件binlog 文件名和postion,IO_T工作完成

    9、SQL_T读取relay-log.info文件,获取到上次执行到的relay-log的位置,作为起点,回放relay-log

    10、SQL_T回放完成之后,会更新relay-log.info文件

    11、relay-log会有自动清理的功能

    12、主库一旦有新的日志生成,会发送“信号”给binlog dump,通知IO线程再请求

    3、搭建步骤


    步骤1:环境准备

    在开始搭建之前,您需要准备以下环境:

    • 两台服务器(一台作为主服务器,一台作为从服务器)
    • 安装了MySQL的服务器
    • 确保主服务器可以通过网络访问从服务器

    步骤2:主从服务器时间同步

    yum -y install ntp
    
    vim /etc/ntp.conf
    
    25行左右添加
    server 127.127.172.0							#设置本地是时钟源,注意修改网段
    fudge 127.127.172.0 stratum 8					#设置时间层级为8(限制在15内)
    
    service ntpd start
    
    yum -y install ntp ntpdate
    
    service ntpd start
    /usr/sbin/ntpdate masterIP			#进行时间同步,指向Master服务器IP
    
    crontab -e
    */30 * * * * /usr/sbin/ntpdate masterIP
    
    

    步骤3:配置主服务器

    1、在主服务器上打开MySQL配置文件my.cnf,并添加以下配置:

    [mysqld]
    log-bin=mysql-bin
    server-id=1
    
    • log-bin:启用二进制日志记录,用于记录主服务器上的所有更改。
    • server-id:为主服务器设置唯一标识符,用于标识主服务器和从服务器。

    2、systemctl restart mysqld 重启MySQL服务以使更改生效。

    步骤4:创建从服务器账户

    1、在主服务器上创建一个用于从服务器的账户,并授予复制权限:

    CREATE USER 'repl'@'%' IDENTIFIED BY 'password';
    GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
    
    • repl:从服务器账户的用户名。
    • password:从服务器账户的密码。

    2、使用以下命令查看主服务器的二进制日志文件名和位置:

    SHOW MASTER STATUS;
    
    • 记下File和Position的值,稍后将在从服务器上使用。

    步骤5:配置从服务器

    1. 在从服务器上打开MySQL配置文件my.cnf,并添加以下配置:

      [mysqld] server-id=2

    • server-id:为从服务器设置唯一标识符,用于标识主服务器和从服务器。
    1. 重启MySQL服务以使更改生效。

    步骤4:启动从服务器复制

    1、在从服务器上执行以下命令,连接到主服务器:

    CHANGE MASTER TO MASTER_HOST='master_host_name', MASTER_USER='repl',MASTER_PASSWORD='password',MASTER_LOG_FILE='recorded_log_file_name',MASTER_LOG_POS=recorded_log_position;
    
    • master_host_name:主服务器的IP地址或主机名。
    • password:从服务器账户的密码。
    • recorded_log_file_name:在步骤2中记录的主服务器的二进制日志文件名。
    • recorded_log_position:在步骤2中记录的主服务器的二进制日志位置。

    2、启动从服务器复制:

    START SLAVE;
    

    3、使用以下命令检查从服务器复制进程是否已启动:

    SHOW SLAVE STATUS\G
    

    如果Slave_IO_Running和Slave_SQL_Running的值都为“YES”,则表示从服务器已经成功连接到主服务器并开始复制。

    //如果需要停止主从服务复制的功能,使用以下命令:
    stop slave;
    //若搭建主从复制的过程出错,则需要清理掉之前的配置,还需要执行以下命令:
    reset slave all;

    4、主从延迟问题


    当主库的 TPS 并发较高的时候,由于主库上面是多线程写入的,而从库的SQL线程是单线程的,导致从库SQL可能会跟不上主库的处理速度。

    解决方法:

    • 网络方面:尽量保证主库和从库之间的网络稳定,延迟较小;
    • 硬件方面:从库配置更好的硬件,提升随机写的性能;
    • 配置方面:尽量使 MySQL 的操作在内存中完成,减少磁盘操作。或升级 MySQL5.7 版本使用并行复制;
    • 建构方面:在事务中尽量对主库读写,其它非事务的读在从库。消除一部分延迟带来的数据库不一致。还可以增加缓存降低一些从库的负载。

    5、结论


    MySQL主从复制是一种提高数据库可用性和性能的常用解决方案。本教程介绍了如何搭建MySQL主从复制,您可以根据实际情况进行调整和优化。

  • 相关阅读:
    如何通过CRM系统进行销售机会管理?
    SPARK中关于HighlyCompressedMapStatus的说明(会造成运行时的数据不精确)
    中级前端工程师要回的知识
    基于OpenGL的冰川与火鸟(光照计算模型、视景体、粒子系统)
    企业网站的制作流程是什么?设计和制作一个网站需要多长时间?
    KT148A语音芯片ic工作原理以及芯片的内部架构描述
    关于Vuex的简单理解和使用
    C++快速入门
    背后的力量 | 搭建新型IT基础架构 华云数据助力妇幼保健院提升数字化医院建设水平
    Linux系统离线安装Python
  • 原文地址:https://www.cnblogs.com/myshare/p/17493913.html