MySQL源码编译

华子目录

下载源码包

上传并解压

bash 复制代码
[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
bash 复制代码
[root@mysql-node1 ~]# cd mysql-5.7.44/
[root@mysql-node1 mysql-5.7.44]# yum install cmake -y
  • 使用cmake进行环境检测
bash 复制代码
[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++
bash 复制代码
[root@mysql-node1 mysql-5.7.44]# yum install gcc-c++ -y
  • 继续检测
bash 复制代码
[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
bash 复制代码
[root@mysql-node1 mysql-5.7.44]# yum install openssl-devel -y
  • 继续检测
bash 复制代码
[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
bash 复制代码
[root@mysql-node1 mysql-5.7.44]# yum install ncurses-devel -y
  • 继续检测
bash 复制代码
[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
bash 复制代码
[root@mysql-node1 ~]# yum install libtirpc-devel-0.2.4-0.16.el7.x86_64.rpm -y
  • 继续检测
bash 复制代码
[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重新进行编译编译会跟着之前的编译继续编译
bash 复制代码
#检测完毕后,make开始编译,编译时间较长
[root@mysql-node1 mysql-5.7.44]# make -j2
#-j2 表示有几个核心就跑几个进程



make install安装

  • 安装时间较短
bash 复制代码
[root@mysql-node1 mysql-5.7.44]# make install

部署

  • 修改配置文件
bash 复制代码
[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
  • 创建用户(如果不建立用户后面初始化的时候会报错
bash 复制代码
#-M:不创建用户的主目录
[root@mysql-node1 ~]# useradd -s /sbin/nologin -M mysql
  • 创建datadir目录,并修改目录所属者所属组
bash 复制代码
[root@mysql-node1 ~]# mkdir -p /data/mysql/

[root@mysql-node1 ~]# chown mysql:mysql /data/ -R
  • 添加mysql命令环境变量
bash 复制代码
#进入到安装目录
[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
bash 复制代码
[root@mysql-node1 mysql]# source ~/.bash_profile
  • 生成启动脚本
bash 复制代码
[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
  • 初始化
bash 复制代码
[root@mysql-node1 ~]# mysqld --user mysql --initialize
bash 复制代码
#初始化后,生成一系列文件
[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 11月 30 22:15 auto.cnf
-rw-------. 1 mysql mysql     1680 11月 30 22:15 ca-key.pem
-rw-r--r--. 1 mysql mysql     1112 11月 30 22:15 ca.pem
-rw-r--r--. 1 mysql mysql     1112 11月 30 22:15 client-cert.pem
-rw-------. 1 mysql mysql     1680 11月 30 22:15 client-key.pem
-rw-r-----. 1 mysql mysql      436 11月 30 22:15 ib_buffer_pool
-rw-r-----. 1 mysql mysql 12582912 11月 30 22:15 ibdata1
-rw-r-----. 1 mysql mysql 50331648 11月 30 22:15 ib_logfile0
-rw-r-----. 1 mysql mysql 50331648 11月 30 22:15 ib_logfile1
drwxr-x---. 2 mysql mysql     4096 11月 30 22:15 mysql
drwxr-x---. 2 mysql mysql     8192 11月 30 22:15 performance_schema
-rw-------. 1 mysql mysql     1680 11月 30 22:15 private_key.pem
-rw-r--r--. 1 mysql mysql      452 11月 30 22:15 public_key.pem
-rw-r--r--. 1 mysql mysql     1112 11月 30 22:15 server-cert.pem
-rw-------. 1 mysql mysql     1680 11月 30 22:15 server-key.pem
drwxr-x---. 2 mysql mysql     8192 11月 30 22:15 sys
  • 如果忘记密码,可以删掉文件重新进行初始化
bash 复制代码
[root@mysql-node1 ~]# rm -rf /data/mysql/*
[root@mysql-node1 ~]# ll /data/mysql/
总用量 0
bash 复制代码
[root@mysql-node1 ~]# mysqld --user mysql --initialize
  • 启动mysql
bash 复制代码
[root@mysql-node1 ~]# /etc/init.d/mysqld start
Starting MySQL.Logging to '/data/mysql/mysql-node1.err'.
 SUCCESS!
  • 设置mysql开机自启动企业6系统常用)
bash 复制代码
[root@mysql-node1 ~]# yum install chkconfig -y
[root@mysql-node1 ~]# chkconfig mysqld on  #chkconfig命令将mysqld服务设置为在所有或指定的运行级别下自动启动
bash 复制代码
[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
bash 复制代码
[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主机
bash 复制代码
#在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
bash 复制代码
#拷贝安装目录
[root@mysql-node1 ~]# rsync -a -r /usr/local/mysql root@172.25.254.20:/usr/local/
bash 复制代码
#拷贝配置文件
[root@mysql-node1 ~]# rsync /etc/my.cnf root@172.25.254.20:/etc/
  • 拷贝启动脚本
bash 复制代码
[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/
  • 设置环境变量
bash 复制代码
[root@mysql-node2 support-files]# vim ~/.bash_profile
bash 复制代码
[root@mysql-node2 support-files]# source ~/.bash_profile
  • 初始化
bash 复制代码
[root@mysql-node2 ~]# mysqld --user mysql --initialize
bash 复制代码
[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
bash 复制代码
[root@mysql-node2 ~]# /etc/init.d/mysql.server start
Starting MySQL.Logging to '/data/mysql/mysql-node2.err'.
 SUCCESS!
  • 设置开机自启动
bash 复制代码
[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
bash 复制代码
[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                |
+--------------------+
相关推荐
凡人的AI工具箱3 分钟前
每天40分玩转Django:Django类视图
数据库·人工智能·后端·python·django·sqlite
知识的宝藏7 分钟前
Django models中的增删改查与MySQL SQL的对应关系
sql·mysql·django·django models
路在脚下@8 分钟前
MySQL的索引失效的原因有那些
数据库·mysql
凡人的AI工具箱13 分钟前
每天40分玩转Django:实操图片分享社区
数据库·人工智能·后端·python·django
CT随19 分钟前
MongoDB
数据库·mongodb
新子-存在了35 分钟前
linux中 mysql备份
linux·运维·mysql
Fool丶玄浅1 小时前
【数据库系统概论】—— 关系数据库
数据库·数据库系统
DashVector1 小时前
如何通过HTTP API检索Doc
数据库·人工智能·http·阿里云·数据库开发·向量检索
vvw&2 小时前
如何在 Ubuntu 22.04 上安装 phpMyAdmin
linux·运维·服务器·mysql·ubuntu·php·phpmyadmin
SEO-狼术2 小时前
Enhance Security in Software Crack
数据库