当前位置:   article > 正文

编译安装MySQL数据库5.7教程_mysql5.7 编译 systemd

mysql5.7 编译 systemd

1.环境

一台CentOS7.6.3的机器

2.安装准备

下载mysql-5.7.31源码包
1.登录网站https://dev.mysql.com/downloads/mysql/,如图:
在这里插入图片描述
2.选择Source Code
在这里插入图片描述
选择好后如下图展示:
在这里插入图片描述
3.上图显示的都是8以上版本的,我们要下载5.7.31版本,所以继续走下去,点击红色方框的内容
在这里插入图片描述
点击上图红色方框的内容之后,显示如下图,这时候就看到5.7.31版本了:
在这里插入图片描述
4.选择好mysql版本之后我们还要选择与系统匹配的版本,如下图选择红色大箭头的那一列,我们的环境的CentOS7:
在这里插入图片描述
选择好之后如下图,点击Download即可下载mysql-5.7.31的源码包:
在这里插入图片描述

下载完之后将mysql-community-5.7.31-1.el7.src.rpm传到CentOS7.6.3机器上

安装mysql-community-5.7.31-1.el7.src.rpm:
[root@test2 ~]# rpm -ivh mysql-community-5.7.31-1.el7.src.rpm
#安装完后会在当前用户的家目录生成一个目录rpmbuild,如果因为权限不足安装不了,使用sudo安装之后rpmbuild目录会在root家目录生成哦!

我们需要的boost源码包跟mysql-5.7.31源码包都在在rpmbuild目录下的SOURCES目录下
[root@test2 ~/rpmbuild/SOURCES]# ll
total 153656
-rw-r–r-- 1 root root 70389425 Jun 2 19:26 boost_1_59_0.tar.bz2
-rwxr-xr-x 1 root root 160 Jun 2 19:26 filter-provides.sh
-rwxr-xr-x 1 root root 176 Jun 2 19:26 filter-requires.sh
-rw-r–r-- 1 root root 32525559 Jun 2 19:26 mysql-5.6.45.tar.gz
-rw-r–r-- 1 root root 54418341 Jun 2 17:18 mysql-5.7.31.tar.gz

3.编译安装过程

1.安装环境依赖包
[root@test2 ~/rpmbuild/SOURCES]# yum -y install ncurses ncurses-devel bison
还需要安装cmake,cmake看个人是用yum源的cmake,还是自己找高点的版本编译安装
因为搭建LNMP环境,如果使用php版本比较高的话,可能需要重新安装libzip,而安装libzip需要cmake,如果编译安装libzip的版本较高的话,yum源自带的cmake版本比较低可能会引起一些问题

2.创建用户
[root@test2 ~/rpmbuild/SOURCES]# useradd -s /sbin/nologin mysql

3.将安装包解压缩放在指定的目录中
[root@test2 ~/rpmbuild/SOURCES]# tar -jxvf boost_1_59_0.tar.bz2 -C /home/ops

如果你的机器没有安装bzip2,会报以下错误:
tar (child): bzip2: Cannot exec: No such file or directory
tar (child): Error is not recoverable: exiting now
tar: Child returned status 2
tar: Error is not recoverable: exiting now
解决办法:
[root@test2 ~/rpmbuild/SOURCES]# yum -y install bzip2

[root@test2 ~/rpmbuild/SOURCES]# tar -zxvf mysql-5.7.31.tar.gz -C /home/ops

4.将解压后的boost改名
[root@test2 ~/rpmbuild/SOURCES]# mv boost_1_59_0/ boost

5.安装软件依赖包
[root@test2 ~/rpmbuild/SOURCES]# yum -y install gcc gcc-c++

6.编译安装msyql
cd /home/ops/mysql-5.7.31/
[root@test2 /home/ops/mysql-5.7.31]# cmake
-DCMAKE_INSTALL_PREFIX=/home/ops/mysql
-DMYSQL_UNIX_ADDR=/home/ops/mysql/mysql.sock
-DSYSCONFDIR=/etc
-DSYSTEMD_PID_DIR=/home/ops/mysql
-DMYSQL_TCP_PORT=3306
-DDEFAULT_CHARSET=utf8
-DDEFAULT_COLLATION=utf8_general_ci
-DENABLED_LOCAL_INFILE=1
-DWITH_EXTRA_CHARSETS=1
-DEXTRA_CHARSETS=all
-DWITH_INNOBASE_STORAGE_ENGINE=1
-DWITH_ARCHIVE_STORAGE_ENGINE=1
-DWITH_BLACKHOLE_STORAGE_ENGINE=1
-DWITH_MYISAM_STORAGE_ENGINE=1
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1
-DMYSQL_DATADIR=/home/ops/mysql/data
-DWITH_BOOST=/home/ops/boost
-DWITH_SYSTEMD=1

为了方便复制所以加了这段

cmake -DCMAKE_INSTALL_PREFIX=/home/ops/mysql -DMYSQL_UNIX_ADDR=/home/ops/mysql/mysql.sock -DSYSCONFDIR=/etc -DSYSTEMD_PID_DIR=/home/ops/mysql -DMYSQL_TCP_PORT=3306 -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DENABLED_LOCAL_INFILE=1 -DWITH_EXTRA_CHARSETS=1 -DEXTRA_CHARSETS=all -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_ARCHIVE_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_PERFSCHEMA_STORAGE_ENGINE=1 -DMYSQL_DATADIR=/home/ops/mysql/data -DWITH_BOOST=/home/ops/boost -DWITH_SYSTEMD=1
  • 1
-DCMAKE_INSTALL_PREFIX=/home/ops/mysql 							#指定安装路径
-DMYSQL_UNIX_ADDR=/home/ops/mysql/mysql.sock 					#mysql.sock文件生成路径,发起本地连接时使用		
-DSYSCONFDIR=/etc												#配置文件路径
-DSYSTEMD_PID_DIR=/home/ops/mysql								#PID文件指定路径 
-DMYSQL_TCP_PORT=3306 											#msyql监听端口
-DDEFAULT_CHARSET=utf8 											#指定默认字符集
-DDEFAULT_COLLATION=utf8_general_ci 							#校验字符,指定默认编码
-DENABLED_LOCAL_INFILE=1										#允许从本地导入数据
-DWITH_EXTRA_CHARSETS=1											#支持额外的字符集
-DEXTRA_CHARSETS=all											#安装所有扩展字符集
-DWITH_INNOBASE_STORAGE_ENGINE=1 								#安装innodb存储引擎
-DWITH_ARCHIVE_STORAGE_ENGINE=1									#安装archive 存储引擎 								
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 								#安装blackhole存储引擎
-DWITH_MYISAM_STORAGE_ENGINE=1									#安装myisam存储引擎
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 								#安装FEDERATED存储引擎
-DMYSQL_DATADIR=/home/ops/mysql/data 							#指定数据存放路径
-DWITH_BOOST=/home/ops/boost 									#boost库主要是在对mysql的数据备份时用到
-DWITH_SYSTEMD=1												#这是MySQL 5.7原生支持Systemd的选项,如果要是用systemctl启动,就必须开启
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

报错1:
CMake Error at cmake/boost.cmake:88 (MESSAGE):
You can download it with -DDOWNLOAD_BOOST=1 -DWITH_BOOST=<directory>
This CMake script will look for boost in <directory>. If it is not there,
it will download and unpack it (in that directory) for you.
If you are inside a firewall, you may need to use an http proxy:
export http_proxy=http://example.com:80
Call Stack (most recent call first):
cmake/boost.cmake:174 (COULD_NOT_FIND_BOOST)
CMakeLists.txt:548 (INCLUDE)
-- Configuring incomplete, errors occurred!
See also "/home/wuyoupin/data/server/mysql-5.7.31/CMakeFiles/CMakeOutput.log".
See also "/home/wuyoupin/data/server/mysql-5.7.31/CMakeFiles/CMakeError.log".
原因:
-DWITH_BOOST=/home/ops/boost 这里的boost库路径指定不对
解决办法:
1.修正-DWITH_BOOST=boost库的路径,在第4步那里,boost_1_59_0目录被移动到哪里,就填哪里的绝对路径
2.重新cmake

报错2:
CMake Error at cmake/readline.cmake:71 (MESSAGE):
Curses library not found. Please install appropriate package,
remove CMakeCache.txt and rerun cmake.On Debian/Ubuntu, package name is libncurses5-dev, on Redhat and >derivates it is ncurses-devel.
Call Stack (most recent call first):
cmake/readline.cmake:102 (FIND_CURSES)
cmake/readline.cmake:195 (MYSQL_USE_BUNDLED_EDITLINE)
CMakeLists.txt:582 (MYSQL_CHECK_EDITLINE)
– Configuring incomplete, errors occurred!
See also “/home/ops/mysql-5.7.31/CMakeFiles/CMakeOutput.log”.
See also “/home/ops/mysql-5.7.31/CMakeFiles/CMakeError.log”.
原因:
缺少ncurses-devel支持包
解决:
yum -y install ncurses-devel

注意:如果在CMAKE的过程中有报错,当报错解决后,需要把源码目录中的CMakeCache.txt文件删除,然后再重新Cmake

cmake成功截图:
在这里插入图片描述

7.编译安装
[root@test2 /home/ops/mysql-5.7.31]# make && make install #编译过程有点久,耐心等待咯

8.创建mysql数据文件存放目录,修改mysql工作目录的所有者跟所属组
[root@test2 /home/ops/mysql-5.7.31]# cd …/mysql
[root@test2 /home/ops/mysql]# mkdir data
[root@test2 /home/ops/mysql]# cd …
[root@test2 /home/ops]# chown -R mysql:mysql mysql
[root@test2 /home/ops]# chmod 777 mysql/data/

9.将配置声明到环境变量中
[root@test2 /home/ops]# vim /etc/profile
如下图:在export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL前面添加export PATH=$PATH:/home/ops/mysql/bin
在这里插入图片描述
注意:

/home/ops/mysql/bin这个路径视情况而定,另外export PATH=$PATH:/home/ops/mysql/bin添加的位置也不是固定的,可以添加到文件的其他地方,尽量添加到export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL的上面

[root@test2 /home/ops]# source /etc/profile

10.调整配置文件
[root@test2 /home/ops]# vim /etc/my.cnf

[client]
port=3306
socket=/home/ops/mysql/mysql.sock

[mysqld]
basedir=/home/ops/mysql
datadir=/home/ops/mysql/data
socket=/home/ops/mysql/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
#skip-grant-tables

[mysqld_safe]
log-error=/home/ops/mysql/mysql-error.log
pid-file=/home/ops/mysql/mysql.pid

#include all files from the config directory
!includedir /etc/my.cnf.d
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

注意:如果编译安装mysql之后没有在/etc/目录下生成配置文件,直接新建一个,按自己需求添加配置就好了

11.初始化数据库
[root@test2 /home/ops]# cd mysql
[root@test2 /home/ops/mysql]# bin/mysqld
–initialize
–user=mysql
–basedir=/home/ops/mysql
–datadir=/home/ops/mysql/data/
报错1: 初始化数据库的时候发现以下错误,是权限问题,需要给data目录777权限,还要递归设置mysql目录的所有者和所属组为mysql:mysql
mysqld: Can't create/write to file '/home/ops/opt/mysql/data/is_writable' (Errcode: 13 - Permission denied)
报错2:没有找到具体原因,不过重新编译之后初始化通过了
mysqld: Character set 'ut8' is not a compiled character set and is not specified in the '/home/ops/opt/mysql/share/charsets/Index.xml' file 2021-01-20T03:29:51.664592Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details). 2021-01-20T03:29:51.665810Z 0 [ERROR] Aborting

下面一段是为了方便复制,就是初始化的命令

bin/mysqld --initialize --user=mysql --basedir=/home/ops/mysql --datadir=/home/ops/mysql/data/
  • 1

初始化数据库输出信息:

2020-08-26T06:49:25.448942Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2020-08-26T06:49:26.475806Z 0 [Warning] InnoDB: New log files created, LSN=45790
2020-08-26T06:49:26.672309Z 0 [Warning] InnoDB: Creating foreign key constraint system tables.
2020-08-26T06:49:26.736700Z 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: 4882c7d8-e768-11ea-b1ec-00163e0d400a.
2020-08-26T06:49:26.738847Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.
2020-08-26T06:49:27.043038Z 0 [Warning] CA certificate ca.pem is self signed.
2020-08-26T06:49:27.148709Z 1 [Note] A temporary password is generated for root@localhost: )dZfe<.n&5_r
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

#本次初始化随机密码为:)dZfe<.n&5_r,在输出信息的最后一行找

12.将service服务启动脚本放到systemd目录下执行

[root@test2 /home/ops/mysql]# cp /home/ops/mysql/usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/
  • 1

13.重新加载、启动服务、查看端口状态

[root@test2 /home/ops/mysql]# sudo systemctl daemon-reload
[root@test2 /home/ops/mysql]# sudo systemctl start mysqld
[root@test2 /home/ops/mysql]# netstat -ntap | grep 3306
tcp6       0      0 :::3306                 :::*                    LISTEN      3103/mysqld
  • 1
  • 2
  • 3
  • 4

可以看到3306端口已经起来了,说明mysqld服务已经起来了
systemctl daemon-reload: 重新加载某个服务的配置文件,如果新安装了一个服务,归属于 systemctl 管理,要是新服务的服务程序配置文件生效,需重新加载。

如果在启动mysqld服务的时候出现这个错误:
Job for mysqld.service failed because the control process exited with error code. See "systemctl status mysqld.service" and "journalctl -xe" for details.
解决办法:

[root@test2 /home/ops/mysql]# sudo journalctl -xe
1.假如看到以下这一段内容,说明data目录的文件权限不对,或者所属组,所有者不对,所有者所属组全部属于mysql才是对的
在这里插入图片描述
①检查初始化数据库之后data目录文件的属性
[root@test2 /home/ops/mysql]# ll data/
在这里插入图片描述
②可以明显看到所有者与所属组都是ops而不是mysql,所以接下来就是修改data目录下所有文件的所有者和所属组就好了
[root@test2 /home/ops/mysql]# sudo chown -R mysql:mysql data/
③再次启动mysqld
[root@test2 /home/ops/mysql]# sudo systemctl start mysqld
tcp6 0 0 :::3306 ::

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/在线问答5/article/detail/988597
推荐阅读
相关标签