create_mgr_user.sh 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. #!/bin/bash
  2. ##############################################################################
  3. # 在 mysql 和 proxysql 中同时创建用户
  4. ##############################################################################
  5. # --- 配置区 ---
  6. # MySQL 管理员信息
  7. MYSQL_ADMIN="root"
  8. MYSQL_PASS="Root_123456"
  9. # ProxySQL 管理员信息
  10. PROXY_ADMIN="admin"
  11. PROXY_PASS="admin"
  12. PROXY_HOST="127.0.0.1"
  13. PROXY_PORT="6032"
  14. # 新用户信息
  15. NEW_USER=$1
  16. NEW_PASS=$2
  17. if [ -z "$NEW_USER" ] || [ -z "$NEW_PASS" ]; then
  18. echo "使用方法: ./create_mgr_user.sh <用户名> <密码>"
  19. exit 1
  20. fi
  21. echo ">>> 正在连接 ProxySQL 寻找当前的 Primary 节点..."
  22. # 获取 Hostgroup 10 中的第一个 ONLINE 节点
  23. 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;")
  24. if [ -z "$PRIMARY_NODE" ]; then
  25. echo "错误: 无法在 ProxySQL 中找到在线的 Primary 节点!"
  26. exit 1
  27. fi
  28. echo ">>> 发现 Primary 节点: $PRIMARY_NODE"
  29. # 1. 在 MySQL 中创建用户
  30. echo ">>> 步骤 1: 在 MySQL ($PRIMARY_NODE) 中创建用户..."
  31. docker exec -i proxysql mysql -h$PRIMARY_NODE -u$MYSQL_ADMIN -p$MYSQL_PASS <<EOF
  32. CREATE USER IF NOT EXISTS '$NEW_USER'@'%' IDENTIFIED WITH mysql_native_password BY '$NEW_PASS';
  33. GRANT ALL PRIVILEGES ON *.* TO '$NEW_USER'@'%';
  34. FLUSH PRIVILEGES;
  35. EOF
  36. if [ $? -eq 0 ]; then
  37. echo "√ MySQL 用户创建成功"
  38. else
  39. echo "× MySQL 用户创建失败"
  40. exit 1
  41. fi
  42. # 2. 在 ProxySQL 中登记用户
  43. echo ">>> 步骤 2: 在 ProxySQL 中同步用户信息..."
  44. docker exec -i proxysql mysql -u$PROXY_ADMIN -p$PROXY_PASS -h$PROXY_HOST -P$PROXY_PORT <<EOF
  45. -- 删除旧记录防止冲突
  46. DELETE FROM mysql_users WHERE username='$NEW_USER';
  47. -- 插入新用户,默认指向写组 10
  48. INSERT INTO mysql_users(username, password, default_hostgroup) VALUES ('$NEW_USER', '$NEW_PASS', 10);
  49. LOAD MYSQL USERS TO RUNTIME;
  50. SAVE MYSQL USERS TO DISK;
  51. EOF
  52. if [ $? -eq 0 ]; then
  53. echo "√ ProxySQL 用户同步成功"
  54. else
  55. echo "× ProxySQL 用户同步失败"
  56. exit 1
  57. fi
  58. echo "------------------------------------------------"
  59. echo "恭喜!用户 $NEW_USER 已创建完毕。"
  60. echo "现在你可以尝试通过 Navicat 连接 127.0.0.1:6033 了。"