1、事先从官网/国内镜像站点中下载源码安装包,上传至服务器:

[root@localhost ~]# wget -c mysql-boost-5.7.37.tar.gz	
//也可以下没有带boost的安装包,但由于和boost包有依赖关系,后期仍需要下载boost包,因此建议直接下载带boost的安装包

2、安装开发工具和开发包(从5.5开始使用cmake编译)

yum install make gcc gcc-c++ cmake bison-devel ncurses-devel -y
//上方命令中的make gcc gcc-c++ cmake表示需要以上语言进行编译

//由于不同系统可能出现其它的问题,因此大概写出其它可能需要的依赖包
yum install libaio libaio-devel openssl-devel -y
yum install perl-Data-Dumper -y
yum install net-tools -y	

3、创建用户和组

[root@localhost ~]# groupadd -r -g 303 mysql	//创建系统组并设置组号为303
[root@localhost ~]# useradd -r -g 303 -u 303 -s /bin/false mysql	//创建系统用户,设置组号为303,用户id为303,“-s /bin/false”表示此用户无需登录

[root@localhost ~]# id mysql	//查看结果
uid=303(mysql) gid=303(mysql) groups=303(mysql)

4、编译安装MySQL

1)解压安装包

[root@localhost ~]# tar xf mysql-boost-5.7.37.tar.gz -C /usr/local/src/
//-C表示指定解压路径为/usr/local/src/

[root@localhost ~]# cd /usr/local/src/		//查看解压结果
[root@localhost src]# ll
total 4
drwxr-xr-x 35 7161 31415 4096 Nov 30 04:18 mysql-5.7.37

2)使用cmake编译MySQL

[root@localhost ~]# cd /usr/local/src/mysql-5.7.37/		//需要事先切换至此路径下,否则编译失败

//【注:下方每一项前面均需要添加-D】
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \	  //指定MySQL安装路径
-DMYSQL_DATADIR=/usr/local/mysql/data -DSYSCONFDIR=/etc \	//指定MySQL数据文件路径以及系统配置文件路径
-DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_ARCHIVE_STORAGE_ENGINE=1 \	 
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWITH_FEDERATED_STORAGE_ENGINE=1 \	//上面两行表示开启各种存储引擎
-DWITH_READLINE=1 -DWITH_SSL=system -DWITH_ZLIB=system -DWITH_LIBWRAP=0 \
-DMYSQL_TCP_PORT=3306 -DMYSQL_UNIX_ADDR=/tmp/mysql.sock \
-DENABLED_LOCAL_INFILE=1 -DEXTRA_CHARSETS=all \
-DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci \
--DWITH_BOOST=/usr/local/src/mysql-5.7.37/boost/	//指定到时候需要使用的boost包路径(重要)

/**
上方很多项的默认值与我们所需一致,不需要我们再配一次
因此真正需要的为以下项:
**/
cmake -DWITH_BOOST=/usr/local/src/mysql-5.7.37/boost \		//指定到时候需要使用的boost包路径(重要)
-DWITH_SSL=system \		//开启加密功能
-DWITH_ZLIB=system \	//开启ZLIB功能
-DSYSCONFDIR=/etc \		//指定系统配置文件路径
-DMYSQL_DATADIR=/usr/local/mysql/data	//指定MySQL数据文件路径

/**
再次强调:
必须在下方路径下配置以上命令:
[root@localhost mysql-5.7.37]# pwd
/usr/local/src/mysql-5.7.37
**/

3)编译报错

//末尾显示如下错误信息
Cannot find appropriate system libraries for WITH_SSL=system.
Make sure you have specified a supported SSL version. 
Valid options are : 
system (use the OS openssl library), 
yes (synonym for system), 
</path/to/custom/openssl/installation>

CMake Error at cmake/ssl.cmake:62 (MESSAGE):
  Please install the appropriate openssl developer package.

Call Stack (most recent call first):
  cmake/ssl.cmake:305 (FATAL_SSL_NOT_FOUND_ERROR)
  CMakeLists.txt:568 (MYSQL_CHECK_SSL)


-- Configuring incomplete, errors occurred!
See also "/usr/local/src/mysql-5.7.37/CMakeFiles/CMakeOutput.log".
See also "/usr/local/src/mysql-5.7.37/CMakeFiles/CMakeError.log".
//大概的意思是缺少openssl-devel

[root@localhost mysql-5.7.37]# yum install openssl-devel -y		//根据错误信息安装openssl-devel

/**注:由于刚刚编译报错,但部分功能已编译成功,如果想清理此前的编译所生成的文件重新编译,则需要使用如下两条命令make clean(清空编译) && rm -rf CMakeCache.txt(删除CMakeCache.txt文件)
**/
[root@localhost mysql-5.7.37]# make clean
make: *** No rule to make target `clean'.  Stop.

[root@localhost mysql-5.7.37]# ls
archive_output_directory  CMakeCache.txt   dbug                 INSTALL              libservices  mysys_ssl  regex             storage        VERSION
boost                     CMakeFiles       Docs                 libbinlogevents      LICENSE      packaging  scripts           strings        VERSION.dep
BUILD                     CMakeLists.txt   Doxyfile-perfschema  libbinlogstandalone  man          plugin     source_downloads  support-files  vio
client                    config.h.cmake   extra                libmysql             mysql-test   rapid      sql               testclients    win
cmake                     configure.cmake  include              libmysqld            mysys        README     sql-common        unittest       zlib
[root@localhost mysql-5.7.37]# rm -rf CMakeCache.txt

//随后重新编译
[root@localhost mysql-5.7.37]# cmake -DWITH_BOOST=/usr/local/src/mysql-5.7.37/boost \		
-DWITH_SSL=system \	
-DWITH_ZLIB=system \
-DSYSCONFDIR=/etc \	
-DMYSQL_DATADIR=/usr/local/mysql/data
//此时查看是否还有其它报错信息(不同系统环境不一样)
//若无报错信息,表示编译成功

4)编译安装

[root@localhost mysql-5.7.14]# make && make install		//此时慢慢等待(需要很久)

5、配置环境变量

【可以先配,也可以后配,先配可以在初始化时路径写短一点(原本需要完整写出路径mysql/bin/mysqld,现在路径可以直接写mysqld),仅此而已】

[root@localhost ~]# vim /etc/profile.d/mysql.sh
[root@localhost ~]# cat /etc/profile.d/mysql.sh 
export PATH=$PATH:/usr/local/mysql/bin

[root@localhost ~]# source /etc/profile.d/mysql.sh		//执行shell脚本

6、初始化

[root@localhost ~]# mysqld --initialize --user=mysql --datadir=/usr/local/mysql/data --basedir=/usr/local/mysql/
//--initialize表示初始化 --user表示用户为mysql --basedir表示指定基本目录 --datadir表示指定数据目录
2022-04-05T07:59:31.063173Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2022-04-05T07:59:31.241461Z 0 [Warning] InnoDB: New log files created, LSN=45790
2022-04-05T07:59:31.269721Z 0 [Warning] InnoDB: Creating foreign key constraint system tables.
2022-04-05T07:59:31.343593Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: 532220a5-b4b6-11ec-a32f-000c29bf3b9d.
2022-04-05T07:59:31.344304Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.
2022-04-05T07:59:31.492091Z 0 [Warning] A deprecated TLS version TLSv1 is enabled. Please use TLSv1.2 or higher.
2022-04-05T07:59:31.492104Z 0 [Warning] A deprecated TLS version TLSv1.1 is enabled. Please use TLSv1.2 or higher.
2022-04-05T07:59:31.492484Z 0 [Warning] CA certificate ca.pem is self signed.
2022-04-05T07:59:31.665252Z 1 [Note] A temporary password is generated for root@localhost: AwHAlt#:(3eg
//注:最下方末尾处为MySQL临时密码,需要记住

[root@localhost ~]# ll /usr/local/mysql/data/
total 122952
-rw-r----- 1 mysql mysql       56 Apr  5 15:59 auto.cnf
-rw------- 1 mysql mysql     1676 Apr  5 15:59 ca-key.pem
-rw-r--r-- 1 mysql mysql     1112 Apr  5 15:59 ca.pem
-rw-r--r-- 1 mysql mysql     1112 Apr  5 15:59 client-cert.pem
-rw------- 1 mysql mysql     1680 Apr  5 15:59 client-key.pem
-rw-r----- 1 mysql mysql      436 Apr  5 15:59 ib_buffer_pool
-rw-r----- 1 mysql mysql 12582912 Apr  5 16:00 ibdata1
-rw-r----- 1 mysql mysql 50331648 Apr  5 16:00 ib_logfile0
-rw-r----- 1 mysql mysql 50331648 Apr  5 15:59 ib_logfile1
-rw-r----- 1 mysql mysql 12582912 Apr  5 16:00 ibtmp1
-rw-r----- 1 mysql mysql        6 Apr  5 16:00 localhost.localdomain.pid
drwxr-x--- 2 mysql mysql     4096 Apr  5 15:59 mysql
drwxr-x--- 2 mysql mysql     8192 Apr  5 15:59 performance_schema
-rw------- 1 mysql mysql     1680 Apr  5 15:59 private_key.pem
-rw-r--r-- 1 mysql mysql      452 Apr  5 15:59 public_key.pem
-rw-r--r-- 1 mysql mysql     1112 Apr  5 15:59 server-cert.pem
-rw------- 1 mysql mysql     1680 Apr  5 15:59 server-key.pem
drwxr-x--- 2 mysql mysql     8192 Apr  5 15:59 sys

7、为mysql提供主配置文件

这里偷一下懒,直接修改Linux默认安装的MariaDB的my.cnf主配置文件

[root@localhost ~]# vim /etc/my.cnf
/**
修改如下行指定mysql数据文件的存放位置:
datadir = /usr/local/mysql/data
修改如下行指定mysql套接字文件的存放位置:
socket=/tmp/mysql.sock
修改如下行指定mysql日志文件的存放位置:
log-error=/var/log/mysqld.log
修改如下行指定mysql进程id文件的存放位置:
pid-file=/usr/local/mysql/data/mysqld.pid
**/

[root@localhost ~]# cat /etc/my.cnf		//下方为修改后结果显示
[mysqld]
datadir=/usr/local/mysql/data
socket=/tmp/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mariadb according to the
# instructions in http://fedoraproject.org/wiki/Systemd

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/usr/local/mysql/data/mysqld.pid

#
# include all files from the config directory
#
!includedir /etc/my.cnf.d

8、为mysql提供sysv服务脚本

[root@localhost ~]# cp /usr/local/src/mysql-5.7.37/support-files/mysql.server /etc/init.d/mysqld
[root@localhost ~]# ll /etc/init.d/mysqld	//查看mysqld权限,发现没有执行(x)权限,需要另外添加
-rw-r--r-- 1 root root 10576 Apr  5 15:55 /etc/init.d/mysqld
[root@localhost ~]# chmod +x /etc/init.d/mysqld 	//为mysqld添加执行(x)权限

[root@localhost ~]# ll /etc/init.d/mysqld 		//查看权限添加结果
-rwxr-xr-x 1 root root 10576 Apr  5 15:55 /etc/init.d/mysqld

9、启动MySQL

[root@localhost ~]# chkconfig --add mysqld		//添加为系统服务
[root@localhost ~]# chkconfig mysqld on		//开机自启动
[root@localhost ~]# systemctl start mysqld		//启动MySQL服务
[root@localhost ~]# systemctl status mysqld		//查看MySQL状态
● mysqld.service - LSB: start and stop MySQL
   Loaded: loaded (/etc/rc.d/init.d/mysqld; bad; vendor preset: disabled)
   Active: active (running) since Tue 2022-04-05 16:00:02 CST; 5s ago
     Docs: man:systemd-sysv-generator(8)
  Process: 37664 ExecStart=/etc/rc.d/init.d/mysqld start (code=exited, status=0/SUCCESS)
   CGroup: /system.slice/mysqld.service
           ├─37672 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/usr/local/mysql/data --pid-file=/usr/local/mysql/data/localhost.localdomain.pid
           └─37826 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-er...

Apr 05 16:00:01 localhost.localdomain systemd[1]: Starting LSB: start and stop MySQL...
Apr 05 16:00:02 localhost.localdomain mysqld[37664]: Starting MySQL. SUCCESS!
Apr 05 16:00:02 localhost.localdomain systemd[1]: Started LSB: start and stop MySQL.

10、登录MySQL

[root@localhost ~]# mysql -uroot -p'AwHAlt#:(3eg'
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.37

Copyright (c) 2000, 2022, 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>
//登录成功
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐