MySQL源码编译

news2025/1/7 18:19:37

华子目录

  • 下载源码包
  • 上传并解压
  • 安装
    • `cmake环境检测`
    • `make编译`
    • `make install安装`
  • 部署
  • 复制`编译文件`到`别的主机上`

下载源码包

  • 下载相应源码包mysql5.7编译安装需要boost库,这里官网下载boost源码包
  • https://downloads.mysql.com/archives/community/

在这里插入图片描述

上传并解压

[root@mysql-node1 ~]# du -sh mysql-boost-5.7.44.tar.gz
51M     mysql-boost-5.7.44.tar.gz

#解压
[root@mysql-node1 ~]# tar -zxf mysql-boost-5.7.44.tar.gz

[root@mysql-node1 ~]# du -sh mysql-5.7.44/
475M    mysql-5.7.44/

安装

cmake环境检测

这里我们先不安装它的依赖包,我们在安装的过程中安装依赖包

  • 安装cmake
[root@mysql-node1 ~]# cd mysql-5.7.44/
[root@mysql-node1 mysql-5.7.44]# yum install cmake -y
  • 使用cmake进行环境检测
[root@mysql-node1 mysql-5.7.44]# cmake \
> -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \  #指定安装路径
> -DMYSQL_DATADIR=/data/mysql \  #指定数据目录
> -DMYSQL_UNIX_ADDR=/data/mysql/mysql.sock \  #指定套接字文件
> -DWITH_INNOBASE_STORAGE_ENGINE=1 \  #指定启用INNODB存储引擎,默认用myisam
> -DWITH_EXTRA_CHARSETS=all \  #扩展字符集
> -DDEFAULT_CHARSET=utf8mb4 \  #指定默认字符集
> -DDEFAULT_COLLATION=utf8mb4_unicode_ci \  #指定默认校验字符集
> -DWITH_BOOST=/root/mysql-5.7.44/boost/boost_1_59_0/  #指定c++库依赖
  • 在检测过程中,会生成一个CMakeCache.txt缓存文件,文件中记录了检测时的全部过程
  • 如果检测失败,需要重新检测时,需要删除CMakeCache.txt缓存文件

在这里插入图片描述

  • 安装gcc-c++
[root@mysql-node1 mysql-5.7.44]# yum install gcc-c++ -y
  • 继续检测
[root@mysql-node1 mysql-5.7.44]# rm -rf CMakeCache.txt

[root@mysql-node1 mysql-5.7.44]# cmake \
> -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \  #指定安装路径
> -DMYSQL_DATADIR=/data/mysql \  #指定数据目录
> -DMYSQL_UNIX_ADDR=/data/mysql/mysql.sock \  #指定套接字文件
> -DWITH_INNOBASE_STORAGE_ENGINE=1 \  #指定启用INNODB存储引擎,默认用myisam
> -DWITH_EXTRA_CHARSETS=all \  #扩展字符集
> -DDEFAULT_CHARSET=utf8mb4 \  #指定默认字符集
> -DDEFAULT_COLLATION=utf8mb4_unicode_ci \  #指定默认校验字符集
> -DWITH_BOOST=/root/mysql-5.7.44/boost/boost_1_59_0/  #指定c++库依赖

在这里插入图片描述

  • 安装openssl-devel
[root@mysql-node1 mysql-5.7.44]# yum install openssl-devel -y
  • 继续检测
[root@mysql-node1 mysql-5.7.44]# rm -rf CMakeCache.txt

[root@mysql-node1 mysql-5.7.44]# cmake \
> -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \  #指定安装路径
> -DMYSQL_DATADIR=/data/mysql \  #指定数据目录
> -DMYSQL_UNIX_ADDR=/data/mysql/mysql.sock \  #指定套接字文件
> -DWITH_INNOBASE_STORAGE_ENGINE=1 \  #指定启用INNODB存储引擎,默认用myisam
> -DWITH_EXTRA_CHARSETS=all \  #扩展字符集
> -DDEFAULT_CHARSET=utf8mb4 \  #指定默认字符集
> -DDEFAULT_COLLATION=utf8mb4_unicode_ci \  #指定默认校验字符集
> -DWITH_BOOST=/root/mysql-5.7.44/boost/boost_1_59_0/  #指定c++库依赖

在这里插入图片描述

  • 安装ncurses-devel
[root@mysql-node1 mysql-5.7.44]# yum install ncurses-devel -y
  • 继续检测
[root@mysql-node1 mysql-5.7.44]# rm -rf CMakeCache.txt

[root@mysql-node1 mysql-5.7.44]# cmake \
> -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \  #指定安装路径
> -DMYSQL_DATADIR=/data/mysql \  #指定数据目录
> -DMYSQL_UNIX_ADDR=/data/mysql/mysql.sock \  #指定套接字文件
> -DWITH_INNOBASE_STORAGE_ENGINE=1 \  #指定启用INNODB存储引擎,默认用myisam
> -DWITH_EXTRA_CHARSETS=all \  #扩展字符集
> -DDEFAULT_CHARSET=utf8mb4 \  #指定默认字符集
> -DDEFAULT_COLLATION=utf8mb4_unicode_ci \  #指定默认校验字符集
> -DWITH_BOOST=/root/mysql-5.7.44/boost/boost_1_59_0/  #指定c++库依赖

在这里插入图片描述
在这里插入图片描述

  • 安装libtirpc-devel
[root@mysql-node1 ~]# yum install libtirpc-devel-0.2.4-0.16.el7.x86_64.rpm -y
  • 继续检测
[root@mysql-node1 mysql-5.7.44]# rm -rf CMakeCache.txt    

[root@mysql-node1 mysql-5.7.44]# cmake \
> -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \  #指定安装路径
> -DMYSQL_DATADIR=/data/mysql \  #指定数据目录
> -DMYSQL_UNIX_ADDR=/data/mysql/mysql.sock \  #指定套接字文件
> -DWITH_INNOBASE_STORAGE_ENGINE=1 \  #指定启用INNODB存储引擎,默认用myisam
> -DWITH_EXTRA_CHARSETS=all \  #扩展字符集
> -DDEFAULT_CHARSET=utf8mb4 \  #指定默认字符集
> -DDEFAULT_COLLATION=utf8mb4_unicode_ci \  #指定默认校验字符集
> -DWITH_BOOST=/root/mysql-5.7.44/boost/boost_1_59_0/  #指定c++库依赖

在这里插入图片描述

make编译

  • 检测完毕后,make开始编译编译时间较长
  • CMakeCache.txt会记录编译过程,所以即使编译中断,也可以使用make重新进行编译编译会跟着之前的编译继续编译
#检测完毕后,make开始编译,编译时间较长
[root@mysql-node1 mysql-5.7.44]# make -j2
#-j2 表示有几个核心就跑几个进程

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

make install安装

  • 安装时间较短
[root@mysql-node1 mysql-5.7.44]# make install

部署

  • 修改配置文件
[root@mysql-node1 ~]# vim /etc/my.cnf
[root@mysql-node1 ~]# cat /etc/my.cnf
[mysqld]
datadir=/data/mysql
socket=/data/mysql/mysql.sock
symbolic-links=0
  • 创建用户(如果不建立用户后面初始化的时候会报错
#-M:不创建用户的主目录
[root@mysql-node1 ~]# useradd -s /sbin/nologin -M mysql
  • 创建datadir目录,并修改目录所属者所属组
[root@mysql-node1 ~]# mkdir -p /data/mysql/

[root@mysql-node1 ~]# chown mysql:mysql /data/ -R
  • 添加mysql命令环境变量
#进入到安装目录
[root@mysql-node1 ~]# cd /usr/local/mysql/
[root@mysql-node1 mysql]# ls -F
bin/   include/  LICENSE  mysql-test/  README-test  support-files/
docs/  lib/      man/     README       share/

#添加环境变量
[root@mysql-node1 mysql]# vim ~/.bash_profile

在这里插入图片描述

[root@mysql-node1 mysql]# source ~/.bash_profile
  • 生成启动脚本
[root@mysql-node1 ~]# cd /usr/local/mysql/support-files/
[root@mysql-node1 support-files]# ls
magic  mysqld_multi.server  mysql-log-rotate  mysql.server
[root@mysql-node1 support-files]# cp mysql.server /etc/init.d/mysqld
  • 初始化
[root@mysql-node1 ~]# mysqld --user mysql --initialize

在这里插入图片描述

#初始化后,生成一系列文件
[root@mysql-node1 ~]# ls /data/mysql/
auto.cnf         ib_buffer_pool  mysql            performance_schema  sys
ca-key.pem       ibdata1         mysql-node2.err  private_key.pem
ca.pem           ib_logfile0     mysql-node2.pid  public_key.pem
client-cert.pem  ib_logfile1     mysql.sock       server-cert.pem
client-key.pem   ibtmp1          mysql.sock.lock  server-key.pem

[root@mysql-node1 ~]# ll /data/mysql/
总用量 110660
-rw-r-----. 1 mysql mysql       56 1130 22:15 auto.cnf
-rw-------. 1 mysql mysql     1680 1130 22:15 ca-key.pem
-rw-r--r--. 1 mysql mysql     1112 1130 22:15 ca.pem
-rw-r--r--. 1 mysql mysql     1112 1130 22:15 client-cert.pem
-rw-------. 1 mysql mysql     1680 1130 22:15 client-key.pem
-rw-r-----. 1 mysql mysql      436 1130 22:15 ib_buffer_pool
-rw-r-----. 1 mysql mysql 12582912 1130 22:15 ibdata1
-rw-r-----. 1 mysql mysql 50331648 1130 22:15 ib_logfile0
-rw-r-----. 1 mysql mysql 50331648 1130 22:15 ib_logfile1
drwxr-x---. 2 mysql mysql     4096 1130 22:15 mysql
drwxr-x---. 2 mysql mysql     8192 1130 22:15 performance_schema
-rw-------. 1 mysql mysql     1680 1130 22:15 private_key.pem
-rw-r--r--. 1 mysql mysql      452 1130 22:15 public_key.pem
-rw-r--r--. 1 mysql mysql     1112 1130 22:15 server-cert.pem
-rw-------. 1 mysql mysql     1680 1130 22:15 server-key.pem
drwxr-x---. 2 mysql mysql     8192 1130 22:15 sys
  • 如果忘记密码,可以删掉文件重新进行初始化
[root@mysql-node1 ~]# rm -rf /data/mysql/*
[root@mysql-node1 ~]# ll /data/mysql/
总用量 0
[root@mysql-node1 ~]# mysqld --user mysql --initialize

在这里插入图片描述

  • 启动mysql
[root@mysql-node1 ~]# /etc/init.d/mysqld start
Starting MySQL.Logging to '/data/mysql/mysql-node1.err'.
 SUCCESS!
  • 设置mysql开机自启动企业6系统常用)
[root@mysql-node1 ~]# yum install chkconfig -y
[root@mysql-node1 ~]# chkconfig mysqld on  #chkconfig命令将mysqld服务设置为在所有或指定的运行级别下自动启动
[root@mysql-node1 ~]# chkconfig --list

注:该输出结果只显示 SysV 服务,并不包含
原生 systemd 服务。SysV 配置数据
可能被原生 systemd 配置覆盖。

      要列出 systemd 服务,请执行 'systemctl list-unit-files'。
      查看在具体 target 启用的服务请执行
      'systemctl list-dependencies [target]'。

mysqld          0:关    1:关    2:开    3:开    4:开    5:开    6:关
netconsole      0:关    1:关    2:关    3:关    4:关    5:关    6:关
network         0:关    1:关    2:开    3:开    4:开    5:开    6:关
rhnsd           0:关    1:关    2:开    3:开    4:开    5:开    6:关
  • 进入mysql
[root@mysql-node1 ~]# mysql -uroot -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.44

Copyright (c) 2000, 2023, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
#这里需要修改MySQL的密码,否则使用不了MySQL
mysql> alter user root@localhost identified by "123456";
Query OK, 0 rows affected (0.00 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.01 sec)

mysql>

至此,编译成功

复制编译文件别的主机上

  • 这里我们再将node1上编译好的文件复制node2主机
#在node2上创建用户并创建数据目录
[root@mysql-node2 ~]# useradd -s /sbin/nologin -M mysql
[root@mysql-node2 ~]# mkdir -p /data/mysql
[root@mysql-node2 ~]# chown mysql:mysql /data/ -R
#拷贝安装目录
[root@mysql-node1 ~]# rsync -a -r /usr/local/mysql root@172.25.254.20:/usr/local/
#拷贝配置文件
[root@mysql-node1 ~]# rsync /etc/my.cnf root@172.25.254.20:/etc/
  • 拷贝启动脚本
[root@mysql-node2 ~]# cd /usr/local/mysql/support-files/
[root@mysql-node2 support-files]# ls
magic  mysqld_multi.server  mysql-log-rotate  mysql.server
[root@mysql-node2 support-files]# cp mysql.server /etc/init.d/
  • 设置环境变量
[root@mysql-node2 support-files]# vim ~/.bash_profile

在这里插入图片描述

[root@mysql-node2 support-files]# source ~/.bash_profile
  • 初始化
[root@mysql-node2 ~]# mysqld --user mysql --initialize

在这里插入图片描述

[root@mysql-node2 ~]# ls /data/mysql/
auto.cnf         ib_buffer_pool  mysql            performance_schema  sys
ca-key.pem       ibdata1         mysql-node2.err  private_key.pem
ca.pem           ib_logfile0     mysql-node2.pid  public_key.pem
client-cert.pem  ib_logfile1     mysql.sock       server-cert.pem
client-key.pem   ibtmp1          mysql.sock.lock  server-key.pem
  • 启动mysql
[root@mysql-node2 ~]# /etc/init.d/mysql.server start
Starting MySQL.Logging to '/data/mysql/mysql-node2.err'.
 SUCCESS!
  • 设置开机自启动
[root@mysql-node2 ~]# chkconfig mysql.server on
[root@mysql-node2 ~]# chkconfig --list

注:该输出结果只显示 SysV 服务,并不包含
原生 systemd 服务。SysV 配置数据
可能被原生 systemd 配置覆盖。

      要列出 systemd 服务,请执行 'systemctl list-unit-files'。
      查看在具体 target 启用的服务请执行
      'systemctl list-dependencies [target]'。

mysql.server    0:关    1:关    2:开    3:开    4:开    5:开    6:关
netconsole      0:关    1:关    2:关    3:关    4:关    5:关    6:关
network         0:关    1:关    2:开    3:开    4:开    5:开    6:关
rhnsd           0:关    1:关    2:开    3:开    4:开    5:开    6:关
  • 进入mysql
[root@mysql-node2 ~]# mysql -uroot -p
Enter password:

mysql> show databases;
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
#需要修改完密码才能使用
mysql> alter user root@localhost identified by "123456";
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

请求(request)

目录 前言 request概述 request的使用 获取前端传递的数据 实例 请求转发 特点 语法 实例 实例1 实例2 【关联实例1】 域对象 组成 作用范围: 生命周期: 使用场景: 使用步骤 存储数据对象 获得数据对象 移除域中的键值…

推荐学习笔记:矩阵补充和矩阵分解

参考: 召回 fun-rec/docs/ch02/ch2.1/ch2.1.1/mf.md at master datawhalechina/fun-rec GitHub 业务 隐语义模型与矩阵分解 协同过滤算法的特点: 协同过滤算法的特点就是完全没有利用到物品本身或者是用户自身的属性, 仅仅利用了用户与…

构造函数与析构函数错题汇总

构造函数不能定义返回类型,也没有返回类型。 堆、栈、静态存储区。栈上的对象main函数结束就释放,堆上的需要手动释放,静态存储区的在所在作用域的程序结束时释放。这里static在main函数内,是局部变量,所以作用域为…

[免费]SpringBoot+Vue景区订票(购票)系统【论文+源码+SQL脚本】

大家好,我是java1234_小锋老师,看到一个不错的SpringBootVue大景区订票(购票)系统,分享下哈。 项目视频演示 【免费】SpringBootVue景区订票(购票)系统 Java毕业设计_哔哩哔哩_bilibili 项目介绍 现代经济快节奏发展以及不断完善升级的信息…

fastdds:编译、安装并运行helloworld

fastdds安装可以参考官方文档: 3. Linux installation from sources — Fast DDS 3.1.0 documentation 从INSTALLATION MANUAL这一节可以看出来,fastdds支持的操作系统包括linux、windows、qnx、MAC OS。本文记录通过源码和cmake的方式来安装fastdds的…

HTTP 探秘之旅:从入门到未来

文章目录 导言:目录:第一篇:HTTP,互联网的“快递员”第二篇:从点开网页到看到内容,HTTP 究竟做了什么?第三篇:HTTP 的烦恼与进化史第四篇:HTTP 的铠甲——HTTPS 的故事第…

【软件项目测试文档大全】软件测试方案,验收测试计划,验收测试报告,测试用例,集成测试,测试规程和指南,等保测试(Word原件)

1. 引言 1.1. 编写目的 1.2. 项目背景 1.3. 读者对象 1.4. 参考资料 1.5. 术语与缩略语 2. 测试策略 2.1. 测试完成标准 2.2. 测试类型 2.2.1. 功能测试 2.2.2. 性能测试 2.2.3. 安全性与访问控制测试 2.3. 测试工具 3. 测试技术 4. 测试资源 4.1. 人员安排 4.…

前端拿不到 response 响应流返回的 header 例如 Content-Disposition 等

同步发布于我的网站 🚀 背景介绍默认可访问的响应头问题分析解决方案 示例 前端代码示例注意事项总结 背景介绍 在进行前后端交互时,前端有时需要读取服务器返回的特定响应头(如 Content-Disposition),以便根据这些…

SQL进阶——C++与SQL进阶实践

在C开发中,SQL数据库的操作是开发者常见的任务之一。虽然前面我们已经介绍了如何在C中通过数据库连接执行基本的SQL查询,但在实际项目中,我们通常需要更加复杂和高效的数据库操作。存储过程与函数的调用、复杂SQL查询的编写、以及动态构造SQL…

论文概览 |《Urban Analytics and City Science》2023.05 Vol.50 Issue.4

本次给大家整理的是《Environment and Planning B: Urban Analytics and City Science》杂志2023年5月第50卷第4期的论文的题目和摘要,一共包括19篇SCI论文! 论文1 Data analytics and sustainable urban development in global cities 全球城市的数据…

HarmonyOS4+NEXT星河版入门与项目实战(24)------Stage模型

文章目录 1、概念2、配置文件1、全局配置文件2、模块配置文件3、UIAbility生命周期1、图文归纳2、生命周期方法入口4、页面生命周期1、图文描述1、概念 2、配置文件 1、全局配置文件 2、模块配置文件 统一修改配置文件技巧:点击任意json 文件,选择 Open editor ,在显示的列表…

kubernetes——part3-2 集群声明式文件YAML

一、YAML介绍 YAML 的意思是:仍是一种标记语言,但为了强调这种语言以数据做为中心,而不是以标记语言为重点。是一个可读性高,用来表达数据序列的格式。 二、基本语法 1.低版本缩进时不允许使用Tab键,只允许使用空格…

告别 Kafka,拥抱 Databend:构建高效低成本的用户行为分析体系

用户行为数据埋点指标是数据仓库中不可或缺的重要数据源之一,同时也是企业最宝贵的资产之一。通常情况下,用户行为数据分析包含两大数据源:用户行为分析日志和上游关系型数据库(如 MySQL)。基于这些数据,企…

产出一篇论文的各个步骤

产出一篇论文的各个步骤 建议–实用 如何看论文: (前提:优秀论文,如顶会论文/杂志,了解顶会是那些,召开时间是什么时候) 创新点 记录下来说过的别的文章/方法的缺陷 – 看文章就是看优点/指出…

AtomicIntegerFieldUpdater能否降低内存

1. 代码如下: import java.util.LinkedList; import java.util.List; import java.util.concurrent.atomic.AtomicInteger;public class AtomicIntegerTest {final AtomicInteger startPosition new AtomicInteger(0);final AtomicInteger wrotePosition new Atom…

ClickHouse数据迁移(远程)

一、背景 公司最近买了新的服务器,旧的服务器上面安装了ClickHouse22.2.2.1,新的服务器上面安装了ClickHouse24.9.2.42,两个版本之间要做历史数据迁移 旧服务器:80(IP最后一段,以下代称),ClickHouse版本&am…

Flutter:页面滚动

1、单一页面,没有列表没分页的,推荐使用:SingleChildScrollView() return Scaffold(backgroundColor: Color(0xffF6F6F6),body: SingleChildScrollView(child: _buildView()) );2、列表没分页,如购物车页,每个item之间…

Artec Leo:航海设备维护的便携式3D扫描利器【沪敖3D】

挑战:海军服务提供商USP Maritime需要CAD数据来执行维修和改装任务,特别是在偏远地区的任务,以及原始设计丢失的情况下。 解决方案:Artec Leo, Artec Studio, Autodesk Inventor 效果:高精度船舶组件和船坞机械模型&…

复杂网络(三)

一、几种常见的中心性指标 1.1 度中心性 度中心性分为节点度中心性和网络度中心性。前者指的是节点在其与之直接相连的邻居节点当中的中心程度,二后者则侧重节点在整个网络的中心程度,表征的是整个网络的集中或集权程度,即整个网络围绕一个…

蓝桥杯嵌入式入门指南-UART【7】

在all.c定义缓存变量 char uart_tx[50];//uart缓冲区 char uart_rx[50];//uart缓冲区USRT发送(使用strlen时需要在all.h添加string.h) sprintf(uart_tx ," PB15:%.4f V \r\n ",adc_data_PB15);HAL_UART_Transmit(&huart1,(uint8_t *)uart_tx,strlen(uart_tx)…