编译和安装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)是一种虚拟内存技术,用于在物理内存不足时将部分数据存储到硬盘上,以便释放物理内存。
- 创建并使用交换空间。例如创建大小为16GB的交换文件。
sudo dd if=/dev/zero of=/swapfile bs=64M count=256 sudo mkswap /swapfile sudo swapon /swapfile
上述命令中,count的值就是增加的交换空间的大小,bs的值是块大小,所以交换空间大小是bs*count=16GB。
- 重新执行编译安装MySQL命令。
- 在编译安装完成后,建议关闭交换空间,以释放磁盘空间。
sudo swapoff /swapfile sudo rm /swapfile
- 可选:如果创建了临时空间之后仍提示相同的报错,可能是因为1中分配的空间不够大,可以先执行3,然后调整“count”参数的值,最后重新执行1以分配更大的空间。
- 创建并使用交换空间。例如创建大小为16GB的交换文件。
父主题: MySQL