如何批量为多台MariaDB服务器的同名表授权相同用户?
批量给50台MariaDB服务器的同一用户授权方案
既然已经配置了SSH免密登录,完全可以通过批量脚本或运维工具一次性完成授权操作,下面是两种实用方案:
方案一:Bash批量脚本(快速上手)
1. 准备服务器列表
创建一个文本文件server_list.txt,每行写一台服务器的IP或主机名:
192.168.1.10 192.168.1.11 # ... 剩下的48台服务器
2. 编写批量执行脚本
创建grant_privs.sh脚本,替换里面的占位符为你的实际信息:
#!/bin/bash # 替换为你的实际参数 DB_USER="target_user" CLIENT_IP="10.0.0.0/24" # 允许该IP段访问,如需任意IP用'%'(不推荐) TARGET_DB="your_database" DB_PASS="user_password" ROOT_PASS="mariadb_root_password" SERVER_LIST="./server_list.txt" # 遍历所有服务器执行授权 while read -r server; do echo "正在处理服务器:$server" ssh "$server" "mysql -u root -p'$ROOT_PASS' -e \"GRANT ALL PRIVILEGES ON $TARGET_DB.* TO '$DB_USER'@'$CLIENT_IP' IDENTIFIED BY '$DB_PASS'; FLUSH PRIVILEGES;\"" done < "$SERVER_LIST"
3. 执行脚本
给脚本加执行权限并运行:
chmod +x grant_privs.sh ./grant_privs.sh
安全提示
不要在脚本里明文写密码!可以在目标服务器的root用户下创建~/.my.cnf文件,内容如下:
[mysql] user=root password=your_root_password
然后脚本里的mysql命令可以简化为mysql -e "...",避免密码暴露。
方案二:使用Ansible(适合长期运维)
如果经常需要批量管理服务器,Ansible会更高效、规范:
1. 准备Inventory文件
创建inventory.ini,列出所有服务器:
[mariadb_servers] 192.168.1.10 192.168.1.11 # ... 其他服务器
2. 编写Playbook
创建grant_db_privs.yml:
--- - name: 批量授予MariaDB用户权限 hosts: mariadb_servers tasks: - name: 执行授权操作 mysql_user: name: target_user password: user_password priv: your_database.*:ALL host: 10.0.0.0/24 state: present login_user: root login_password: mariadb_root_password
3. 执行Playbook
ansible-playbook -i inventory.ini grant_db_privs.yml
注意事项
- 先在单台服务器测试授权命令,确认生效后再批量执行
- 如果用户已经存在,授权命令会更新其权限,不会创建重复用户
- 尽量限制
CLIENT_IP的范围,不要用'%'(允许所有IP),避免安全风险
内容的提问来源于stack exchange,提问作者Anu A
相关产品推荐
相关产品推荐

