最近在适配信创平台,通过二进制包安装Mysql,在初始化这一步出现了以下报错

报错内容

./mysqld: error while loading shared libraries: libcrypto.so.3: ELF load command alignment not page-aligned

故障原因

动态库libcrypto.so.3的 LOAD 段所需的对齐大小与当前系统的内存页大小不兼容,所以引入这个动态库的程序在编译时出现了 ELF load command alignment not page-aligned 错误。


1 查询内存页大小

1.1 查询系统内存页大小

$ getconf PAGESIZE
65536

1.2 查询该动态库所需对其大小

$ cd /tmp/mysql-8.0.35-linux-glibc2.28-aarch64/lib/private
$ readelf -l libcrypto.so.3
Elf 文件类型为 DYN (共享目标文件)
Entry point 0xb4000
There are 8 program headers, starting at offset 64

程序头:
  Type           Offset             VirtAddr           PhysAddr
                 FileSiz            MemSiz              Flags  Align
  LOAD           0x0000000000000000 0x0000000000000000 0x0000000000000000
                 0x000000000038ff40 0x000000000038ff40  R E    0x10000
  GNU_STACK      0x0000000000000000 0x0000000000000000 0x0000000000000000
                 0x0000000000000000 0x0000000000000000  RW     0x10
  GNU_EH_FRAME   0x000000000030a5e8 0x000000000030a5e8 0x000000000030a5e8
                 0x0000000000014dcc 0x0000000000014dcc  R      0x4
  LOAD           0x000000000039b1d0 0x00000000003ab1d0 0x00000000003ab1d0
                 0x0000000000057350 0x000000000005a4b0  RW     0x10000
  GNU_RELRO      0x000000000039b1d0 0x00000000003ab1d0 0x00000000003ab1d0
                 0x0000000000054e30 0x0000000000054e30  R      0x1
  DYNAMIC        0x00000000004b2000 0x0000000000406000 0x0000000000406000
                 0x0000000000000240 0x0000000000000240  RW     0x8
  LOAD           0x00000000004b2000 0x0000000000406000 0x0000000000406000
                 0x0000000000025f18 0x0000000000025f18  RW     0x1000
  NOTE           0x00000000004d7ef0 0x000000000042bef0 0x000000000042bef0
                 0x0000000000000024 0x0000000000000024  R      0x4

系统内存页大小为65536,而libcrypto.so.3动态库的Flags Align为0x1000(4096),要保证兼容libcrypto.so.3动态库的Flags Align需为系统内存页大小或为系统内存页大小的公倍数,65536或65536的倍数

2 解决方法

搜索系统自带的libcrypto.so.3文件,一般在/usr/lib64目录下,复制更改名称到mysql的lib目录下。其他出现的类似报错处理方法雷同

$ cd /tmp/mysql-8.0.35-linux-glibc2.28-aarch64/lib/private
$ mv libcrypto.so.3 libcrypto.so.3_bak
$ cp /usr/lib64/libcrypto.so.3 ./libcrypto.so.3

注意:系统的openssl需为3或以上版本才有libcrypto.so.3文件,如果是libcrypto.so.1.1文件,则系统使用的是openssl1.1,不兼容,会出现以下报错,需要先手动编译openssl3,再复制过来

/data/mysql/mysql-8.0.35/bin/mysqld: /data/mysql/mysql-8.0.35/bin/../lib/private/libssl.so.3: version `OPENSSL_
3.0.0' not found (required by /data/mysql/mysql-8.0.35/bin/mysqld)
文章作者: hzbb
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 运维小记
数据库 MySQL MySQL
喜欢就支持一下吧
打赏
微信 微信
支付宝 支付宝