Skip to content

部署Mysql

  • Mysql版本:8.0.44
  • proxysql版本:

MGR模式要求

  • 仅支持 IPv4 网络,组大小限制为最少3个节点、最多9个节点。
registry.cn-hangzhou.aliyuncs.com/istr_office/open:mysql-8.0.44
mkdir {conf,data}

[root@noce1 MGR]# tree
.
├── conf
│ └── my.cnf #配置文件
├── data
└── mysql.yml #启动文件

配置文件(my.cnf)

ini
[mysqld]
server-id=1
log-bin=mysql-bin-1.log
binlog-format=ROW
# 开启binlog的GTID模式(MGR强制要求)
gtid-mode=ON
enforce-gtid-consistency=ON
log-slave-updates=ON
binlog-checksum=NONE
master-info-repository=TABLE
relay-log-info-repository=TABLE
transaction-write-set-extraction=XXHASH64
#以下MGR配置
loose-group-replication-group-name=aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee
loose-group-replication-start-on-boot=OFF
loose-group-replication-local-address=192.168.1.10:33061  #本机ip
loose-group-replication-group-seeds=192.168.1.10:33061,192.168.1.20:33061,192.168.1.30:33061  #所有节点ip
loose-group-replication-bootstrap-group=OFF   
loose-group-replication-single-primary-mode=ON
loose-group-replication-enforce-update-everywhere-checks=OFF
  • server-id 每个节点的必须唯一。
  • log-bin=mysql-bin-1.log 行级 binlog,MGR 硬性要求 ROW 格式。
  • enforce-gtid-consistency 禁止任何会破坏 GTID 一致性的语句(如 CREATE TEMPORARY TABLECREATE TABLE ... SELECT),MGR 强制要求打开,否则无法启动组复制。
  • binlog-checksum MySQL 8.0.20 之前的 MGR 要求关闭 binlog 校验和(因为早期组通信层不支持),8.0.20 及以后可以改为 CRC32,保持默认即可,但旧版本必须显式设置为 NONE
  • group-name 给整个 MGR 组起一个全局唯一的名字(UUID 格式),
  • start-on-boot MySQL 实例启动时不自动启动 Group Replication 插件,这个参数如果设置为 OFF,当坏掉的节点修复后,不会自动加入集群。
  • local-address 本机ip
  • group-seed 种子列表,告诉当前节点“初次加入组时可以去找谁”。只要列表中的任意一个节点在线,新节点就能拿到完整的成员信息并加入组。通常把所有成员都写上,方便任何顺序启动。
  • bootstrap-group ,用来创建组;之后必须立即改回 OFF 并重启,否则会出现“脑裂”或成员冲突(这个配置可不改,通过下面sql形式进行开关)
  • single-primary-mode 打开单主模式(Single-Primary),组内只有一台节点可写(primary),其余为只读(secondaries),主节点故障时自动重新选举
  • enforce-update-everywhere-checks 在多主模式下才生效;单主模式可保持 OFF

启动文件

yaml
services:
  mysql:
    image: registry.cn-hangzhou.aliyuncs.com/istr_office/open:mysql-8.0.44
    container_name: mysql
    command: ["mysqld"]
    environment:
      MYSQL_ROOT_PASSWORD: 123456789   
    volumes:
      - ./data/:/var/lib/mysql
      - ./conf/my.cnf:/etc/mysql/conf.d/mysql-master.cnf
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-p$$MYSQL_ROOT_PASSWORD"]
      interval: 10s
      timeout: 5s
      retries: 5
  • MySQL 节点端口 :3306
  • MGR 通信端口:33061

集群初始化

3.1 进入容器 进入数据库

bash
docker exec -it mysql bash 
mysql -uroot -p123456789

3.2 每个节点都要执行

sql
-- 创建复制用户
CREATE USER 'repl_user'@'%' IDENTIFIED BY 'repl_password';
GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'%';
GRANT BACKUP_ADMIN ON *.* TO 'repl_user'@'%';
FLUSH PRIVILEGES;

reset master;

3.3 上面执行完在执行下面。每个节点都要

sql
INSTALL PLUGIN group_replication SONAME 'group_replication.so';

启动集群

4.1 主节点执行

sql
CHANGE MASTER TO MASTER_USER='repl', MASTER_PASSWORD='123456' FOR CHANNEL 'group_replication_recovery'; 
SET GLOBAL group_replication_bootstrap_group=ON; 
START GROUP_REPLICATION; SET GLOBAL group_replication_bootstrap_group=OFF;

SELECT * FROM performance_schema.replication_group_members;

4.2 从节点执行,上面执行完最好等10秒

sql
CHANGE MASTER TO MASTER_USER='repl', MASTER_PASSWORD='123456' FOR CHANNEL 'group_replication_recovery';
START GROUP_REPLICATION;

SELECT * FROM performance_schema.replication_group_members;

image

部署proxysql

端口介绍

  • 6032 proxysql本身端口

  • 6033 程序连接端口

创建必要用户

MGR主节点上创建一个用于ProxySQL监控的用户,后面配置用到。

sql
CREATE USER 'monitor'@'%' IDENTIFIED WITH mysql_native_password BY 'Jack_2025';
GRANT USAGE, REPLICATION CLIENT ON *.* TO 'monitor'@'%';
GRANT SELECT on sys.* to 'monitor'@'%';
GRANT SELECT on performance_schema.* to 'monitor'@'%';
FLUSH PRIVILEGES;

二、配置文件准备

docker-compose.yml

yaml
services:
  proxysql:
    image: proxysql/proxysql:3.0.4
    container_name: proxysql
    ports:
      - "6032:6032"
      - "6033:6033"
    privileged: true
    restart: always
    volumes:
      - "./proxysql.cnf:/etc/proxysql.cnf"

5.1 进入数据库

#进入容器
docker exec -it proxysql bash 
#进入proxysql自身数据库 6032端口
mysql -u admin -pJack_2025 -h 127.0.0.1 -P6032 --prompt='Admin> '
 

 

select hostgroup_id, hostname,port, status  from runtime_mysql_servers;
 

 

 

select  time_start_us, hostname,  port,  viable_candidate,  read_only, transactions_behind,  error  from mysql_server_group_replication_log   order by time_start_us desc   limit 6;

read_only 字段为 NO 的表示主节点,为YES的表示从节点,hostname会将名称和IP都记录上

使用Navicat 采用 6033 端口连接ProxySQL看下是否可以成功连接上MySQL主节点。

proxysql

https://hub.docker.com/r/proxysql/proxysql

  • MySQL Group Replication 是 MySQL 内部实现的分布式复制协议,提供了强一致性。是 InnoDB Cluster 的核心组件。

集群架构类型对比

架构类型优点缺点适用场景
主从复制读写分离、备份单点故障、延迟中小规模应用
主主复制高可用、读写分离数据冲突风险,需要vip双活数据中心
MHA(软件)自动故障切换配置复杂重要业务系统
InnoDB Cluster自动化管理技术较新新建项目
MGR (MySQL Group Replication)

主主备份(keepalived)https://blog.csdn.net/qq_36120342/article/details/135144464

MHA InnoDB Cluster https://developer.aliyun.com/article/1687392

MGR https://www.cnblogs.com/namedgx/p/19159756

https://www.cnblogs.com/clnchanpin/p/19445620

MySQL 配置文件(通常是 my.cnfmy.ini)的参数名称是大小写不敏感的,并且可以使用连字符(-)或下划线(_)作为分隔符。

最近更新