码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 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

     mysql:5.7.40

     二、背景

            长时间没有操作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)。反正就各种报错,无法访问和登录。

            错误日志部分截图:

    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

    3.3把user表密码重置为123456

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

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

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

     MySQL错误Incorrect file format解决方案:

    用REPAIR命令修复OK

    check table <表名>;#检查表
    REPAIR TABLE <表名> USE_FRM;#修复表

    3.5 再执行更新操作

    update user set plugin="mysql_native_password"; 

    3.6刷新系统权限相关表

    flush privileges;

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

    3.7退出mysql 

    quit

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

    sudo systemctl restart mysql

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

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

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

    6.1修改mysqld.cnf文件

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

    1. sql_mode=NO_ENGINE_SUBSTITUTION
    2. 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"));

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

    1. update mysql.user set
    2. `Select_priv` = 'Y',
    3. `Insert_priv` = 'Y',
    4. `Update_priv` = 'Y',
    5. `Delete_priv` = 'Y',
    6. `Create_priv` = 'Y',
    7. `Drop_priv` = 'Y',
    8. `Reload_priv` = 'Y',
    9. `Shutdown_priv` = 'Y',
    10. `Process_priv` = 'Y',
    11. `File_priv` = 'Y',
    12. `Grant_priv` = 'Y',
    13. `References_priv` = 'Y',
    14. `Index_priv` = 'Y',
    15. `Alter_priv` = 'Y',
    16. `Show_db_priv` = 'Y',
    17. `Super_priv` = 'Y',
    18. `Create_tmp_table_priv` = 'Y',
    19. `Lock_tables_priv` = 'Y',
    20. `Execute_priv` = 'Y',
    21. `Repl_slave_priv` = 'Y',
    22. `Repl_client_priv` = 'Y',
    23. `Create_view_priv` = 'Y',
    24. `Show_view_priv` = 'Y',
    25. `Create_routine_priv` = 'Y',
    26. `Alter_routine_priv` = 'Y',
    27. `Create_user_priv` = 'Y',
    28. `Event_priv` = 'Y',
    29. `Trigger_priv` = 'Y',
    30. `Create_tablespace_priv` = 'Y'
    31. where user='root';
    flush privileges;

     

    7、将配置文件修改恢复

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

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

    四、参考

    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

  • 相关阅读:
    RockChip Android12 Settings一级菜单
    泛型的类型擦除后,fastjson反序列化时如何还原?
    error: no member named ‘int8_t‘ in the global namespace
    ADS版图中连接提示线设置
    一维数组笔试题及其解析
    1081 Rational Sum
    简谈FPGA设计中系统运行频率计算方法与组合逻辑的层级
    Springboot毕业设计毕设作品,车辆大全和车牌识别系统 开题报告
    钟汉良日记:在YouTube上做视频博主
    手把手教你做多重线性逐步回归
  • 原文地址:https://blog.csdn.net/nanke_yh/article/details/128027141
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号