Ubuntu系统:自带Perl降版本&Perl5.16安装

本文详细指导了在Ubuntu 18.4上通过更改源、安装依赖和编译perl5.16的完整过程,包括设置源、升级软件包、配置选项和安装验证。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Ubuntu18.4 安装perl5.16

1、切换下载源:
    1)、搜索softwares&&update,然后切换源为main server,默认是chain server
    2)、执行:sudo apt-get update && sudo apt-get upgrade 需要20分钟~40分钟
    3)、sudo apt install gcc
    4)、sudo apt install build-essential

sudo wget https://www.cpan.org/src/5.0/perl-5.16.0.tar.gz

2、whereis perl 

3、sudo rm -rf allFolder
    sudo rm -rf /usr/bin/perl5.26-x86_64-linux-gnu && sudo rm -rf /usr/bin/perl && sudo rm -rf /usr/lib/x86_64-linux-gnu/perl && sudo rm -rf /etc/perl/ && sudo rm -rf /usr/share/perl && sudo rm -rf /usr/share/man/man1/perl.1.gz

4、sudo tar zxvf perl-5.16.0.tar.gz

5、sudo ./Configure --help
    Usage: Configure [-dehrsEKOSV] [-f config.sh] [-D symbol] [-D symbol=value]
                 [-U symbol] [-U symbol=] [-A command:symbol...]
  -d : use defaults for all answers.
  -e : go on without questioning past the production of config.sh.
  -f : specify an alternate default configuration file.
  -h : print this help message and exit (with an error status).
  -r : reuse C symbols value if possible (skips costly nm extraction).
  -s : silent mode, only echoes questions and essential information.
  -D : define symbol to have some value:
         -D symbol         symbol gets the value 'define'
         -D symbol=value   symbol gets the value 'value'
       common used examples (see INSTALL for more info):
         -Duse64bitint            use 64bit integers
         -Duse64bitall            use 64bit integers and pointers
         -Dusethreads             use thread support
         -Dinc_version_list=none  do not include older perl trees in @INC
         -DEBUGGING=none          DEBUGGING options
         -Dcc=gcc                 choose your compiler
         -Dprefix=/opt/perl5      choose your destination
  -E : stop at the end of questions, after having produced config.sh.
  -K : do not use unless you know what you are doing.
  -O : let -D and -U override definitions from loaded configuration file.
  -S : perform variable substitutions on all .SH files (can mix with -f)
  -U : undefine symbol:
         -U symbol    symbol gets the value 'undef'
         -U symbol=   symbol gets completely empty
       e.g.:  -Uversiononly
  -A : manipulate symbol after the platform specific hints have been applied:
         -A append:symbol=value   append value to symbol
         -A symbol=value          like append:, but with a separating space
         -A define:symbol=value   define symbol to have value
         -A clear:symbol          define symbol to be ''
         -A define:symbol         define symbol to be 'define'
         -A eval:symbol=value     define symbol to be eval of value
         -A prepend:symbol=value  prepend value to symbol
         -A undef:symbol          define symbol to be 'undef'
         -A undef:symbol=         define symbol to be ''
       e.g.:  -A prepend:libswanted='cl pthread '
              -A ccflags=-DSOME_MACRO
  -V : print version number and exit (with a zero status).
  
  
 6、sudo apt update
 7、sudo apt install build-essential	【如果安装失败,依次执行:】
	7.1、sudo apt-get -f -y install
	7.2、sudo apt-get update
	7.3、sudo apt-get upgrade
	7.4、sudo apt install gcc
	7.5、gcc --version
			gcc (Ubuntu 7.5.0-3ubuntu1~18.04) 7.5.0
			Copyright (C) 2017 Free Software Foundation, Inc.
			This is free software; see the source for copying conditions.  There is NO
			warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE
8、sudo apt install make
9、sudo ./Configure -des -Dprefix=/usr/local/perl -Dusethreads -Uversiononly
10、sudo make
    (if error ,find error files and lines,use /*  */, delete it.)
11、sudo make install
12、cd /usr/bin/
13、sudo mv perl perl.old
14、sudo ln -s /usr/local/perl/bin/perl /usr/bin/perl
15、perl --version

<think>好的,用户现在遇到了一个问题,错误信息是关于安装DBD::mysql驱动失败,导致pt-table-checksum无法运行。我需要先理解这个错误的背景和可能的原因。 首先,用户之前询问过关于libmysqlclient.so.18的安装问题,现在的问题看起来是Perl模块DBD::mysql无法加载,可能与之前的库有关联。错误信息提到“install_driver(mysql) failed”,这表明Perl在尝试加载DBD::mysql模块时遇到了问题。编译失败可能意味着模块没有正确安装,或者依赖的库缺失或不兼容。 接下来,我需要考虑常见的可能原因。首先,检查DBD::mysql是否安装正确。用户可能通过CPAN或其他包管理器安装,但可能安装不完整或有版本冲突。其次,依赖的MySQL客户端库是否存在,比如libmysqlclient.so.18是否正确安装,路径是否正确。另外,架构兼容性问题,比如32位和64位库的混淆,或者Perl模块和MySQL客户端库的版本不匹配。 用户之前处理过libmysqlclient.so.18的问题,可能已经安装了该库,但可能路径没有正确配置,或者权限问题导致Perl模块无法访问。此外,环境变量如LD_LIBRARY_PATH是否设置正确,以确保运行时能找到动态库。 还需要检查Perl模块DBD::mysql的安装方式,是否通过系统包管理器(如yum)还是CPAN安装。不同的安装方式可能导致路径不同,或者缺少必要的依赖。例如,使用yum安装可能自动解决依赖,而CPAN可能需要手动安装开发包。 另一个可能性是,Perl版本与DBD::mysql模块的兼容性问题,或者MySQL客户端库的版本与模块不兼容。例如,较新的MySQL库可能不兼容旧版本的DBD::mysql模块,反之亦然。 用户提到错误发生在运行pt-table-checksum时,这是Percona Toolkit的一部分,可能依赖于特定的DBD::mysql和MySQL客户端库版本。需要确认Percona Toolkit的版本是否与当前安装的MySQL或MariaDB版本兼容。 可能的解决步骤包括:确认DBD::mysql模块是否安装,确认MySQL客户端库的存在和路径,重新安装DBD::mysql并确保安装时找到正确的库,设置环境变量,检查权限,以及确认架构一致性。此外,可能需要安装开发包,如libmysqlclient-devel,以确保编译模块时所需的头文件和库存在。 还要考虑是否有多个MySQL安装导致冲突,例如同时安装了MariaDB和MySQL的库,或者不同版本的库存在于系统中。使用ldconfig检查库的链接是否正确,或者使用strace跟踪程序运行时加载的库路径,帮助诊断问题。 最后,用户可能需要更新系统或软件包,或者考虑使用容器化解决方案(如Docker)来隔离环境,避免依赖冲突。长期建议可能包括升级到支持的MySQL/MariaDB版本,或迁移到兼容的驱动如MariaDB Connector/C,以减少对旧版库的依赖。</think>--- ### **一、错误原因分析** 该错误表明 **Perl的DBD::mysql模块未能正确加载**,通常由以下原因导致: ```bash install_driver(mysql) failed: Attempt to reload DBD/mysql.pm aborted. Compilation failed in require at (eval 30) line 3. ``` --- ### **二、核心问题定位** #### **1. 依赖关系验证** ```bash # 检查DBD::mysql模块是否存在 perl -MDBD::mysql -e 'print "Module loaded\n"' # 预期错误示例: Can't load '/usr/lib64/perl5/vendor_perl/auto/DBD/mysql/mysql.so' ``` #### **2. 动态库链接验证** ```bash # 检查mysql.so依赖的库 ldd $(find / -name mysql.so 2>/dev/null) # 关键输出项示例: libmysqlclient.so.18 => not found ``` --- ### **三、解决方案分步说明** --- #### **步骤1:安装基础依赖** ```bash # CentOS/RHEL系统 sudo yum install mysql-devel perl-devel openssl-devel # Ubuntu/Debian系统 sudo apt-get install libmysqlclient-dev libssl-dev perl make ``` --- #### **步骤2:强制重装DBD::mysql模块** ```bash # 清理旧版本 sudo cpan -f uninstall DBD::mysql # 指定动态库路径编译安装 sudo env LD_LIBRARY_PATH=/usr/lib64/mysql cpan -i DBD::mysql ``` --- #### **步骤3:配置动态库路径** ```bash # 临时生效(当前会话) export LD_LIBRARY_PATH=/usr/lib64/mysql:$LD_LIBRARY_PATH # 永久生效(追加到bashrc) echo 'export LD_LIBRARY_PATH=/usr/lib64/mysql:$LD_LIBRARY_PATH' >> ~/.bashrc ``` --- #### **步骤4:架构兼容性验证** ```bash # 检查模块与系统的架构匹配 file $(which perl) # 查看Perl解释器架构 file $(find / -name mysql.so 2>/dev/null) # 查看模块架构 # 正常应显示相同架构(如ELF 64-bit LSB) ``` --- ### **四、关键调试技巧** #### **1. 详细安装日志分析** ```bash # 显示完整的编译过程 sudo cpan -v -i DBD::mysql ``` #### **2. 符号链接修复** ```bash # 建立libmysqlclient软链接 sudo ln -s /usr/lib64/mysql/libmysqlclient.so.18.1.0 /usr/lib64/libmysqlclient.so.18 # 更新动态链接库缓存 sudo ldconfig ``` --- ### **五、典型问题排查表** | 现象 | 检查点 | 修复方法 | |-------------------------------|-------------------------|-----------------------------------| | `undefined symbol: mysql_ssl_set` | OpenSSL版本不匹配 | 安装与MySQL客户端相同版本的OpenSSL | | `Can't locate DBD/mysql.pm` | 模块未安装 | 通过CPAN或系统安装 | | `version `GLIBC_2.14' not found` | glibc版本过低 | 升级系统到支持GLIBC 2.14的发行版 | --- ### **六、版本兼容性对照表** | 组件 | 推荐版本 | 危险组合 | |-------------------|---------------------|-------------------------| | DBD::mysql | 4.050 | <4.020 + MySQL 8.0 | | MySQL客户端库 | 5.6.x | 5.7.x + DBD::mysql 4.043| | Perl | 5.16+ | Perl 5.8 + MySQL 5.7 | --- ### **七、替代方案建议** #### **方案1:使用Percona预编译包** ```bash # 安装Percona Toolkit专用包 sudo yum install percona-toolkit-perl ``` #### **方案2:Docker容器化运行** ```bash # 使用官方镜像规避环境问题 docker run -it --rm percona/percona-toolkit pt-table-checksum ``` --- ### **八、长效预防措施** 1. **依赖隔离**: ```bash # 使用perlbrew管理Perl环境 curl -L https://install.perlbrew.pl | bash perlbrew install perl-5.34.0 ``` 2. **版本锁定**: ```bash # 冻结CPAN模块版本 cpanm --save-dists ~/cpan_snapshot DBD::mysql@4.050 ``` --- **总结**:该错误本质是 **DBD::mysql模块与MySQL客户端库的兼容性问题**,通过强制重装模块并确保动态库路径正确,配合架构验证可解决。建议优先使用系统包管理器安装,并注意版本匹配。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值