当前位置: 首页 > news >正文

Mysql客户端连接是报错:1045-Access denied for user

一、问题描述

某次一线登录Mysql报错:1045-Access denied for user;后来查看发现本地mysql登录也异常,报错:error while loading shared libraries:libncurses .so .5:canot open shared object file:No such file or directory;

在这里插入图片描述
在这里插入图片描述
相关资源:Linux指定动态库搜索路径、Understanding Shared Libraries in Linux

二、处理

1)日志很明显,就是找不到共享库文件了,那mysql或Linux应用加载库文件的优先级是怎样的呢?

在linux中,要想明确不同程序/文件/动态库之间的依赖关系,可通过一些命令工具验证:

在这里插入图片描述
在这里插入图片描述
常用:strace, ldd,libtree,readelf,objdump;其中:

  • strace 的用法:strace -fyyo test.txt -s 256 bin/xxx #记录bin/xxx程序运行时的状态,将进程信息记录到test.txt文件中
  • ldd用法:ldd 执行程序xxx #将可执行程序xxx所依赖的so库列出来,包括so库所在路径,但不会列出so库与so库之间的依赖关系
  • libtreee的用法:libtree 执行程序xxx #列出来可执行程序xxx所需要的so库,同时也可以列出不同so库之间的依赖关系。以及so库的来源
  • readelf的用法:readelf -d xxx #该工具也可以查看xxx所需的so库,同时查看rpath,但未显示so库的路径
  • objdump的用法: objdump -p xxx #列出xxx所直接依赖的so库,但是没有列出so库背后所依赖的动态库,即仅静态的从程序看依赖项

动态库的依赖顺序基本如下:
在这里插入图片描述
其中,rpath(RunPath)中如果指定使用$ORIGIN,就能在包含应用程序的目录的lib下查找,否则查OS的;RPATH是编译时设置在可执行文件中的路径,它指定了程序运行时应该搜索库文件的位置。如果可执行文件包含RPATH,那么链接器会首先按照RPATH指定的路径来搜索所需的库;可以通过readelf -d | grep rpath,来查看so库是否指定了rpath。

环境变量LD_PRELOAD 指定的库文件会在其他库文件之前被加载,这意味着它们会优先于其他库文件被调用。这可以用来覆盖系统默认的库文件,或者在程序运行时临时加载额外的库文件。

环境变量LD_LIBRARY_PATH,用户可以在运行时设置以添加额外的库搜索路径。它的优先级低于RPATH,但高于系统的配置文件和默认路径, 这个只临时有效,一般只针对当前终端或者进程有效;比如:export LD_PRELOAD=/path/to/your/libexample.so.1export LD_LIBRARY_PATH=/path/to/library/directory:$LD_LIBRARY_PATH

配置文件/etc/ld.so.conf(ld.conf):它是系统的库配置文件,包含了系统级别的库搜索路径链接器会读取这个文件,并按照其中列出的路径来搜索库。

缓存文件/etc/ld.so.cache:这个文件是/etc/ld.so.conf和所有.conf文件的缓存,由ldconfig命令生成。链接器会首先检查这个缓存文件,以快速找到库文件。这个文件的优先级实际上与/etc/ld.so.conf相同,但是因为它是一个缓存,所以可以加快库的搜索速度。

如果以上路径都没有找到所需的库,链接器会回退到一些默认的系统路径,如/lib、/lib64/usr/lib、/usr/lib64/等,外部应用优先默认/usr/lib或者/usr/lib64,这些路径是硬编码在链接器中的。

综上: LD_PRELOAD > RPATH (一般没有指定,或默认指定/usr/lib64) > LD_LIBRARY_PATH > /etc/ld.so.conf 文件和 /etc/ld.so.conf.d 目录中指定的库文件 > /lib 和 /usr/lib 目录中的库文件,且对于大部分非系统内置应用来说,前4个基本不涉及,64位的应用直接会在/lib64和/usr/lib64下查找so文件。

2)本案中,指向为mysql所依赖的libncurses.so版本问题,默认依赖的版本是libncurses.so.5,但是系统上libncurses.so的版本不是5导致的。可以在/usr/lib64文件夹下查找当前系统的libncurses.so版本,现场为ibncurses.so.6.3和libtinfo.so.6.3

处理:做软连接到/lib64/或/usr/lib64下即可。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 方法的定义
  • Nuxt 入门实战 - 05:特性
  • vue项目中scss文件导出,js文件引入scss文件时为空{}
  • 代码随想录 -- 哈希表 -- 三数之和
  • Django 框架中F和Q的作用
  • 富格林:极力破除欺诈维护安全
  • 以太网PHY驱动调试笔记(KSZ8081)
  • 代码随想录算法day25 | 贪心算法part03 | 134. 加油站,135. 分发糖果,860.柠檬水找零,406.根据身高重建队列
  • 算法学习-基础数据结构
  • 【python】懂车帝字体反爬逐层解密案例(附完整代码)
  • 中秋佳节,数码好礼伴团圆:中秋节五大数码礼品指南
  • docker compose用法详解
  • 深度确定问题中的树森林操作:分析与实现
  • OpenCV+Python识别机读卡
  • 盘点国内外最好用的12款源代码加密软件:总有一款适合你
  • 「前端早读君006」移动开发必备:那些玩转H5的小技巧
  • Android 架构优化~MVP 架构改造
  • JS基础篇--通过JS生成由字母与数字组合的随机字符串
  • Linux Process Manage
  • Node + FFmpeg 实现Canvas动画导出视频
  • Python爬虫--- 1.3 BS4库的解析器
  • Redis 懒删除(lazy free)简史
  • Selenium实战教程系列(二)---元素定位
  • uva 10370 Above Average
  • 函数式编程与面向对象编程[4]:Scala的类型关联Type Alias
  • 基于webpack 的 vue 多页架构
  • 理清楚Vue的结构
  • 前端 CSS : 5# 纯 CSS 实现24小时超市
  • 前端工程化(Gulp、Webpack)-webpack
  • 跳前端坑前,先看看这个!!
  • 验证码识别技术——15分钟带你突破各种复杂不定长验证码
  • Python 之网络式编程
  • 浅谈sql中的in与not in,exists与not exists的区别
  • ​第20课 在Android Native开发中加入新的C++类
  • ​字​节​一​面​
  • !$boo在php中什么意思,php前戏
  • #ifdef 的技巧用法
  • (1)Jupyter Notebook 下载及安装
  • (poj1.2.1)1970(筛选法模拟)
  • (求助)用傲游上csdn博客时标签栏和网址栏一直显示袁萌 的头像
  • (数据结构)顺序表的定义
  • (四)模仿学习-完成后台管理页面查询
  • .[backups@airmail.cc].faust勒索病毒的最新威胁:如何恢复您的数据?
  • .bat文件调用java类的main方法
  • .gitignore文件设置了忽略但不生效
  • .NET 2.0中新增的一些TryGet,TryParse等方法
  • .net core 6 集成 elasticsearch 并 使用分词器
  • .Net Core/.Net6/.Net8 ,启动配置/Program.cs 配置
  • .net redis定时_一场由fork引发的超时,让我们重新探讨了Redis的抖动问题
  • .NET 自定义中间件 判断是否存在 AllowAnonymousAttribute 特性 来判断是否需要身份验证
  • .NET多线程执行函数
  • .net反混淆脱壳工具de4dot的使用
  • .NET技术成长路线架构图
  • /usr/bin/perl:bad interpreter:No such file or directory 的解决办法
  • @PostConstruct 注解的方法用于资源的初始化