Quellcode durchsuchen

update ha/mysql80

reghao vor 3 Wochen
Ursprung
Commit
33204fe072

+ 4 - 4
ha/clean.sh

@@ -8,6 +8,9 @@ bash_dir=`pwd`
 cd ${bash_dir}/mysql80
 docker compose -f docker-compose1.yml down
 
+cd ${bash_dir}/proxysql
+docker compose down
+
 cd ${bash_dir}/rabbitmq
 docker compose -f docker-compose1.yml down
 
@@ -18,7 +21,4 @@ cd ${bash_dir}/zookeeper
 docker compose -f docker-compose1.yml down
 
 # cd ${bash_dir}/nacos
-# docker compose -f docker-compose1.yml down
-
-# docker logs zookeeper
-# docker exec -it zookeeper zkServer.sh status
+# docker compose -f docker-compose1.yml down

+ 1 - 30
ha/mysql80/docker-compose1.yml

@@ -31,33 +31,4 @@ services:
       test: ["CMD", "mysqladmin", "ping", "-h", "127.0.0.1", "-u", "root", "-p$${MYSQL_ROOT_PASSWORD}"]
       interval: 5s
       timeout: 5s
-      retries: 10
-
-  proxysql:
-    image: registry.cn-chengdu.aliyuncs.com/reghao/proxysql_proxysql:8.0.36
-    container_name: proxysql
-    restart: always
-    network_mode: host
-    volumes:
-      - /etc/localtime:/etc/localtime:ro
-    # ProxySQL 日志限制
-    logging:
-      driver: "json-file"
-      options:
-        max-size: "50m"
-        max-file: "3"
-    # ProxySQL 资源限制(作为转发层,日常消耗极低)
-    deploy:
-      resources:
-        limits:
-          cpus: '1.0'
-          memory: 1G
-        reservations:
-          cpus: '0.5'
-          memory: 512M
-    healthcheck:
-      test: [ "CMD", "mysql", "-uadmin", "-padmin", "-h127.0.0.1", "-P6032", "-e", "SELECT 1" ]
-      interval: 10s
-      timeout: 5s
-      retries: 3
-      start_period: 10s
+      retries: 10

+ 0 - 43
ha/mysql80/init_mgr.sh

@@ -1,43 +0,0 @@
-#!/bin/bash
-
-ROOT_PASS="Root_123456"
-MGR_USER="repl"
-MGR_PASS="Repl_123456"
-
-echo ">>> 正在执行 MySQL 8.0.36 专用初始化流程 (绕过通道锁定)..."
-
-for i in 1 2 3; do
-echo "正在准备节点 mysql80-$i..."
-docker exec -i mysql80-$i mysql -uroot -p${ROOT_PASS} <<EOF
-STOP GROUP_REPLICATION;
-RESET MASTER;
-
-SET SQL_LOG_BIN=0;
-CREATE USER IF NOT EXISTS '${MGR_USER}'@'%' IDENTIFIED WITH mysql_native_password BY '${MGR_PASS}';
-GRANT REPLICATION SLAVE ON *.* TO '${MGR_USER}'@'%';
-GRANT BACKUP_ADMIN ON *.* TO '${MGR_USER}'@'%';
-FLUSH PRIVILEGES;
-SET SQL_LOG_BIN=1;
-EOF
-done
-
-# 2. 引导主节点 (在 START 时直接传入凭证)
-echo ">>> 引导主节点 mysql80-1..."
-docker exec -i mysql80-1 mysql -uroot -p${ROOT_PASS} <<EOF
-SET GLOBAL group_replication_bootstrap_group=ON;
-START GROUP_REPLICATION USER='${MGR_USER}', PASSWORD='${MGR_PASS}';
-SET GLOBAL group_replication_bootstrap_group=OFF;
-EOF
-
-# 3. 加入从节点 (同样在 START 时传入凭证)
-for i in 2 3; do
-    echo ">>> 加入从节点 mysql80-$i..."
-    docker exec -i mysql80-$i mysql -uroot -p${ROOT_PASS} -e "
-      START GROUP_REPLICATION USER='${MGR_USER}', PASSWORD='${MGR_PASS}';
-    "
-done
-
-echo "----------------------------------------"
-docker exec -i mysql80-1 mysql -uroot -p${ROOT_PASS} -e "
-SELECT MEMBER_HOST, MEMBER_STATE, MEMBER_ROLE FROM performance_schema.replication_group_members;
-"

+ 0 - 47
ha/mysql80/init_mysql80.sh

@@ -1,47 +0,0 @@
-#!/bin/bash
-
-set -e
-
-###############################################################################
-# 初始化时使用, 只能执行一次
-###############################################################################
-
-echo "init mysql80 cluster..."
-base_dir="/opt/docker/mysql80a"
-if [ -d ${base_dir} ]; then
-    echo ${base_dir}"已存在, 删除后重新创建..."
-    sudo rm -rf ${base_dir}
-fi
-# 准备工作
-mkdir -p ${base_dir}/data
-mkdir ${base_dir}/conf
-mkdir ${base_dir}/log
-chmod -R go+w ${base_dir}
-cp conf/my1.cnf ${base_dir}/conf/my.cnf
-
-base_dir="/opt/docker/mysql80b"
-if [ -d ${base_dir} ]; then
-    echo ${base_dir}"已存在, 删除后重新创建..."
-    sudo rm -rf ${base_dir}
-fi
-# 准备工作
-mkdir -p ${base_dir}/data
-mkdir ${base_dir}/conf
-mkdir ${base_dir}/log
-chmod -R go+w ${base_dir}
-cp conf/my2.cnf ${base_dir}/conf/my.cnf
-
-base_dir="/opt/docker/mysql80c"
-if [ -d ${base_dir} ]; then
-    echo ${base_dir}"已存在, 删除后重新创建..."
-    sudo rm -rf ${base_dir}
-fi
-# 准备工作
-mkdir -p ${base_dir}/data
-mkdir ${base_dir}/conf
-mkdir ${base_dir}/log
-chmod -R go+w ${base_dir}
-cp conf/my3.cnf ${base_dir}/conf/my.cnf
-
-# 启动
-docker compose up -d

+ 0 - 14
ha/mysql80/join_cluster.sh

@@ -1,14 +0,0 @@
-#!/bin/bash
-
-ROOT_PASS="Root_123456"
-MGR_USER="repl"
-MGR_PASS="Repl_123456"
-CONTAINER="mysql80-2"
-
-docker exec -i ${CONTAINER} mysql -uroot -p${ROOT_PASS} -e "
- START GROUP_REPLICATION USER='${MGR_USER}', PASSWORD='${MGR_PASS}';
-"
-
-docker exec -i ${CONTAINER} mysql -uroot -pRoot_123456  -e "
-SELECT * FROM performance_schema.replication_group_members;
-"

+ 85 - 0
ha/mysql80/mgr.md

@@ -0,0 +1,85 @@
+# 重新引导 MGR 集群, 这是集群重启后的典型状态
+
+# 根据 GTID 判断数据新旧
+docker exec -i mysql80-1 mysql -uroot -pRoot_123456  -e"
+SELECT @@global.gtid_executed;
+"
+
+# 假设 mysql80-1 节点的数据最新, 将其作为引导节点
+docker exec -i mysql80-1 mysql -uroot -pRoot_123456 -e "
+SET GLOBAL group_replication_bootstrap_group=ON;
+START GROUP_REPLICATION USER='repl', PASSWORD='Repl_123456';
+SET GLOBAL group_replication_bootstrap_group=OFF;
+"
+
+# docker exec -i mysql80-2 mysql -uroot -pRoot_123456  -e"
+# SELECT @@global.gtid_executed;
+# "
+
+# docker exec -i mysql80-2 mysql -uroot -pRoot_123456 -e "
+# START GROUP_REPLICATION USER='repl', PASSWORD='Repl_123456';
+# "
+
+# docker exec -i mysql80-3 mysql -uroot -pRoot_123456  -e"
+# SELECT @@global.gtid_executed;
+# "
+
+# docker exec -i mysql80-3 mysql -uroot -pRoot_123456 -e "
+# START GROUP_REPLICATION USER='repl', PASSWORD='Repl_123456';
+# "
+
+## 所有节点
+CONTAINER_NAME="mysql80-1"
+docker exec -i ${CONTAINER_NAME} mysql -uroot -pRoot_123456 -e "
+STOP GROUP_REPLICATION;
+"
+
+docker exec -i mysql80-1 mysql -uroot -pRoot_123456 -e "
+STOP GROUP_REPLICATION;
+"
+
+## master 节点
+```
+docker exec -i mysql80-1 mysql -uroot -pRoot_123456 -e "
+# RESET MASTER;  -- 这会情况所有数据
+RESET REPLICA ALL;
+"
+
+docker exec -i mysql80-1 mysql -uroot -pRoot_123456 -e "
+SET GLOBAL group_replication_bootstrap_group=ON;
+START GROUP_REPLICATION;
+SET GLOBAL group_replication_bootstrap_group=OFF;
+"
+```
+
+## slave 节点
+```
+docker exec -i mysql80-2 mysql -uroot -pRoot_123456 -e "
+STOP GROUP_REPLICATION;
+RESET MASTER;
+RESET REPLICA ALL;
+
+START GROUP_REPLICATION;
+"
+```
+
+## 查看从节点恢复状态
+### 检查连接错误:在从节点上运行以下命令,查看恢复通道的报错信息
+```
+docker exec -i mysql80-2 mysql -uroot -pRoot_123456 -e "
+SELECT * FROM performance_schema.replication_connection_status 
+WHERE CHANNEL_NAME = 'group_replication_recovery'\G
+"
+```
+
+### 查看具体报错:同样检查 replication_applier_status_by_worker 看看有没有拉取日志的报错
+```
+docker exec -i mysql80-2 mysql -uroot -pRoot_123456 -e "
+SELECT * FROM performance_schema.replication_applier_status_by_worker 
+WHERE CHANNEL_NAME = 'group_replication_recovery'\G
+"
+
+docker exec -i mysql80-2 mysql -uroot -pRoot_123456 -e "
+CHANGE REPLICATION SOURCE TO SOURCE_USER='repl', SOURCE_PASSWORD='Repl_123456' FOR CHANNEL 'group_replication_recovery';
+"
+```

+ 0 - 31
ha/mysql80/mgr_bootstrap.sh

@@ -1,31 +0,0 @@
-#!/bin/bash
-
-# 重新引导 MGR 集群, 这是集群重启后的典型状态
-
-# 根据 GTID 判断数据新旧
-docker exec -i mysql80-1 mysql -uroot -pRoot_123456  -e"
-SELECT @@global.gtid_executed;
-"
-
-# 假设 mysql80-1 节点的数据最新, 将其作为引导节点
-docker exec -i mysql80-1 mysql -uroot -pRoot_123456 -e "
-SET GLOBAL group_replication_bootstrap_group=ON;
-START GROUP_REPLICATION USER='repl', PASSWORD='Repl_123456';
-SET GLOBAL group_replication_bootstrap_group=OFF;
-"
-
-# docker exec -i mysql80-2 mysql -uroot -pRoot_123456  -e"
-# SELECT @@global.gtid_executed;
-# "
-
-# docker exec -i mysql80-2 mysql -uroot -pRoot_123456 -e "
-# START GROUP_REPLICATION USER='repl', PASSWORD='Repl_123456';
-# "
-
-# docker exec -i mysql80-3 mysql -uroot -pRoot_123456  -e"
-# SELECT @@global.gtid_executed;
-# "
-
-# docker exec -i mysql80-3 mysql -uroot -pRoot_123456 -e "
-# START GROUP_REPLICATION USER='repl', PASSWORD='Repl_123456';
-# "

+ 0 - 0
ha/mysql80/create_user.sh → ha/proxysql/create_user.sh


+ 30 - 0
ha/proxysql/docker-compose.yml

@@ -0,0 +1,30 @@
+services:
+  proxysql:
+    image: registry.cn-chengdu.aliyuncs.com/reghao/proxysql_proxysql:8.0.36
+    container_name: proxysql
+    restart: always
+    network_mode: host
+    volumes:
+      - /etc/localtime:/etc/localtime:ro
+      - /opt/docker/proxysql:/var/lib/proxysql
+    # ProxySQL 日志限制
+    logging:
+      driver: "json-file"
+      options:
+        max-size: "50m"
+        max-file: "3"
+    # ProxySQL 资源限制(作为转发层,日常消耗极低)
+    deploy:
+      resources:
+        limits:
+          cpus: '1.0'
+          memory: 1G
+        reservations:
+          cpus: '0.5'
+          memory: 512M
+    healthcheck:
+      test: [ "CMD", "mysql", "-uadmin", "-padmin", "-h127.0.0.1", "-P6032", "-e", "SELECT 1" ]
+      interval: 10s
+      timeout: 5s
+      retries: 3
+      start_period: 10s

+ 21 - 0
ha/proxysql/init_proxysql.sh

@@ -0,0 +1,21 @@
+#!/bin/bash
+
+set -e
+
+###############################################################################
+# 初始化时使用, 只能执行一次
+###############################################################################
+
+echo "init proxysql..."
+base_dir="/opt/docker/proxysql"
+if [ -d ${base_dir} ]; then
+    echo ${base_dir}"已存在, 删除后重新创建..."
+    sudo rm -rf ${base_dir}
+fi
+
+# 准备工作
+mkdir -p ${base_dir}/data
+chmod -R go+w ${base_dir}
+
+# 启动
+docker compose up -d

+ 3 - 3
ha/mysql80/init_proxysql.sh → ha/proxysql/init_proxysql0.sh

@@ -27,9 +27,9 @@ SAVE MYSQL QUERY RULES TO DISK;
 # 重新初始化 proxysql
 docker exec -i proxysql mysql -uadmin -padmin -h127.0.0.1 -P6032 <<EOF
 -- 1. 添加基础服务器信息(只需加入到一个默认组,MGR 模块会自动挪动它们)
-INSERT INTO mysql_servers(hostgroup_id, hostname, port) VALUES (10, 'mysql80-1', 3306);
-INSERT INTO mysql_servers(hostgroup_id, hostname, port) VALUES (10, 'mysql80-2', 3306);
-INSERT INTO mysql_servers(hostgroup_id, hostname, port) VALUES (10, 'mysql80-3', 3306);
+INSERT INTO mysql_servers(hostgroup_id, hostname, port) VALUES (10, 'node211', 3306);
+INSERT INTO mysql_servers(hostgroup_id, hostname, port) VALUES (10, 'node212', 3306);
+INSERT INTO mysql_servers(hostgroup_id, hostname, port) VALUES (10, 'node213', 3306);
 
 -- 2. 配置 MGR 自动切换规则 (注意 backup_writer_hostgroup 必填)
 INSERT INTO mysql_group_replication_hostgroups

+ 4 - 1
ha/zookeeper/init_node1.sh

@@ -16,4 +16,7 @@ chmod -R go+w ${base_dir}
 cp conf/zoo.cfg ${base_dir}/conf
 echo "1" > /opt/docker/zookeeper/data/myid
 
-docker compose -f docker-compose1.yml up -d
+docker compose -f docker-compose1.yml up -d
+
+# docker logs zookeeper
+# docker exec -it zookeeper zkServer.sh status