|
|
@@ -0,0 +1,74 @@
|
|
|
+#!/bin/bash
|
|
|
+
|
|
|
+##############################################################################
|
|
|
+# 在 mysql 和 proxysql 中同时创建用户
|
|
|
+##############################################################################
|
|
|
+
|
|
|
+# --- 配置区 ---
|
|
|
+# MySQL 管理员信息
|
|
|
+MYSQL_ADMIN="root"
|
|
|
+MYSQL_PASS="Root_123456"
|
|
|
+
|
|
|
+# ProxySQL 管理员信息
|
|
|
+PROXY_ADMIN="admin"
|
|
|
+PROXY_PASS="admin"
|
|
|
+PROXY_HOST="127.0.0.1"
|
|
|
+PROXY_PORT="6032"
|
|
|
+
|
|
|
+# 新用户信息
|
|
|
+NEW_USER=$1
|
|
|
+NEW_PASS=$2
|
|
|
+
|
|
|
+if [ -z "$NEW_USER" ] || [ -z "$NEW_PASS" ]; then
|
|
|
+ echo "使用方法: ./create_mgr_user.sh <用户名> <密码>"
|
|
|
+ exit 1
|
|
|
+fi
|
|
|
+
|
|
|
+echo ">>> 正在连接 ProxySQL 寻找当前的 Primary 节点..."
|
|
|
+# 获取 Hostgroup 10 中的第一个 ONLINE 节点
|
|
|
+PRIMARY_NODE=$(docker exec -i proxysql mysql -u$PROXY_ADMIN -p$PROXY_PASS -h$PROXY_HOST -P$PROXY_PORT -N -s -e "SELECT hostname FROM runtime_mysql_servers WHERE hostgroup_id=10 AND status='ONLINE' LIMIT 1;")
|
|
|
+
|
|
|
+if [ -z "$PRIMARY_NODE" ]; then
|
|
|
+ echo "错误: 无法在 ProxySQL 中找到在线的 Primary 节点!"
|
|
|
+ exit 1
|
|
|
+fi
|
|
|
+
|
|
|
+echo ">>> 发现 Primary 节点: $PRIMARY_NODE"
|
|
|
+
|
|
|
+# 1. 在 MySQL 中创建用户
|
|
|
+echo ">>> 步骤 1: 在 MySQL ($PRIMARY_NODE) 中创建用户..."
|
|
|
+docker exec -i proxysql mysql -h$PRIMARY_NODE -u$MYSQL_ADMIN -p$MYSQL_PASS <<EOF
|
|
|
+CREATE USER IF NOT EXISTS '$NEW_USER'@'%' IDENTIFIED WITH mysql_native_password BY '$NEW_PASS';
|
|
|
+GRANT ALL PRIVILEGES ON *.* TO '$NEW_USER'@'%';
|
|
|
+FLUSH PRIVILEGES;
|
|
|
+EOF
|
|
|
+
|
|
|
+if [ $? -eq 0 ]; then
|
|
|
+ echo "√ MySQL 用户创建成功"
|
|
|
+else
|
|
|
+ echo "× MySQL 用户创建失败"
|
|
|
+ exit 1
|
|
|
+fi
|
|
|
+
|
|
|
+# 2. 在 ProxySQL 中登记用户
|
|
|
+echo ">>> 步骤 2: 在 ProxySQL 中同步用户信息..."
|
|
|
+docker exec -i proxysql mysql -u$PROXY_ADMIN -p$PROXY_PASS -h$PROXY_HOST -P$PROXY_PORT <<EOF
|
|
|
+-- 删除旧记录防止冲突
|
|
|
+DELETE FROM mysql_users WHERE username='$NEW_USER';
|
|
|
+-- 插入新用户,默认指向写组 10
|
|
|
+INSERT INTO mysql_users(username, password, default_hostgroup) VALUES ('$NEW_USER', '$NEW_PASS', 10);
|
|
|
+
|
|
|
+LOAD MYSQL USERS TO RUNTIME;
|
|
|
+SAVE MYSQL USERS TO DISK;
|
|
|
+EOF
|
|
|
+
|
|
|
+if [ $? -eq 0 ]; then
|
|
|
+ echo "√ ProxySQL 用户同步成功"
|
|
|
+else
|
|
|
+ echo "× ProxySQL 用户同步失败"
|
|
|
+ exit 1
|
|
|
+fi
|
|
|
+
|
|
|
+echo "------------------------------------------------"
|
|
|
+echo "恭喜!用户 $NEW_USER 已创建完毕。"
|
|
|
+echo "现在你可以尝试通过 Navicat 连接 127.0.0.1:6033 了。"
|