linux中mysql报错

在登录mysql时报错,提示error 2002

mysql -uroot -p
Enter password:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

收到错误 ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2) 表示 MySQL 客户端无法通过指定的套接字文件 /var/lib/mysql/mysql.sock 连接到 MySQL 服务器。这通常意味着 MySQL 服务器没有运行,或者套接字文件路径不正确。

确保 MySQL 服务器正在运行:

systemctl status mysqld

但我在执行上述命令时就报错

[root@zbx]# systemctl status mysqld
Unit mysqld.service could not be found.

错误 Unit mysqld.service could not be found. 表示系统中没有找到 mysqld 服务。

检查 MySQL 是否安装,我使用的是MariaDB

rpm -qa | grep -i mariadb

检查下来确实未安装,那么我们就进行安装即可

sudo yum install mariadb-server
sudo systemctl start mariadb
sudo systemctl enable mariadb
systemctl status mariadb

到此为止,问题解决,如果有其他情况的,欢迎大家在评论区接着讨论

------------------------------------------------------------------------------------------------------------------------------

其他情况,可能是selinux影响导致的

在vi /etc/selinux/config中将SELINUXTYPE=targeted修改成SELINUXTYPE=permissive(宽容模式)

### Linux MySQL `--skip-grant-tables` 导致无法执行语句的解决方案 当启用 `--skip-grant-tables` 或者通过修改配置文件中的 `[mysqld] skip-grant-tables` 启动 MySQL 服务时,MySQL 的权限验证机制会被禁用。这虽然允许无密码访问数据库实例,但也带来了某些限制[^1]。 #### 原因分析 启用 `--skip-grant-tables` 参数后,MySQL 不会加载授权表(grant tables),因此所有的用户身份验证逻辑被绕过。这种情况下,尽管可以连接到 MySQL 实例,但一些依赖于授权表的功能可能不可用或行为异常。例如: - 插入数据、更新数据等操作可能会失败。 - 用户定义函数(UDF)、调度事件以及插件功能均不会生效[^4]。 #### 解决方案 以下是几种常见的解决方法: #### 方法一:重新加载授权表并重置 root 密码 1. **停止 MySQL 服务** ```bash sudo systemctl stop mysql ``` 2. **以跳过权限模式启动 MySQL** 使用命令行参数临时启动 MySQL 并跳过权限验证: ```bash sudo mysqld_safe --skip-grant-tables & ``` 3. **登录 MySQL** 此时无需提供密码即可登录 MySQL: ```sql mysql -u root ``` 4. **更改 root 密码** 更新 root 用户的密码以便后续正常管理数据库: ```sql FLUSH PRIVILEGES; ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password'; ``` 5. **退出并重启 MySQL** 完成以上步骤之后,先退出 MySQL 控制台再重启服务恢复正常运行状态: ```bash exit; sudo systemctl start mysql ``` #### 方法二:移除 my.cnf 中的相关配置项 如果是在配置文件中设置了 `skip-grant-tables`,则需要编辑该文件将其删除后再重启服务。 1. 找到并编辑 MySQL 配置文件 `/etc/my.cnf` 或 `/etc/mysql/my.cnf`: ```bash sudo nano /etc/mysql/my.cnf ``` 2. 删除或者注释掉如下内容: ```ini [mysqld] skip-grant-tables ``` 3. 存储更改并关闭编辑器,随后重启 MySQL 服务使改动生效: ```bash sudo systemctl restart mysql ``` #### 方法三:利用 `SET PASSWORD` 设置新密码而不需完全停服 对于生产环境而言频繁中断服务并非理想做法,可以通过在线方式完成密码恢复工作而不需要彻底关停整个数据库引擎。 1. 登录至已开启 `--skip-grant-tables` 的 MySQL 实例; 2. 运行以下 SQL 来设定新的管理员账户凭证: ```sql SET PASSWORD FOR 'root'@'localhost' = PASSWORD('your_new_root_password'); FLUSH PRIVILEGES; ``` 注意此法适用于较旧版本;新版推荐采用前述 `ALTER USER ... IDENTIFIED BY` 形式替代。 --- ### 注意事项 无论采取哪种办法都应确保最终能够安全地控制住自己的数据库资源,及时撤销不必要的宽松策略以免造成安全隐患。 ```python # 示例 Python 脚本用于自动化部分流程(仅作演示用途) import subprocess def reset_mysql_password(): try: # Stop MySQL Service subprocess.run(["sudo", "systemctl", "stop", "mysql"], check=True) # Start MySQL with Skip Grant Tables Option Temporarily subprocess.Popen(["sudo", "mysqld_safe", "--skip-grant-tables", "&"]) # Connect and Reset Password via Command Line Tools Here... # Restart Normal Operation Mode After Changes Applied. subprocess.run(["sudo", "systemctl", "start", "mysql"], check=True) except Exception as e: print(f"Error occurred during process: {e}") reset_mysql_password() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值