Centos7.9部署Mysql8.0.33主从半同步复制集群

2023年 7月 10日 17.9k 0

mysql主从同步方式区别

  • 异步同步:在异步模式下,主数据库将数据更改写入日志,然后立即确认事务已完成,而不需要等待从数据库完成复制。主数据库不会等待从数据库的确认。这种模式下,主数据库和从数据库之间存在一定的延迟,因此在主数据库故障时,可能会有一些数据丢失。
  • 半同步:在半同步模式下,主数据库在提交事务前需要至少一个从数据库进行确认。主数据库将事务写入日志,并等待至少一个从数据库确认成功后才确认事务完成。这种模式下,主数据库和至少一个从数据库的数据是一致的,但如果主数据库故障,尚未完成确认的数据可能会丢失。
  • 全同步:在全同步模式下,主数据库在提交事务前需要等待所有从数据库进行确认。主数据库将事务写入日志,并等待所有从数据库确认成功后才确认事务完成。这种模式下,主数据库和所有从数据库的数据是完全一致的,但由于需要等待所有从数据库确认,可能会影响系统的性能。
  • 总体来说,异步模式具有较低的延迟但可能会丢失一些数据,而半同步和全同步模式可以提供更高的数据一致性,但会带来更高的延迟和性能开销。选择适当的模式取决于应用程序的要求和数据的重要性。

    0. 准备工作

    准备三台机器

    os host 配置 角色
    centos7.9 10.20.24.101 4C CPU,8G 内存,100G 存储 master
    centos7.9 10.20.24.102 4C CPU,8G 内存,100G 存储 slave
    centos7.9 10.20.24.103 4C CPU,8G 内存,100G 存储 slave

    三台机器全部配置好ntp,并提前关闭selinux。最好是从虚拟机模板复制。

    准备好配置文件/etc/my.cnf,三台机器都需要准备好

    [mysqld]
     
    character-set-server=utf8mb4
    collation-server=utf8mb4_general_ci
    init_connect='SET NAMES utf8mb4'
     
    # server-id不能重复
    server-id=1
    # 设置同步的binary log二进制日志文件名前缀,默认是binlog
    log-bin=mysql-bin
    # 可选配置
    # 是否只读 0读写 1只读
    read-only=0
    # 禁用管理员写操作
    # super-read-only=1
    # 需要主从复制的数据库 ,如多个则重复配置(不设置则都同步)
    # replicate-do-db=user_db.%
    #屏蔽系统库同步,如果需要对某个数据库不进行同步则追加以下配置,配置对应的数据库名称,多个的话配置多行
    replicate_wild_ignore_table=mysql.%
    replicate_wild_ignore_table=information_schema.%
    replicate_wild_ignore_table=performance_schema.%
     
    #skip-external-locking
    #key_buffer_size = 16M
    #max_allowed_packet = 1M
    #table_open_cache = 64
    #sort_buffer_size = 512K
    #net_buffer_length = 8K
    #read_buffer_size = 256K
    #read_rnd_buffer_size = 512K
    #myisam_sort_buffer_size = 8M
     
    datadir=/var/lib/mysql
    socket=/var/lib/mysql/mysql.sock
    log-error=/var/log/mysqld.log
    pid-file=/var/run/mysqld/mysqld.pid
     
    [mysqldump]
     
    quick
    max_allowed_packet = 16M
     
    [mysql]
     
    no-auto-rehash
     
    [myisamchk]
     
    key_buffer_size = 20M
    sort_buffer_size = 20M
    read_buffer = 2M
    write_buffer = 2M
     
    [mysqlhotcopy]
     
    interactive-timeout

    1. 三节点安装8.0.33

    从yum安装或离线安装

    
    
     yum install mysql80-community-release-el7-7.noarch.rpm
     systemctl start mysqld

    2. 开放远程访问

    
    
    # 获取安装后的临时密码
    grep 'password' | /var/log/mysqld.log
    # 修改root密码
    mysql> alter user 'root'@'localhost' identified by '123456';
    # 开放远程访问
    mysql> update user set user.Host='%' where user.User='root';
    # 刷新立刻生效
    mysql> flush privileges;

    3. 配置主从同步

    • master节点
      
      
      # 新建用户用于主从同步,8.0默认的加密caching_sha2_password太严格,换位native_password
      mysql> CREATE USER 'slave'@'%' IDENTIFIED WITH 'mysql_native_password' BY '123456'
      mysql> GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
      # 刷新立刻生效
      mysql> flush privileges;
      # 查看binlog状态
      mysql> show master status\G;
      *************************** 1. row ***************************
                   File: mysql-bin.000002
               Position: 157
           Binlog_Do_DB:
       Binlog_Ignore_DB:
      Executed_Gtid_Set: aed33aee-0089-11ee-a4a7-0050569abce0:1-19
      1 row in set (0.00 sec)
       
      ERROR:
      No query specified
    • slave节点
      
      
      # 配置REPLICATION SOURCE 注意,在配置从节点账号时不要在主节点做写入操作,防止SOURCE_LOG_POS变化
      mysql> CHANGE REPLICATION SOURCE TO SOURCE_HOST='10.20.24.101',SOURCE_USER='slave',SOURCE_PASSWORD='123456',SOURCE_LOG_FILE='mysql-bin.000002',SOURCE_LOG_POS=157;
      # 开启复制
      mysql> start replica;
      mysql> show replica status\G;

    4. 开启半同步复制

    • master节点
      
      
      #登录mysql 安装半同步插件。mysql的半同步依靠插件进行
      mysql> install plugin rpl_semi_sync_master soname 'semisync_master.so';

      my.cnf添加配置

      
      
      [mysqld]
      rpl_semi_sync_source_enabled=1

      重启mysqld

      
      
      systemctl restart mysqld
    • slave节点
      
      
      # 登录mysql,安装半同步插件
      mysql> install plugin rpl_semi_sync_slave soname 'semisync_slave.so';

      my.cnf添加配置

      
      
      [mysqld]
      rpl_semi_sync_replica_enabled=1

      重启mysqld

      
      
      systemctl restart mysqld
    • 验证
      
      
      mysql> show status like '%semi%';
      mysql> show global variables like 'rpl_semi%';
      +---------------------------------------------+------------+
      | Variable_name                               | Value      |
      +---------------------------------------------+------------+
      # 设置为on表示开启了半同步功能
      | rpl_semi_sync_source_enabled                | ON         |
      # 单位是毫秒,表示如果主库等待从库回复消息的时间超过该值,就自动切换为异步复制模式
      | rpl_semi_sync_source_timeout                | 10000      |
      | rpl_semi_sync_source_trace_level            | 32         |
      # 它控制主库接收多少个从库写事物成功反馈,才返回成功给客户端
      | rpl_semi_sync_source_wait_for_replica_count | 1          |
      # 默认是ON。表示master每个事务提交后都要等待slave的接收确认信号
      | rpl_semi_sync_source_wait_no_replica        | ON         |
      # 默认值是AFTER_SYNC,含义是主库将每个事物写入binlog,并传递给从库,刷新到中继日志,主库开始等待从库的反馈,接收到从库的回复之后,再提交事物并且返回”commit ok”结果给客户端
      | rpl_semi_sync_source_wait_point             | AFTER_SYNC |

    相关文章

    服务器端口转发,带你了解服务器端口转发
    服务器开放端口,服务器开放端口的步骤
    产品推荐:7月受欢迎AI容器镜像来了,有Qwen系列大模型镜像
    如何使用 WinGet 下载 Microsoft Store 应用
    百度搜索:蓝易云 – 熟悉ubuntu apt-get命令详解
    百度搜索:蓝易云 – 域名解析成功但ping不通解决方案

    发布评论