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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix