| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- #!/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 了。"
|