Ubuntu下MySQL无法启动和访问的问题解决与修复

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: Ubuntu下MySQL无法启动和访问的问题解决与修复

目录

一、环境

二、背景

三、解决步骤

1.使用安全模式进入mysql【1】

2.重启mysql服务

3.使用安全模式进入mysql并修改root密码

3.1安全模式下进入不需要验证

3.2进入mysql数据库

3.3把user表密码重置为123456

3.4 user表操作报错解决【2】

3.5 再执行更新操作

3.6刷新系统权限相关表

3.7退出mysql

4.将第一步文件中的skip-grant-tables注释掉,并重启MySQL服务器

5、再次重新访问mysql,发现依旧无法进入

6、解决user表为空的问题【3,4】

6.1修改mysqld.cnf文件

6.2重启mysql服务,并使用root 空密码连接数据库

6.3向user表插入root用户

6.4修改root用户权限,并更新权限,然后退出

7、将配置文件修改恢复

8、重启mysql服务,能够正常访问了

四、参考


一、环境


ubuntu虚拟机:18.04Ubuntu

1.png

mysql:5.7.40

1.png


二、背景


长时间没有操作mysql了,今天有事需要访问一下,于是打开终端,输入mysql -uroot -ppassword 登录访问:报错ERROR 2013 (HY000): Lost connection to MySQL server at 'reading initial communication packet', system error: 104


根据报错提示检索,查看了mysql的进程,错误日志,mysql的3306端口以及修改了mysql相关的配置文件.cnf。均没有解决,后来继续登录还会报错ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)。反正就各种报错,无法访问和登录。


错误日志部分截图:

1.png

root@yh-virtual-machine:~#mysql -uroot -h 127.0.0.1 -p

Enter password:

ERROR 2013 (HY000): Lost connection to MySQL server at 'reading initial communication packet', system error: 104

root@yh-virtual-machine:~# mysql -uroot -p

Enter password:

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)


解决了一晚上终于找到了解决方案,最终也将之完美处理了,下面是具体的解决步骤。


注:前期操作可能操作的mysql配置文件没有找对,网上大部分让操作的是/ect/my.cnf文件,而我电脑上真正的mysql配置文件是:/ect/mysql/mysql.conf.d/mysqld.cnf


三、解决步骤


1.使用安全模式进入mysql【1】


在/etc/mysql/mysql.conf.d/mysqld.cnf文件下的[mysqld]字段下加入一行“skip-grant-tables”


2.重启mysql服务


sudo systemctl restart mysql


3.使用安全模式进入mysql并修改root密码


3.1安全模式下进入不需要验证


mysql


3.2进入mysql数据库


use mysql

  可以使用show databases查看本地MySQL上有哪些数据库,选择mysql

1.png


3.3把user表密码重置为123456

update user set authentication_string=password('123456') where user='root' and Host ='localhost'; 

可以使用show tables;查看mysql中有哪些表,user在其中。

1.png


3.4 user表操作报错解决【2】

1.png

MySQL错误Incorrect file format解决方案:


用REPAIR命令修复OK

check table <表名>;#检查表

REPAIR TABLE <表名> USE_FRM;#修复表

1.png


3.5 再执行更新操作

update user set plugin="mysql_native_password"; 

1.png


3.6刷新系统权限相关表

flush privileges;

如果报错提示其他表有3.4的报错,就对其执行一下3.4再执行3.6。

1.png


3.7退出mysql


quit


4.将第一步文件中的skip-grant-tables注释掉,并重启MySQL服务器


sudo systemctl restart mysql


5、再次重新访问mysql,发现依旧无法进入

1.png

这是因为user表中是空的,并没有写入root信息和验证。


6、解决user表为空的问题【3,4】


6.1修改mysqld.cnf文件


在配置文件中添加或修改下面两项: (文件中没有sql_mode项添加后不知sql_mode是否起作用,反正需要安全模式进入mysql)

sql_mode=NO_ENGINE_SUBSTITUTION
skip-grant-tables

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

需要把STRICT_TRANS_TABLES去掉,即改为:sql_mode=NO_ENGINE_SUBSTITUTION


注:简单来说STRICT_TRANS_TABLES这个是启用严格模式,进入安全模式后如果启用了严格模式向表插入数据插入不了的;


6.2重启mysql服务,并使用root 空密码连接数据库


6.3向user表插入root用户  

insert into mysql.user(Host,User,authentication_string) values("%","root",password("123456"));

1.png


6.4修改root用户权限,并更新权限,然后退出

  update mysql.user set
     `Select_priv` = 'Y',
   `Insert_priv` = 'Y',
   `Update_priv` = 'Y',
   `Delete_priv` = 'Y',
   `Create_priv` = 'Y',
   `Drop_priv` = 'Y',
   `Reload_priv` = 'Y',
   `Shutdown_priv` = 'Y',
   `Process_priv` = 'Y',
   `File_priv` = 'Y',
   `Grant_priv` = 'Y',
   `References_priv` = 'Y',
   `Index_priv` = 'Y',
   `Alter_priv` = 'Y',
   `Show_db_priv` = 'Y',
   `Super_priv` = 'Y',
   `Create_tmp_table_priv` = 'Y',
   `Lock_tables_priv` = 'Y',
   `Execute_priv` = 'Y',
   `Repl_slave_priv` = 'Y',
   `Repl_client_priv` = 'Y',
   `Create_view_priv` = 'Y',
   `Show_view_priv` = 'Y',
   `Create_routine_priv` = 'Y',
   `Alter_routine_priv` = 'Y',
   `Create_user_priv` = 'Y',
   `Event_priv` = 'Y',
   `Trigger_priv` = 'Y',
   `Create_tablespace_priv` = 'Y'
   where user='root';
flush privileges;

1.png


7、将配置文件修改恢复


注释掉或改正6.1中添加修改的部分。


8、重启mysql服务,能够正常访问了

1.png


四、参考


1、https://blog.csdn.net/m0_37657841/article/details/90046238

2、https://blog.csdn.net/tgdzsjh/article/details/105411581

3、https://www.qycn.com/xzx/article/7071.html

4、https://blog.csdn.net/u012232730/article/details/96878696

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
4月前
|
SQL DataWorks 关系型数据库
DataWorks产品使用合集之如何跨账号访问同一个MySQL
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
|
2月前
|
关系型数据库 MySQL Linux
Docker安装Mysql5.7,解决无法访问DockerHub问题
当 Docker Hub 无法访问时,可以通过配置国内镜像加速来解决应用安装失败和镜像拉取超时的问题。本文介绍了如何在 CentOS 上一键配置国内镜像加速,并成功拉取 MySQL 5.7 镜像。
393 2
Docker安装Mysql5.7,解决无法访问DockerHub问题
|
2月前
|
Ubuntu 关系型数据库 MySQL
ubuntu使用aliyun源+mysql删除有外键约束的数据+查看特定目录的大小
ubuntu使用aliyun源+mysql删除有外键约束的数据+查看特定目录的大小
38 4
|
2月前
|
存储 Kubernetes 负载均衡
基于Ubuntu-22.04安装K8s-v1.28.2实验(四)使用域名访问网站应用
基于Ubuntu-22.04安装K8s-v1.28.2实验(四)使用域名访问网站应用
32 1
|
2月前
|
负载均衡 应用服务中间件 nginx
基于Ubuntu-22.04安装K8s-v1.28.2实验(二)使用kube-vip实现集群VIP访问
基于Ubuntu-22.04安装K8s-v1.28.2实验(二)使用kube-vip实现集群VIP访问
59 1
|
2月前
|
Ubuntu
Ubuntu修复-boot满了导致apt坏掉的问题
Ubuntu修复-boot满了导致apt坏掉的问题
|
2月前
|
Ubuntu 关系型数据库 MySQL
Ubuntu 安装mysql和简单操作
Ubuntu 安装mysql和简单操作
329 0
|
4月前
|
Ubuntu 关系型数据库 MySQL
Ubuntu 安装 MySQL 5.7
Ubuntu 安装 MySQL 5.7
97 0
|
4月前
|
Ubuntu
ubuntu引导修复
ubuntu引导修复
45 0
|
4月前
|
Ubuntu
【ubuntu】【问题记录】vbox虚拟机无权限访问共享目录
【ubuntu】【问题记录】vbox虚拟机无权限访问共享目录
44 0