MySQL 权限困境:从权限丢失到权限重生的完整解决方案20241108


🛠️ MySQL 权限困境:从权限丢失到权限重生的完整解决方案


引言

在使用 MySQL 的过程中,我们常常会遇到权限设置不当或丢失的问题,特别是在初次安装或配置更改后。这种权限困境的修复不仅复杂,而且往往是环环相扣:一个问题的解决往往会引发另一个新问题。本文将带您深入解析解决 MySQL 权限问题的每一步骤,帮助您在未来面对类似的权限故障时游刃有余。


目录

  1. MySQL root 权限丢失:恢复权限的第一步
  2. mysqld_safe 启动失败:UNIX 套接字目录问题
  3. 视图定义错误 (ERROR 1449):缺失的定义者账户
  4. 初始化数据目录权限错误:OS errno 13
  5. MySQL 服务连接失败:套接字文件不可用
  6. 权限修改限制:跳过权限表模式下无法更新 root
  7. 远程访问权限配置
  8. 用户创建失败 (ERROR 1396):用户已存在
  9. 旧客户端连接失败:修改认证插件以支持兼容性

🔍 MySQL 权限问题的层层解锁

以下将从「发现问题 - 分析问题 - 解决问题」三个步骤详细阐述每个环节,为您提供逐步深入的专业指南。


1. MySQL root 权限丢失:恢复权限的第一步

  • 问题概述:以 root 用户无密码登录 MySQL,发现无法执行如 GRANTUSE mysql 等操作。
发现问题

执行 MySQL 操作命令时,提示「权限不足」,无法完成所需权限分配任务。

分析问题

MySQL 的 root 用户缺少管理权限,可能是在初始安装或配置过程中导致的权限丢失。

解决问题
  1. 停止 MySQL 服务:
   sudo service mysql stop
  1. 以跳过权限表模式启动 MySQL:
   sudo mysqld_safe --skip-grant-tables &
  1. 无密码登录 MySQL:
   mysql -u root
  1. 刷新权限并恢复 root 权限:
   FLUSH PRIVILEGES;USE mysql;UPDATE user SET Grant_priv='Y', Super_priv='Y' WHERE User='root';ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';
  1. 重启 MySQL 服务并验证 root 权限是否恢复:
   sudo pkill mysqld_safesudo service mysql startmysql -u root -pUSE mysql;SHOW TABLES;

2. mysqld_safe 启动失败:UNIX 套接字目录问题

  • 问题概述:在执行 mysqld_safe --skip-grant-tables 时,报错「套接字目录不存在」。
发现问题

尝试执行 mysqld_safe --skip-grant-tables 时收到错误提示,显示系统缺少套接字目录。

分析问题

MySQL 所需的 UNIX 套接字目录 /var/run/mysqld 不存在或权限设置错误,可能由于目录被删除或配置文件设置不当。

解决问题
  1. 确保切换到有效的工作目录,避免 getcwd 错误:
   cd ~
  1. 创建套接字目录并设置权限:
   sudo mkdir -p /var/run/mysqldsudo chown mysql:mysql /var/run/mysqld
  1. 以跳过权限表模式重新启动 MySQL:
   sudo mysqld_safe --skip-grant-tables &
  1. 登录 MySQL 并恢复权限:
   FLUSH PRIVILEGES;ALTER USER 'root'@'localhost' IDENTIFIED BY 'your_new_password';GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION;

3. 视图定义错误 (ERROR 1449):缺失的定义者账户

  • 问题概述:执行视图定义查询时,报错 “The user specified as a definer … does not exist”。
发现问题

查询 MySQL 视图时,提示定义者(DEFINER)账户不存在。

分析问题

安装过程中未正确创建系统用户,导致 MySQL 中的系统视图引用的用户缺失。

解决问题

如无重要数据,推荐重置 MySQL 的数据目录来修复此问题。

  1. 停止 MySQL 服务:
   sudo service mysql stop
  1. 重命名或删除数据目录:
  sudo mv /var/lib/mysql /var/lib/mysql_backup
  1. 重新初始化数据目录:
   sudo mysqld --initialize --user=mysql --basedir=/usr --datadir=/var/lib/mysql
  1. 启动 MySQL 服务并获取临时 root 密码:
  sudo service mysql startsudo grep 'temporary password' /var/log/mysql/error.log
  1. 登录并重设 root 密码:
  ALTER USER 'root'@'localhost' IDENTIFIED BY 'YourNewPassword!';

4. 初始化数据目录权限错误:OS errno 13

  • 问题概述:初始化数据目录时出现 “OS errno 13” 错误,提示权限不足。
发现问题

初始化 MySQL 数据目录时,报错提示操作权限不足,无法创建或写入所需文件。

分析问题

MySQL 服务器无法在 /var/lib/mysql 目录中创建文件,可能是由于权限设置不当导致。

解决问题
  1. 创建数据目录并设置权限:
  sudo mkdir /var/lib/mysqlsudo chown mysql:mysql /var/lib/mysqlsudo chmod 750 /var/lib/mysql
  1. 重新初始化数据目录:
  sudo mysqld --initialize --user=mysql --basedir=/usr --datadir=/var/lib/mysql

5. MySQL 服务连接失败:套接字文件不可用

  • 问题概述:客户端无法连接到服务器,报错显示套接字文件不可用。
发现问题

尝试连接 MySQL 时,套接字文件不可用,无法建立连接。

分析问题

MySQL 无法创建所需的套接字文件,可能是因为套接字或数据目录权限设置不当。

解决问题
  1. 检查数据目录权限:
  sudo chown -R mysql:mysql /var/lib/mysqlsudo chmod -R 750 /var/lib/mysql
  1. 检查套接字目录权限:
  sudo chown -R mysql:mysql /var/run/mysqldsudo chmod 755 /var/run/mysqld

6. 权限修改限制:跳过权限表模式下无法更新 root

  • 问题概述--skip-grant-tables 模式下 ALTER USER 无法执行权限修改。
发现问题

尝试在 --skip-grant-tables 模式下修改 root 信息时,提示无法执行 ALTER USER

分析问题

此模式下权限系统被跳过,MySQL 无法直接进行权限修改操作。

解决问题
  1. 登录并刷新权限表:
  FLUSH PRIVILEGES;
  1. 直接修改 mysql.user 表:
   UPDATE mysql.user SET authentication_string='' WHERE User='root' AND Host='localhost';UPDATE mysql.user SET plugin='mysql_native_password' WHERE User='root' AND Host='localhost';FLUSH PRIVILEGES;

7. 远程访问权限配置

  • 问题概述:尝试通过远程连接 MySQL 时访问被拒绝。
发现问题

远程访问 MySQL 被拒绝,可能因未配置远程连接权限。

分析问题

默认情况下,MySQL 仅允许本地访问,需要调整 bind-address 设置及用户权限以支持远程连接。

解决问题
  1. 修改配置文件,允许远程访问:
   sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

bind-address 修改为 0.0.0.0
2. 创建远程用户并授权:

   CREATE USER 'remote_user'@'%' IDENTIFIED BY 'YourPassword!';GRANT ALL PRIVILEGES ON *.* TO 'remote_user'@'%' WITH GRANT OPTION;FLUSH PRIVILEGES;
  1. 开放防火墙端口:
   sudo ufw allow 3306/tcp

8. 用户创建失败 (ERROR 1396):用户已存在

  • 问题概述:尝试创建新用户时报错,提示用户已存在。
发现问题

新用户创建失败,报错显示该用户已存在。

分析问题

mysql.user 表中存在残留的用户记录,导致冲突。

解决问题
  1. 检查用户是否存在:
   SELECT User, Host FROM mysql.user WHERE User='remote_user';
  1. 删除已有用户:
   DROP USER 'remote_user'@'%';

9. 旧客户端连接失败:修改认证插件以支持兼容性

  • 问题概述:旧版客户端无法连接 MySQL,因为不支持新的身份验证插件。
发现问题

旧版客户端不支持 caching_sha2_password 插件,无法成功连接。

分析问题

caching_sha2_password 插件与旧版客户端不兼容,需改用 mysql_native_password 插件。

解决问题
  1. 修改认证插件为 mysql_native_password:
   ALTER USER 'remote_user'@'%' IDENTIFIED WITH mysql_native_password BY 'YourPassword!';FLUSH PRIVILEGES;

结语

在 MySQL 权限问题的修复过程中,环环相扣的故障排查和解决尤为重要。希望这份完整的权限困境修复指南能为您未来的 MySQL 权限管理提供专业帮助。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/60477.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

笔记 | image may have poor performance,or fail,if run via emulation

在Docker Desktop中现象如图: 当你运行 AMD64 平台代码时(Intel 和 AMD 芯),你的 Mac 必须模拟其CPU架构(因为你自身是ARM)。这通常会非常吃性能。 Docker Desktop 警告你在模拟 Intel/AMD x64 CPU 时性能可…

【C++】C++11特性(上)

✨✨欢迎大家来到Celia的博客✨✨ 🎉🎉创作不易,请点赞关注,多多支持哦🎉🎉 所属专栏:C 个人主页:Celias blog~ 目录 一、列表初始化 二、std::initializer_list 三、右值引用和移…

24/11/7 算法笔记 PCA主成分分析

假如我们的数据集是n维的,共有m个数据(x,x,...,x)。我们希望将这m个数据的维度从n维降到k维,希望这m个k维的数据集尽可能的代表原始数据集。我们知道数据从n维降到k维肯定会有损失,但是我们希望损失尽可能的小。那么如何让这k维的数据尽可能表…

JS 实现SSE通讯和了解SSE通讯

SSE 介绍: Server-Sent Events(SSE)是一种用于实现服务器向客户端实时推送数据的Web技术。与传统的轮询和长轮询相比,SSE提供了更高效和实时的数据推送机制。 SSE基于HTTP协议,允许服务器将数据以事件流(…

C/C++每日一练:查找链表的中间节点

链表(Linked List) 链表是一种线性数据结构,由一系列节点(Node)通过指针链接在一起。与数组不同,链表中的元素在内存中不需要连续存储,每个节点包含两部分: 数据部分:存…

对称加密与非对称加密:密码学的基石及 RSA 算法详解

对称加密与非对称加密:密码学的基石及 RSA 算法详解 在当今数字化的时代,信息安全至关重要。对称加密和非对称加密作为密码学中的两种基本加密技术,为我们的数据安全提供了强大的保障。本文将深入探讨对称加密和非对称加密的特点、应用场景&…

PH47代码框架全局函数及功能类

PH47代码框架全局函数及功能类 概述 全局函数及功能类体系是PH47框架当中除了4个逻辑层之外最重要的组成部分之一,它们可以在 整个PH7 代码框架及用户代码中使用。常用全局函数及功能类为 PH7 代码框架提供了最常用和最基础的功能实现。 全局函数主要包含了对时间…

力扣 LeetCode 203. 移除链表元素(Day2:链表)

解题思路: 方法一:头节点和非头节点分开处理 方法二:定义一个dummy虚拟节点,后面的节点就可以采用相同的处理方式 注意: cur需要指向要删除的节点的上一个节点,因为要越过这一个被删除的节点 class Sol…

IEC60870-5-104 协议源码架构详细分析

IEC60870-5-104 协议源码架构 前言一、资源三、目录层级一二、目录层级二config/lib60870_config.hdependencies/READMEexamplesCMakeLists.txtcs101_master_balancedcs104_client_asyncmulti_client_servertls_clienttls_server说明 make这些文件的作用是否需要导入这些文件&a…

turbo c 2.0 画螺栓

代码; #include<graphics.h> void bolt(x0,y0,d,l) int x0,y0,d,l; {int x1,x2,x3,x4,x5,x6,x7,x8;int y1,y2,y3,y4,y5,r1,r2,b,c;if(l>2*d) b2*d;else b1;r11.5*d;r20.38*d;c0.1*d;x1x0-0.7*d;x2x0-0.61*d;x3x0-0.32*d;x4x00.8*d;x5x0l-b;x6x0l-c;x7x0l-0.05*d;x8x0…

网络服务综合项目-博客

一、运行环境&#xff1a; 主机主机名系统服务192.168.31.128Server-WebLinuxWeb192.168.31.129Server-NFS-DNSLinuxNFS 二、基础配置&#xff1a; 配置主机名开启防火墙并配置部分开启selinux并配置服务器之间使用ntp.aliyun.com进行时间同步服务器之间实现ssh免密登录 三…

leetcode86:分隔链表

给你一个链表的头节点 head 和一个特定值 x &#xff0c;请你对链表进行分隔&#xff0c;使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。 你应当 保留 两个分区中每个节点的初始相对位置。 示例 1&#xff1a; 输入&#xff1a;head [1,4,3,2,5,2], x 3 输出&am…

Android Mobile Network Settings | APN 菜单加载异常

问题 从log看是有创建APN对应的Controller&#xff08;功能逻辑是ok的&#xff09;&#xff0c;但是Mobile Network Settings无法显示&#xff08;UI异常&#xff09;。 日志分析 看似APN 菜单已经创建了&#xff0c;实际上并没有显示。 11-12 07:01:28.150 8773 8773 D Pr…

上海市计算机学会竞赛平台2020年4月月赛丙组永恒的生命游戏

题目背景 2020年4月11日&#xff0c;英国数学家 约翰霍顿康威&#xff08;John Horton Conway&#xff09;因为新型冠状病毒肺炎不幸逝世。他在群论、数论、代数、几何拓扑、理论物理、组合博弈论和几何等领域&#xff0c;都做出了重大贡献。他的离去是人类文明的损失。他最著…

FS8x 功能安全

fail-safe是电独立的和物理隔离的。fail-safe由自己的参考电压和电流提供,有自己的振荡器,有重复的模拟路径以最小化常见的故障,并有LBIST/ABIST来覆盖潜在故障。fail-safe根据设备部件号提供ASIL B或ASIL D遵从性。除非另有规定,fail-safe定时来自故障安全振荡器,其精度为…

项目模块十七:HttpServer模块

一、项目模块设计思路 目的&#xff1a;实现HTTP服务器搭建 思想&#xff1a;设计请求路由表&#xff0c;记录请求方法与对应业务的处理函数映射关系。用户实现请求方法和处理函数添加到路由表&#xff0c;服务器只接受请求并调用用户的处理函数即可。 处理流程&#xff1a; …

内网域环境、工作组、局域网等探针方案

1. 信息收集 1.1 网络收集 了解当前服务器的计算机基本信息&#xff0c;为后续判断服务器角色&#xff0c;网络环境做准备 systeminfo 详细信息 net start 启动服务 tasklist 进程列表 schtasks 计划任务&#xff08;受权限影响&#xff09; 了解当前服务器的网络接口信息…

什么是量化交易

课程大纲 内容初级初识量化&#xff0c;理解量化 初识量化 传统量化和AI量化的区别 量化思想挖掘 量化思想的挖掘及积累技巧 量化代码基础&#xff1a; python、pandas、SQL基础语法 金融数据分析 常用金融分析方式 常用因子分析方式 数据分析实战练习 回测及交易引擎 交易引擎…

OpenHarmony-1.启动流程

OpenHarmony启动流程 1.kernel的启动 流程图如下所示&#xff1a;   OpenHarmony(简称OH)的标准系统的底层系统是linux&#xff0c;所以调用如下代码&#xff1a; linux-5.10/init/main.c: noinline void __ref rest_init(void) {struct task_struct *tsk;int pid;rcu_sch…

【LeetCode】【算法】64. 最小路径和

LeetCode 64. 最小路径和 题目描述 给定一个包含非负整数的 m x n 网格 grid &#xff0c;请找出一条从左上角到右下角的路径&#xff0c;使得路径上的数字总和为最小。 说明&#xff1a;每次只能向下或者向右移动一步。 思路 思路&#xff1a;这种题太典了&#xff0c;典…