Linux环境下安装MySQL(源码安装)
- 1、事先从官网/国内镜像站点中下载源码安装包,上传至服务器:
- 2、安装开发工具和开发包(从5.5开始使用cmake编译)
- 3、创建用户和组
- 4、编译安装MySQL
- 1)解压安装包
- 2)使用cmake编译MySQL
- 3)编译报错
- 4)编译安装
- 5、配置环境变量
- 6、初始化
- 7、为mysql提供主配置文件
- 8、为mysql提供sysv服务脚本
- 9、启动MySQL
- 10、登录MySQL
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/".
See also "/usr/local/src/mysql-5.7.37/CMakeFiles/".
//大概的意思是缺少openssl-devel
[root@localhost mysql-5.7.37]# yum install openssl-devel -y //根据错误信息安装openssl-devel
/**注:由于刚刚编译报错,但部分功能已编译成功,如果想清理此前的编译所生成的文件重新编译,则需要使用如下两条命令make clean(清空编译) && rm -rf (删除文件)
**/
[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的主配置文件
[root@localhost ~]# vim /etc/my.cnf
/**
修改如下行指定mysql数据文件的存放位置:
datadir = /usr/local/mysql/data
修改如下行指定mysql套接字文件的存放位置:
socket=/tmp/
修改如下行指定mysql日志文件的存放位置:
log-error=/var/log/
修改如下行指定mysql进程id文件的存放位置:
pid-file=/usr/local/mysql/data/
**/
[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>
//登录成功