求助:解决mysqltuner执行JSON相关SQL语句报错(返回码256)
解决MySQLTuner执行SQL报错问题
报错原因分析
这条报错是MySQLTuner在检测空密码账号时执行SQL失败,错误码256通常关联SQL语法错误、表不存在或权限不足。
解决方案
版本适配修正
若你的MySQL版本是5.x系列,不存在mysql.global_priv表,需改用mysql.user表,替换后的SQL语句:SELECT CONCAT(QUOTE(user), '@', QUOTE(host)) FROM mysql.user WHERE user != '' AND plugin = 'mysql_native_password' AND authentication_string = '' AND account_locked = 'N'修正JSON语法
原SQL中的"是HTML转义字符,MySQL无法识别,需替换为原生双引号,同时优化JSON查询逻辑,正确的SQL:SELECT CONCAT(QUOTE(user), '@', QUOTE(host)) FROM mysql.global_priv WHERE user != '' AND JSON_CONTAINS(Priv, '"mysql_native_password"', '$.plugin') AND JSON_CONTAINS(Priv, '""', '$.authentication_string') AND NOT JSON_CONTAINS(Priv, 'true', '$.account_locked')或更直观的JSON提取写法:
SELECT CONCAT(QUOTE(user), '@', QUOTE(host)) FROM mysql.global_priv WHERE user != '' AND JSON_EXTRACT(Priv, '$.plugin') = '"mysql_native_password"' AND JSON_EXTRACT(Priv, '$.authentication_string') = '""' AND JSON_EXTRACT(Priv, '$.account_locked') != 'true'检查并授权权限
确保执行MySQLTuner的账号拥有mysql.global_priv表的查询权限,执行以下语句授权:GRANT SELECT ON mysql.global_priv TO '你的用户名'@'你的主机地址'; FLUSH PRIVILEGES;
内容的提问来源于stack exchange,提问作者oldgit71
相关产品推荐
相关产品推荐

