鲲鹏社区首页
中文
注册
我要评分
文档获取效率
文档正确性
内容完整性
文档易理解
在线提单
论坛求助

编译和安装MySQL时执行make -j 96命令后报错的解决方法

问题现象描述

编译和安装MySQL过程中,执行make -j 96命令时,执行进度到55%时提示如下信息。

c++: internal compiler error: Killed (program cc1plus)
Please submit a full bug report,with preprocessed source if appropriate.
See <https://gcc.gnu.org/bugs/> for instructions.
make[2]: *** [plugin/group_replication/CMakeFiles/group_replication.dir/build.make:759: plugin/group_replication/CMakeFiles/group_replication.dir/src/applier_channel_state_observer.cc.o] Error 4
make[2]: Leaving directory '/home/mysql-8.0.17/build'
[ 55%] Built target protoc
make[2]: Leaving directory '/home/mysql-8.0.17/build'
make[1]: *** [CMakeFiles/Makefile2:2452: storage/perfschema/CMakeFiles/perfschema.dir/all] Error 2
make[2]: Leaving directory '/home/mysql-8.0.17/build'
make[1]: *** [CMakeFiles/Makefile2:6059: plugin/group_replication/CMakeFiles/group_replication.dir/all] Error 2
make[1]: Leaving directory '/home/mysql-8.0.17/build'make: *** [Makefile:161: all] Error 2

关键过程、根本原因分析

虚拟机运行内存不足,而template的大量扩展需要足够的内存。

结论、解决方案及效果

  • 方法一:如果是在虚拟机上,先关掉虚拟机,再调节虚拟机内存大小,最后重新启动虚拟机即可。
  • 方法二:通过临时使用交换空间(swap space)来解决。交换文件(swap file)是一种虚拟内存技术,用于在物理内存不足时将部分数据存储到硬盘上,以便释放物理内存。
    1. 创建并使用交换空间。例如创建大小为16GB的交换文件。
      sudo dd if=/dev/zero of=/swapfile bs=64M count=256
      sudo mkswap /swapfile
      sudo swapon /swapfile

      上述命令中,count的值就是增加的交换空间的大小,bs的值是块大小,所以交换空间大小是bs*count=16GB。

    2. 重新执行编译安装MySQL命令。
    3. 在编译安装完成后,建议关闭交换空间,以释放磁盘空间。
      sudo swapoff /swapfile
      sudo rm /swapfile
    4. 可选:如果创建了临时空间之后仍提示相同的报错,可能是因为1中分配的空间不够大,可以先执行3,然后调整“count”参数的值,最后重新执行1以分配更大的空间。