如何针对MySQL备份账号分配最小化的LOCK TABLES权限?

雨强吖_2085

雨强吖_2085

2026-06-10

276人浏览

原创

lock tables 权限只能全局授予,必须用 on .;不能按库或表限定,否则报错error 1221;即使只备份单库也须如此授权,且需与select等库级权限分开授予。

如何针对mysql备份账号分配最小化的lock tables权限?

LOCK TABLES 权限不能按库授予,必须用 ON *.*

很多人写 GRANT LOCK TABLES ON app_db.* TO 'backup'@'%',结果 MySQL 直接报错 ERROR 1221 (HY000): Incorrect usage of DB GRANT and GLOBAL PRIVILEGES。这是因为 LOCK TABLES 是全局权限(global privilege),MySQL 强制要求它只能在 ON *.* 层级声明,不支持库级或表级限定。

正确写法只有这一种形式:GRANT LOCK TABLES ON *.* TO 'backup_user'@'10.20.30.%'。即使你只打算备份 app_db,也得这么授——它不影响安全性,因为 LOCK TABLES 本身不赋予读、写、删能力,只是允许执行 LOCK TABLES t1 READ 这类语句。

常见误操作:

  • 混用 SELECT(库级)和 LOCK TABLES(全局)时,误以为可以合并写成一条 GRANT ... ON app_db.* —— 实际必须拆开:一条给 SELECT, SHOW VIEW, TRIGGER ON app_db.*,另一条单独给 LOCK TABLES ON *.*
  • 用 REVOKE ALL PRIVILEGES ON *.* 清理账号后忘了重授 LOCK TABLES ON *.*,导致后续备份突然失败
  • 在 MySQL 8.0+ 中通过角色赋权,但角色本身没在全局层级被授予 LOCK TABLES,权限不生效

什么时候真正需要 LOCK TABLES 权限?

LOCK TABLES 不是“每次备份都必须”,它的实际触发取决于 mysqldump 的参数组合和存储引擎:

  • 显式用了 --lock-tables 或 --lock-all-tables → 必须有 LOCK TABLES(且通常还需 RELOAD 配合 FLUSH TABLES WITH READ LOCK)
  • 用了 --single-transaction(InnoDB 默认行为)→ LOCK TABLES 不会被调用,但若该参数因版本低(mysqldump 会自动 fallback 到锁表逻辑,此时缺权限就直接报错
  • 备份含 MyISAM 表 → --single-transaction 无效,LOCK TABLES 成为唯一一致性保障手段,必须存在

所以生产环境建议:哪怕主用 --single-transaction,也保留 LOCK TABLES ON *.* 作为降级兜底,避免某次备份因意外 fallback 而中断。

和 SELECT 权限必须同时存在,否则备份仍会失败

只给 LOCK TABLES ON *.*,不配 SELECT,mysqldump 会在第一步就读表时报错:Access denied; you need (at least one of) the SELECT privilege(s)。锁表不是目的,读数据才是核心。

多面-AI面试
多面-AI面试

一款面向招聘与求职场景的AI面试平台,可通过智能化面试流程辅助企业评估候选人并帮助求职者进行面试练习。

下载

典型权限组合(以备份 app_db 为例):

  • GRANT SELECT, SHOW VIEW, TRIGGER ON `app_db`.* TO 'backup_user'@'10.20.30.%'
  • GRANT LOCK TABLES ON *.* TO 'backup_user'@'10.20.30.%'
  • 如需 --master-data 或 GTID 信息,额外加:GRANT REPLICATION CLIENT ON *.* TO 'backup_user'@'10.20.30.%'

注意反引号:`app_db` 必须包裹库名,否则库名含短横(如 my-app)会语法报错;而 *.* 不需要引号。

验证 LOCK TABLES 是否真生效,别只信 GRANT 语句

执行完 GRANT 后必须 FLUSH PRIVILEGES,否则权限不加载(尤其在跳过 grant 表启动的实例上更明显)。验证不能只看命令是否执行成功,要登录后手动测:

  • 用备份账号连接:mysql -u backup_user -p -h 10.20.30.5
  • 执行:LOCK TABLES app_db.users READ; —— 成功即说明 LOCK TABLES 有效
  • 再执行:SELECT COUNT(*) FROM app_db.users; —— 成功说明 SELECT 也到位

如果第二步失败,检查点包括:库名大小写(Linux 下敏感)、host 匹配是否精确('backup_user'@'10.20.30.%' 无法匹配本地 localhost 连接)、是否漏了 FLUSH PRIVILEGES。

最易忽略的是 host 匹配细节:LOCK TABLES 授权里的 @'10.20.30.%' 和实际连接来源 IP 必须一致,否则权限查不到——这比权限类型错误更难排查。

相关专题

更多
mysql修改数据表名
mysql修改数据表名

MySQL修改数据表:1、首先查看数据库中所有的表,代码为:‘SHOW TABLES;’;2、修改表名,代码为:‘ALTER TABLE 旧表名 RENAME [TO] 新表名;’。php中文网还提供MySQL的相关下载、相关课程等内容,供大家免费下载使用。

2023.06.20

2333

6

MySQL创建存储过程
MySQL创建存储过程

存储程序可以分为存储过程和函数,MySQL中创建存储过程和函数使用的语句分别为CREATE PROCEDURE和CREATE FUNCTION。使用CALL语句调用存储过程智能用输出变量返回值。函数可以从语句外调用(通过引用函数名),也能返回标量值。存储过程也可以调用其他存储过程。php中文网还提供MySQL创建存储过程的相关下载、相关课程等内容,供大家免费下载使用。

2023.06.21

1419

5

mongodb和mysql的区别
mongodb和mysql的区别

mongodb和mysql的区别:1、数据模型;2、查询语言;3、扩展性和性能;4、可靠性。本专题为大家提供mongodb和mysql的区别的相关的文章、下载、课程内容,供大家免费下载体验。

2023.07.18

835

5

mysql密码忘了怎么查看
mysql密码忘了怎么查看

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql密码忘了怎么办呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.07.19

3272

5

mysql创建数据库
mysql创建数据库

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql怎么创建数据库呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.07.25

5568

4

mysql默认事务隔离级别
mysql默认事务隔离级别

MySQL是一种广泛使用的关系型数据库管理系统,它支持事务处理。事务是一组数据库操作,它们作为一个逻辑单元被一起执行。为了保证事务的一致性和隔离性,MySQL提供了不同的事务隔离级别。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

2023.08.08

1219

3

sqlserver和mysql区别
sqlserver和mysql区别

SQL Server和MySQL是两种广泛使用的关系型数据库管理系统。它们具有相似的功能和用途,但在某些方面存在一些显著的区别。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.11

5831

4

mysql忘记密码
mysql忘记密码

MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。那么忘记mysql密码我们该怎么解决呢?php中文网给大家带来了相关的教程以及其他关于mysql的文章,欢迎大家前来学习阅读。

2023.08.14

5062

7

mysql事务隔离级别
mysql事务隔离级别

mysql规范中定义了四种事务隔离级别,不同的隔离级别对事务的处理有所不同。本专题为大家提供mysql事务隔离级别相关的文章内容,大家可以免费体验。

2023.08.16

6774

11

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Revel 官方入门教程
Revel 官方入门教程

共0课时 | 0人学习

OpenJDK构建指南
OpenJDK构建指南

共0课时 | 0人学习

Conan 2 新特性与架构变化
Conan 2 新特性与架构变化

共0课时 | 0人学习