Cannot connect to MySQL: install_driver(mysql) failed: Attempt to reload DBD/mysql.pm aborted.

[root@iZuf6c0ayfwv04hf5r4wa8Z bin]# ./pt-online-schema-change h=,P=3306,u=root,p='',D=jiwei,t=union_new --alter 'add column name varchar(10)' --chunk-size=500 --statistics --progress=time,1 --execute
Cannot connect to MySQL: install_driver(mysql) failed: Attempt to reload DBD/mysql.pm aborted.
Compilation failed in require at (eval 29) line 3.

使用pt-osc工具连接数据库时报上面这个错,一步步排查解决:

首先经查这个报错与perl语言的mysql.so库文件有关,然后查看有没有这个文件:
[root@iZuf6c0ayfwv04hf5r4wa8Z mysql]# find / -name mysql.so
/usr/lib64/perl5/vendor_perl/auto/DBD/mysql/mysql.so

此文件是存在的,然后分析perl语言的mysql.so库文件的依赖库是否缺失,执行下面的命令:
[root@iZuf6c0ayfwv04hf5r4wa8Z bin]# ldd /usr/lib64/perl5/vendor_perl/auto/DBD/mysql/mysql.so
/usr/lib64/perl5/vendor_perl/auto/DBD/mysql/mysql.so: /usr/lib64/mysql/libmysqlclient.so.18: version `libmysqlclient_18' not found (required by /usr/lib64/perl5/vendor_perl/auto/DBD/mysql/mysql.so)
	linux-vdso.so.1 =>  (0x00007ffe261cf000)
	libmysqlclient.so.18 => /usr/lib64/mysql/libmysqlclient.so.18 (0x00007f7a3627b000)
	libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f7a3605f000)
	libz.so.1 => /lib64/libz.so.1 (0x00007f7a35e49000)
	libm.so.6 => /lib64/libm.so.6 (0x00007f7a35b47000)
	libssl.so.10 => /lib64/libssl.so.10 (0x00007f7a358d5000)
	libcrypto.so.10 => /lib64/libcrypto.so.10 (0x00007f7a35472000)
	libdl.so.2 => /lib64/libdl.so.2 (0x00007f7a3526e000)
	libc.so.6 => /lib64/libc.so.6 (0x00007f7a34ea0000)
	libcrypto.so.3 => /opt/soft/mysql-8.0.39/lib/private/libcrypto.so.3 (0x00007f7a3486c000)
	libssl.so.3 => /opt/soft/mysql-8.0.39/lib/private/libssl.so.3 (0x00007f7a345c6000)
	libresolv.so.2 => /lib64/libresolv.so.2 (0x00007f7a343ac000)
	librt.so.1 => /lib64/librt.so.1 (0x00007f7a341a4000)
	libstdc++.so.6 => /lib64/libstdc++.so.6 (0x00007f7a33e9c000)
	libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007f7a33c86000)
	/lib64/ld-linux-x86-64.so.2 (0x00007f7a36bc7000)
	libgssapi_krb5.so.2 => /opt/soft/mysql-8.0.39/lib/private/libgssapi_krb5.so.2 (0x00007f7a33a3e000)
	libkrb5.so.3 => /opt/soft/mysql-8.0.39/lib/private/libkrb5.so.3 (0x00007f7a3377b000)
	libcom_err.so.2 => /lib64/libcom_err.so.2 (0x00007f7a33577000)
	libk5crypto.so.3 => /opt/soft/mysql-8.0.39/lib/private/libk5crypto.so.3 (0x00007f7a3334c000)
	libcom_err.so.3 => /opt/soft/mysql-8.0.39/lib/private/libcom_err.so.3 (0x00007f7a33149000)
	libkrb5support.so.0 => /opt/soft/mysql-8.0.39/lib/private/libkrb5support.so.0 (0x00007f7a32f3e000)
	libkeyutils.so.1 => /lib64/libkeyutils.so.1 (0x00007f7a32d3a000)

# 注意:ldd 的作用解释
ldd 是 Linux 系统中的一个命令行工具,用于显示动态链接库(shared libraries)的依赖关系。它可以帮助用户和开发者了解某个可执行文件或共享对象(如 .so 文件)在运行时需要哪些共享库,以及这些库的具体位置。


可以看到说是 /usr/lib64/mysql/libmysqlclient.so.18: version `libmysqlclient_18' not found  没有找到,

然后查看是否缺失缺失此文件,执行命令ll /usr/lib64/mysql/libmysqlclient.so.18:
[root@iZuf6c0ayfwv04hf5r4wa8Z ~]# ll /usr/lib64/mysql/
total 19924
lrwxrwxrwx  1 root root       17 Jan 18 09:47 libmysqlclient_r.so -> libmysqlclient.so
lrwxrwxrwx  1 root root       20 Jan 18 09:47 libmysqlclient.so -> libmysqlclient.so.18
lrwxrwxrwx. 1 root root       24 Jun 28  2024 libmysqlclient.so.18 -> libmysqlclient.so.18.0.0
-rwxr-xr-x. 1 root root 10192400 Jan 18 09:49 libmysqlclient.so.18.0.0
-rwxr-xr-x  1 root root 10192400 Jan 18 10:09 libmysqlclient.so.21
-rwxr-xr-x  1 root root     6758 Oct  2  2020 mysql_config
drwxr-xr-x. 2 root root     4096 Jun 28  2024 plugin


然后我从别的linux里从新拷贝了个libmysqlclient.so.18.0.0过来,重新做了下软连接就好了。


注意:如果是缺失这个文件的话,就需要安装mysql软件包mysql-community-libs-compat

posted @   有形无形  阅读(23)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示