mysqlhotcopy 是 Perl 腳本,依賴 DBD::mysql 驅動。缺失模塊或動態庫路徑不當會導致「Can't locate DBD/mysql.pm」或「libmysqlclient.so 不存在」錯誤。本文記錄完整排查修復過程。
install_driver(mysql) failed: Can't locate DBD/mysql.pm in @INC ...
Perhaps the DBD::mysql perl module hasn't been fully installed
wget https://search.cpan.org/CPAN/authors/id/C/CA/CAPTTOFU/DBD-mysql-3.0008.tar.gz
tar zxvf DBD-mysql-3.0008.tar.gz
cd DBD-mysql-3.0008
perl Makefile.PL --mysql_config=/usr/local/mysql/bin/mysql_config
make && make install
關鍵:--mysql_config 指向 MySQL 安裝目錄下的 mysql_config,確保編譯時找到正確的頭文件與庫路徑。
Can't load '/usr/lib/perl5/.../auto/DBD/mysql/mysql.so' ...
libmysqlclient.so.16: cannot open shared object file: No such file or directory
Perl 模塊編譯鏈接了 libmysqlclient.so,但運行時動態鏈接器 ld.so 在默認搜索路徑(/etc/ld.so.conf、LD_LIBRARY_PATH)中找不到該庫。
echo "/usr/local/mysql/lib" >> /etc/ld.so.conf
# 或具體庫子目錄
echo "/usr/local/mysql/lib/mysql" >> /etc/ld.so.conf
ldconfig # 刷新緩存
執行後再次運行 mysqlhotcopy,錯誤消失。
Can't locate DBI.pm in @INC ... BEGIN failed at /usr/local/mysql/bin/mysqlhotcopy line 8
cpan DBI
# 或
yum install perl-DBI # CentOS/RHEL
apt-get install libdbi-perl # Debian/Ubuntu
DBI 核心模塊。DBD::mysql,指定 --mysql_config。lib 目錄加入 /etc/ld.so.conf 並執行 ldconfig。perl -MDBD::mysql -e 'print "OK\n"'。完成以上步驟,mysqlhotcopy 即可正常工作。注意:mysqlhotcopy 僅支持 MyISAM,InnoDB 請使用 mysqldump 或 xtrabackup。