gpt4 book ai didi

mysql - 为什么我可以使用 SELECT 读取 MySQL 表,但有时无法 INSERT 或 UPDATE?

转载 作者:行者123 更新时间:2023-11-29 12:58:33 28 4
gpt4 key购买 nike

我有一个困扰我很长时间的 MySQL 问题。为什么有时一个表可以SELECT但不能UPDATEINSERT

可能是表锁的原因。但我尝试了“SHOW OPEN TABLES”,它没有显示表被锁定。

还有其他原因会导致这个问题吗?

最佳答案

Why sometimes a table is able to be SELECT but not able to be UPDATE or INSERT?

很可能是因为您连接的用户没有 UPDATEINSERT 权限。您可以在 MySQL 中使用如下命令来检查您拥有哪些GRANTS:

SHOW GRANTS FOR 'user_name'@'localhost';

请务必将 user_name 更改为您用于连接服务器的用户名。另请确保 localhost 与您要连接的主机匹配。但话虽如此,MySQL GRANTS 可能会令人困惑。例如,我见过一些服务器——当我必须清理别人的工作时——其中 localhost 不起作用,但 127.0.0.1 可以工作,因此您可能需要像这样运行上面的命令:

SHOW GRANTS FOR 'user_name'@'127.0.0.1';

如果您需要调整您的GRANTS,那么您可以运行此命令;请务必更改 database_nameuser_namelocalhostpassword 以匹配您的设置:

GRANT USAGE ON `database_name`.* TO 'user_name'@'localhost' IDENTIFIED BY 'password';
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, EVENT, TRIGGER ON `database_name`.* TO 'user_name'@'localhost';

第一行GRANT USAGE向用户授予数据库的基本使用权。下一行授予特定的访问权限,这是一个相当常见的堆栈,也允许访问数据库中的SELECTUPDATEINSERT项与其他杂项一样。

也就是说,根据您的评论,这可能是一个问题,即有权访问该数据库的某人或某些代码正在运行 LOCK TABLES会导致您所描述的行为的声明。工作完成后, table 将被锁定。然后,之后将运行 UNLOCK TABLES 以允许 UPDATEINSERT 命令通过。

如果您希望调试并拥有服务器级别的访问权限,您可能需要暂时启用 MySQL 日志记录以查看正在通过哪些查询。但请记住:激活 MySQL 日志会占用大量资源,并且会降低服务器速度。仅在您知道可以安全测试的窗口期间执行此操作。

以 Ubuntu 12.04 服务器设置为例,您可以像这样打开 MySQL 配置文件:

sudo nano /etc/mysql/my.cnf

然后搜索 general_log_filegeneral_log 的设置,应将其注释掉,如下所示:

# * Logging and Replication
#
# Both location gets rotated by the cronjob.
# Be aware that this log type is a performance killer.
# As of 5.1 you can enable the log at runtime!
#general_log_file = /var/log/mysql/mysql.log
#general_log = 1

取消注释 general_log_filegeneral_log,然后重新启动 MySQL,如下所示:

sudo service mysql restart

现在您可以使用 tail 来跟踪 MySQL 日志:

sudo tail -f -n 200 /var/log/mysql/mysql.log

如果您看到其中弹出LOCK TABLES,您就知道这就是原因。要禁用日志记录,只需注释掉这些行并再次重新启动 MySQL。

关于mysql - 为什么我可以使用 SELECT 读取 MySQL 表,但有时无法 INSERT 或 UPDATE?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23668440/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com