You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Bash脚本为test_user授予test开头MySQL库的LOCK TABLES权限

问题根本原因

你的报错是Shell转义规则和MySQL语法转义规则两层冲突导致的:

  1. 双引号包裹的Shell参数中,反引号会被识别为「命令替换」标记,Shell会尝试执行反引号内的内容,而非直接传给MySQL
  2. 你额外加的反斜杠转义符会被Shell先解析吃掉一层,传到MySQL侧就变成了无效的转义语法,触发Unknown command '\%'报错

正确可执行命令

优先用单引号包裹整个SQL语句,Shell不会解析单引号内的特殊字符,可直接把完整语法传给MySQL:

# 直接执行授权,不需要提前use mysql库
mysql -u$user -p$pass -S $SOCK -e 'GRANT LOCK TABLES ON `test%`.* TO "test_user"@"%";'
# 授权完成后刷新权限使配置即时生效
mysql -u$user -p$pass -S $SOCK -e 'FLUSH PRIVILEGES;'

如果你的MySQL数据库名没有特殊字符,也可以省略标识符反引号,写法更简单:

mysql -u$user -p$pass -S $SOCK -e 'GRANT LOCK TABLES ON test%.* TO "test_user"@"%"; FLUSH PRIVILEGES;'

补充说明

  • 如果你使用的是MySQL 8.0及以上版本,授权前需要先确认test_user已存在,不存在的话先执行创建用户语句:CREATE USER 'test_user'@'%' IDENTIFIED BY '用户对应的密码'; 再执行授权操作,避免报错。
  • 不需要给%加额外的反斜杠转义,MySQL原生支持%作为通配符匹配数据库名。

内容的提问来源于stack exchange,提问作者Lenster

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 05:15:02