从mysql源码编译出相应的库和可执行文件及搭建mysql服务端

目录

1. 问题的提出

2. 源码下载

3. 升级或安装某些前置软件 

3.1. 升级CMake

3.2. 升级gcc、g++

4. 安装依赖库

4.1. 安装OpenSSL

4.2. 安装Curses

4.3. 安装pkg-config

5. 编译、安装

6. 编译结果、配置 

7. 编译错误处理

7.1. 错误1

7.2. 错误2

8.  搭建mysql数据库服务端

8.1. 创建mysql用户及更改相应目录的属主

 8.2. 将mysql进程启动做成服务 

9. 参考链接


1. 问题的提出

       由于客户要求软件跑在国产飞腾CPU上,而mysql官网上的so没有基于飞腾的so库,都是基于X86或ARM的。因为不同的CPU的指令集不同,所以基于X86或ARM的so在飞腾CPU上肯定是不能运行的,所以需要利用mysql源码在飞腾CPU上编译出相应的.so库。

2. 源码下载

       打开MySQL Community Downloads 页面如下:

     因为是要下载源码,而不是下载编译好的so,所以在第2个下拉框中选择“Source Code”,在最后一个下拉框中选择All Operating Systems开头的那项,然后在下面选择下载“Compressed TAR Archive, Includes Boost Headers”项或“Compressed TAR Archive”。

注意:下载需要有oracle账号,如果你是新注册账号或以前有账号,但忘记了密码,oracle会向你发邮件,有时收不到邮件,此时请根据收不到oracle注册或重置密码邮件导致无法登录oracle神奇解决方法博文登录oracle官网。

3. 升级或安装某些前置软件 

        在编译mysql-8.2.0时,下列软件必须保证,否则编译会报错。

  • cmake, 版本必须 >= 3.14.6。
  • gcc、g++, 版本必须 >= 10.0.0。

3.1. 升级CMake

按如下博文:

CMake 版本升级或CMake版本升级

升级CMake,都会报如下错误:

即从源码编译cmake会报找不到openSSL,通过如下命令联网安装:

sudo snap install cmake --classic

 成功将本机CMake升级到3.27.8版本。或者参见4.1节安装OpenSSL,再通过源码安装。

3.2. 升级gcc、g++

         参见Linux下升级gcc(亲测可用)博文操作。

4. 安装依赖库

          以下安装以Ubuntu来讲解,其它系统也有类似的安装命令,请根据不同系统,做相应更改。

4.1. 安装OpenSSL

        执行如下命令:

sudo apt-get install libssl-dev

如果不安装OpenSSL,则编译时会报如下错误:

Could NOT find OpenSSL, try to set the path to OpenSSL root folder in the system variable OPENSSL_ROOT_DIR (missing: OPENSSL_LIBRARIES OPENSSL_INCLUDE_DIR) 

4.2. 安装Curses

        执行如下命令,安装Curses库:

sudo apt-get install libncurses5-dev

如果不安装该库,则会报如下错误: 

 Curses library not found.  Please install appropriate package,

4.3. 安装pkg-config

         执行如下命令,安装pkg-config库:

sudo apt install pkg-config

如果不安装,则会报如下错误:

Cannot find pkg-config

5. 编译、安装

执行如下命令:

sudo cmake . -DCMAKE_INSTALL_PREFIX=/opt/mysql8.2.0  -DMYSQL_DATADIR=/opt/mysql8.2.0/data -DWITH_DEBUG=0 -DSYSCONFDIR=/opt/mysql8.2.0/config -DMYSQL_TCP_PORT=3306  -DWITH_BOOST=/opt/mysql8.2.0/boost -DCMAKE_CXX_COMPILER=/usr/bin/g++  -DFORCE_INSOURCE_BUILD=1 -DDOWNLOAD_BOOST=1 -DWITH_BOOST=./boost_1_77_0

参数说明:

# 参数说明 (不需要输入进去)

-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
#指定mysql的安装路径
-DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \
#指定mysql进程监听套接字文件(数据库连接文件)的存储路径
-DSYSCONFDIR=/etc \
#指定配置文件的存储路径
-DSYSTEMD_PID_DIR=/usr/local/mysql \
#指定进程文件的存储路径
-DDEFAULT_CHARSET=utf8  \
#指定默认使用的字符集编码,如utf8
-DDEFAULT_COLLATION=utf8_general_ci \
#指定默认使用的字符集校对规则
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
#安装INNOBASE存储引擎
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
#安装ARCHIVE存储引擎
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
#安装BLACKHOLE存储引擎
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
#安装FEDERATED存储引擎
-DMYSQL_DATADIR=/usr/local/mysql/data \
#指定数据库文件的存储路径
-DWITH_BOOST=boost \
#指定boost的路径,
-DWITH_SYSTEMD=1
#生成便于systemctl管理的文件

上面的/opt/mysql8.2.0目录及其子目录请根据你本机实际创建好或换成你自己的路径,下同,后文不再就mysql路径目录问题做表述。之后执行如下命令编译:

sudo make -j8

估计编译耗时1.5小时,注意:如果编译出错,请参考第7节排除。编译完成后,执行如下命令安装so到指定目录:

sudo make install

6. 编译结果、配置 

编译、安装后的结果如下:

 执行如下命令打开配置: 

sudo vi /etc/profile

在文件末尾加入如下几行(注意:路径换成你本机的实际路径):

export PATH=/opt/mysql8.2.0/bin:$PATH
export LD_LIBRARY_PATH=/opt/mysql8.2.0/lib:$LD_LIBRARY_PATH

 保存退出,执行如下命令,使配置生效:

 source /etc/profile

7. 编译错误处理

7.1. 错误1

version `GLIBCXX_3.4.32' not found
version `GLIBCXX_3.4.29' not found

第1步:使用如下命令查看是否缺失文件(一般来讲肯定是缺失的)

strings /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep GLIBCXX

 结果如下:

可以看到,并没有3.4.29、3.4.32版本。

 第2步:使用如下命令查看当前系统中是否有其他同类型的文件,找一个版本较高的。

sudo find / -name "libstdc++.so.6*"

如下图,可以看到有更高版本的同类型文件:

 这个高版本的库位于gcc编译构建目录下,这也就是为何编译时提示gcc版本太低的原因。然后使用如下命令查看这个文件中是否包含需要的版本:

 strings /home/dansir/gcc-13.2.0/build/stage1-x86_64-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.32 |  grep GLIBCXX

结果如下:

如上图所示,里面包含有我们需要的版本。然后进行如下操作:

sudo  cp /home/dansir/gcc-13.2.0/build/stage1-x86_64-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.32 /usr/lib/x86_64-linux-gnu/

 即将上面找到的高版本的复制到 /usr/lib/x86_64-linux-gnu 目录下,然后执行如下命令删除软连接:

sudo rm /usr/lib/x86_64-linux-gnu/libstdc++.so.6

然后执行如下命令重新建立/usr/lib/x86_64-linux-gnu/libstdc++.so.6软连接,以指向刚才复制的高版本的库:

sudo ln -s /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.32  /usr/lib/x86_64-linux-gnu/libstdc++.so.6

问题解决!!!。注意:上面的路径,请根据你本机实际情况更改。 

7.2. 错误2

致命错误:已杀死 signal terminated program cc1plus

在虚拟机中编译的,机器本身是16G内存,分给了虚拟机8G。编译一个大项目时出现这种提示。检查原来的/etc/fstab或者通过“sudo swapon -s” 检查swap文件,发现只有2G左右大小。于是执行如下几组命令:

sudo swapoff /swapfile
sudo dd if=/dev/zero of=/swapfile bs=1M count=8192
sudo mkswap /swapfile
sudo swapon /swapfile

 如果还不行,将8192再改大些。

8.  搭建mysql数据库服务端

       说明:请切换到root用户操作本大节内容,否则某些步骤的操作可能会因为权限不够而失败!

8.1. 创建mysql用户及更改相应目录的属主

请切换到root用户操作,依次执行如下命令:

groupadd mysql
useradd -M -g mysql -s /sbin/nologin mysql
chown -R mysql:mysql /opt/mysql8.2.0
chown -R mysql:mysql /opt/mysql8.2.0/data

注意:上面的命令中,如果你本机没有/sbin/nologin,则改为: /usr/sbin/nologin

请切换到root用户操作,编辑配置文件 :

vim /etc/my.cnf
[mysqld]
basedir=/opt/mysql8.2.0
datadir=/opt/mysql8.2.0/data
socket=/tmp/mysql.sock

[mysqld_safe]
log-error=/var/log/mysqld/mysqld.log
pid-file=/var/run/mysqld/mysql.pid

请切换到root用户操作,创建日志文件存放的目录和pid文件存放的目录,并赋权给mysql用户:

mkdir -p /var/log/mysqld /var/run/mysqld
chown -R mysql:mysql /var/log/mysqld
chown -R mysql:mysql /var/run/mysqld

touch /var/log/mysqld/mysqld.log

 请切换到root用户操作,配置环境变量,方便使用MySQL的命令:

vim /etc/profile
export MYSQL_HOME=/opt/mysql8.2.0
export PATH=$PATH:$MYSQL_HOME/bin


 使配置立即生效:

source /etc/profile

查看mysql版本,以确定是否安装成功:

mysql --version  # 验证配置是否成功

 如果出现下面版本信息,则证明安装成功:

mysql  Ver 8.2.0 for Linux on x86_64 (Source distribution)

请切换到root用户操作,执行如下命令初始化数据库:

mysqld --initialize --user=mysql --basedir=/opt/mysql8.2.0 --datadir=/opt/mysql8.2.0/data

 初始化成功后会生成root账户的默认密码。将该密码复制并保存,因为后面需要使用该密码登录到MySQL中修改密码。

请切换到root用户操作,执行如下命令启动mysql进程,如果没报错,能看到如下界面,证明启动成功:

cd /opt/mysql8.2.0/support-files
./mysql.service
Starting MySQL
.. * 

再说一遍:一定要root用户执行上面的命令,否则会报如下错误:

mysql server quit without updating PID file

8.2. 将mysql进程启动做成服务 

     增加一个systemd单元配置文件,该文件详细描述了MySQL服务。文件名为mysqld.service,文件位于 /usr/lib/systemd/system 。

9. 参考链接

【1】:ImportError: /lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.29' not found - 知乎 (zhihu.com)

【2】:gcc的升级 。

【3】:"Killed signal terminated program cc1plus"编译错误解决

【4】:MySQL——源码安装教程 

【5】:mysql安装(一) - 知乎 (zhihu.com)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/176352.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

解决vue中引入天地图显示不全问题,设置setTimeout即可解决!

index.html中引入天地图api <script type"text/javascript" src"https://api.tianditu.gov.cn/api?v4.0&tk你的key"></script>map.vue中初始化天地图 //初始化天地图 initTMap() {const T window.T;// 3.初始化地图对象this.tMap new…

【Linux】历史发展及安装

目录 1. 前言2. Linux历史背景2.1 发展史2.1.1 UNIX发展的历史2.1.2 Linux发展历史 3. 开源4.Linux系统安装4.1 Linux系统选择4.2 登陆 1. 前言 从今天开始学习一门新课程Linux&#xff0c;会以博客的形式分享自己的学习笔记。如有问题请指出&#xff0c;大家共同进步。 2. L…

wvp-gb28181-pro打包

生成可执行jar cd wvp-GB28181-pro mvn package复制错误已复制 生成war cd wvp-GB28181-pro mvn package -P war 生成的包的路径 wvp-GB28181-pro\target

双12电视盒子推荐:测评员解析目前电视盒子哪个最好

电视盒子不需要每月缴费&#xff0c;只需联网就可以收看海量视频资源&#xff0c;游戏、网课、投屏等功能让电视盒子的使用场景更丰富&#xff0c;我每年都会进行数十次电视盒子测评&#xff0c;本期要分享的是双十二电视盒子推荐&#xff0c;全面解析目前电视盒子哪个最好。 一…

边缘计算多角色智能计量插座 x 资产显示标签:实现资产追踪与能耗管理的无缝结合

越来越多智慧园区、智慧工厂、智慧医院、智慧商业、智慧仓储物流等企业商家对精细化、多元化智能生态应用场景的提升&#xff0c;顺应国家节能减排、环保的时代潮流&#xff0c;设计一款基于融合以太网/WiFi/蓝牙智能控制的智能多角色插座应运而生&#xff0c;赋予智能插座以遥…

Selenium4+python被单独定义<div>的动态输入框和二级下拉框要怎么定位?

今天在做练习题的时候,发现几个问题捣鼓了好久,写下这篇来记录 问题一: 有层级的复选框无法定位到二级目录 对于这种拥有二级框的选项无法定位,也不是<select>属性. 我们查看下HTML,发现它是被单独封装在body内拥有动态属性的独立<div>,当窗口点击的时候才会触发…

为什么要学习 Linux?

为什么要学习 Linux&#xff1f; 用 Linus 本人的话来说&#xff0c;用户不需要接触到操作系统。操作系统的功能是给应用程序提供API&#xff0c;因而&#xff0c;只有开发人员才需要学习操作系统。 最近很多小伙伴找我&#xff0c;说想要一些Linux的资料&#xff0c;然后我根…

云原生正在重塑软件的整个生命周期(内附资料)

随着企业数字化转型进程的发展&#xff0c;企业面临着新旧商业形态的剧变&#xff0c;颠覆和重构时刻都在发生。 企业需要更加快速地感知用户侧的需求变化并做出调整&#xff0c;才有可能在竞争中持续积累优势。业务的个性化、敏捷化、智能化需求日益突显&#xff0c;数字化应…

聚类系列(一)——什么是聚类?

目前在做聚类方面的科研工作, 看了很多相关的论文, 也做了一些工作, 于是想出个聚类系列记录一下, 主要包括聚类的概念和相关定义、现有常用聚类算法、聚类相似性度量指标、聚类评价指标、 聚类的应用场景以及共享一些聚类的开源代码 下面正式进入该系列的第一个部分&#xff…

【性能测试】资深老鸟总结,需求分析开始到性能压测实战...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、产品需求 1&a…

设计一个实用好看的餐边柜或者酒柜需要知道这5点。福州中宅装饰,福州装修

餐厅旁边的餐边柜和酒柜是提升餐厅功能性和美观度的重要元素。它们不仅可以提供额外的储物空间&#xff0c;还可以展示精美的餐具和收纳酒品。下面为大家分享一些布置餐边柜和酒柜的灵感&#xff0c;让你的餐厅更加时尚和实用。 1. 餐边柜与酒柜的组合 将餐边柜和酒柜组合在一…

2023年中国制服需求量、市场规模及行业细分需求现状分析[图]

制服是某一种行业为体现自己的行业特点&#xff0c;并有别于其他行业而特别设计的着装。它具有很明显的功能体现与形象体现的双重含义。这种职业装不仅具有识别的象征意义&#xff0c;还规范了人的行为并使之趋于文明化、秩序化。 职业制服市场可细分为国家统一着装部门&#x…

七牛云产品使用介绍之Kodo篇

前不久刚参加完七牛云举办的第二届1024创作节&#xff08;虽然只是单方面的被各方大佬碾压&#xff09; 赛题是网页短视频应用开发&#xff0c;要求作品中使用七牛云的相关产品&#xff0c;于是我决定分享下七牛云产品的使用&#xff08;这么好用的产品很难忍住分享的心情&…

java项目之木里风景文化管理平台(ssm+vue)

项目简介 木里风景文化管理平台实现了以下功能&#xff1a; 前台功能&#xff1a;用户进入系统可以实现首页&#xff0c;旅游公告&#xff0c;景区&#xff0c;景区商品&#xff0c;景区美食&#xff0c;旅游交通工具&#xff0c;红黑榜&#xff0c;个人中心&#xff0c;后台…

Python生成exe文件

Python如何生成exe文件 在终端执行 pip install pyinstaller 在终端执行pyinstaller E:\fund_data\GetFund.py&#xff0c;运行结束后会在D:\Python\Python311\Scripts\dist\目录下生成GetFund.exe文件 3.双击exe文件运行&#xff0c;如果未出现预期结果&#xff0c;可以把e…

Autoware.universe部署06:使用DBC文件进行UDP的CAN通信代码编写

目录标题 一、安装DBC文件编辑工具VectorCANdb二、编写DBC文件2.1 CAN通信协议2.2 编写DBC文件2.2.1 根据CAN协议设置signals2.2.2 设置报文2.2.3 建立节点 三、根据DBC文件编写ROS2驱动程序四、实际通信调试 根据CAN协议编写DBC文件&#xff0c;通过DBC文件编写ROS2包进行UDP通…

基于C#实现树状数组

有一种数据结构是神奇的&#xff0c;神秘的&#xff0c;它展现了位运算与数组结合的神奇魅力&#xff0c;太牛逼的&#xff0c;它就是树状数组&#xff0c;这种数据结构不是神人是发现不了的。 一、概序 假如我现在有个需求&#xff0c;就是要频繁的求数组的前 n 项和&#x…

jQuery【菜单功能、淡入淡出轮播图(上)、淡入淡出轮播图(下)、折叠面板】(五)-全面详解(学习总结---从入门到深化)

目录 菜单功能 淡入淡出轮播图(上) 淡入淡出轮播图(下) 折叠面板 菜单功能 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><…

5分钟制作可直接导入GPTs知识库中的自动爬虫

它能从一个或多个网址爬取网站内容&#xff0c;然后生成JSON文件格式。这样爬取的内容可以直接导入到GPTs知识库中&#xff0c;方便你创建自定义知识库的GPTs。比如你有自己的网站或者资料库&#xff0c;但是整理起来太麻烦&#xff0c;就可以使用这个工具。 主要功能&#xf…