CentOS7.9源码编译安装MySQL8.0.35

2023年 12月 7日 90.5k 0

CentOS7.9源码编译安装MySQL8.0.35
操作系统版本:
[root@mysql8035 ~]# cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)
[root@mysql8035 ~]# uname -a
Linux mysql8035 3.10.0-1160.el7.x86_64 #1 SMP Mon Oct 19 16:18:59 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

安装mysql8数据库v8.0.35,无法用yum源安装的相关依赖有cmake-3.27.0、gcc8.3.1

注意:
源码安装mysql,其中两个版本对编译环境有要求
1. mysql从5.5版本开始,不再使用./configure编译,而是使用cmake编译器。
2. mysql从8.0.35版本开始,要求cmake的版本是cmake3以上
3.centos7.6默认安装的是cmake2.8.12.2和gcc4.8.5,这是为考虑向下兼容centos6.2及稳定性,但对编辑安装mysql8.0.35会形成阻碍,所以安装前建议升级cmake到cmake3以上(最新为3.14),并以scl软件集(Software Collections)的方式临时切换为高版本的gcc8.3.1完成mysql编辑(本文会分别讲述此两项)
4.务必记得先删除mariadb相关内容,尤其要删除/etc/my.cnf文件,mysql启动时会默认加载该配置文件,导致在安装参数里的设置无效,会默认加载原系统自带的mariadb目录,然后引发一系列的错误

5. 请仔细查看mysql的cmake预编译参数以及正确正确的mysql源码包,很多同学在这里乱来
mysql8.0官方编译参数:
https://dev.mysql.com/doc/refman/8.0/en/source-configuration-options.html

mysql-8.0.35.tar.gz源码包下载地址:
https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-boost-8.0.35.tar.gz

准备工作1,安装wget,用wget下载相应安装包,卸载centos自带的mariadb

[root@mysql8035 ~]# yum remove mariadb
[root@mysql8035 ~]# yum install -y wget
[root@mysql8035 ~]# wget https://cmake.org/files/v3.27/cmake-3.27.0.tar.gz
[root@mysql8035 ~]# wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-boost-8.0.35.tar.gz

准备工作2:安装基本依赖包,先用yum安装cmake、automake 、autoconf ,另MySQL 8.x需要最少安装的包有:bison,gcc、gcc-c++、ncurses-devel、openssl-devel

[root@mysql8035 ~]# yum install vim lsof lrzsz nmap screen nmap epel-release cmake make gcc gcc-c++ autoconf bison automake openssl openssl-devel zlib* fiex* libxml* ncurses-devel libmcrypt* libtool-ltdl-devel* -y

准备工作3:安装环境要求:gcc5.3及以上版本,cmake3.75以上版本(本文用gcc8.3.1和cmake3.27.0)

官方文档说明及截图如下
https://dev.mysql.com/doc/refman/8.0/en/source-installation.html

查看当前 gcc 版本,显示yum默认安装的是gcc4.8.5,由于旧版本gcc对各种c语言特性不支持
[root@mysql8035 ~]# gcc -v

安装gcc8.3.1,这里介绍使用scl软件集(Software Collections)实现多个gcc版本之间的灵活切换

1. 安装scl源
[root@mysql8035 ~]# yum install centos-release-scl -y

2.列出scl有哪些源可以用
[root@mysql8035 ~]# yum list|grep gcc

3.安装8.3.1版本的gcc、gcc-c++、gdb,当前CentOS7支持3,4,6,7,8五个版本,分别对应GCC4.9,GCC5.3,GCC8.3.1,GCC7.3,,GCC8.2,用户可以根据自己的需要选择安装哪一个版本,本文安装GCC8.3.1

[root@mysql8035 ~]# yum install devtoolset-8-gcc* -y

4.临时切换gcc为新版本有两个命令(source /opt/rh/devtoolset-8/enable或scl enable devtoolset-8 bash)
[root@mysql8035 ~]# source /opt/rh/devtoolset-8/enable

[root@mysql8035 ~]# gcc -v
gcc version 8.3.1 20190311 (Red Hat 8.3.1-3) (GCC)
至此,gcc已显示为8.3.1版本,若要在启动的时候就生效,可以放置到~/.bashrc之中即可

只要make编译通不过,请检查当前的gcc版本(命令:gcc -v),版本要求5.3以上(※ 非常重要)

准备工作4:升级cmake2为cmake3以上

yum默认安装2.8.12.2,编译mysql8.0.35会提示以下错误:
-- Running cmake version 2.8.12.2
CMake Warning at CMakeLists.txt:43 (MESSAGE):
Please use cmake3 rather than cmake on this platform
-- Please install cmake3 (yum install cmake3)
CMake Error at CMakeLists.txt:55 (CMAKE_MINIMUM_REQUIRED):
CMake 3.4.3 or higher is required. You are running version 2.8.12.2
-- Configuring incomplete, errors occurred!

更新cmake,先用yum移除原cmake
[root@mysql8035 ~]# yum -remove cmake -y
[root@mysql8035 ~]# tar zxvf cmake-3.27.0.tar.gz
[root@mysql8035 ~]# cd cmake-3.27.0
[root@mysql8035 cmake-3.27.0]# ./bootstrap
[root@mysql8035 cmake-3.27.0]# gmake && gmake install
[root@mysql8035 cmake-3.27.0]# /usr/local/bin/cmake --version
cmake version 3.27.0
CMake suite maintained and supported by Kitware (kitware.com/cmake).
显示的版本号为cmake version 3.27.0,再建立软连接[cmake更新完毕]
[root@mysql8035 cmake-3.27.0]# ln -s /usr/local/bin/cmake /usr/bin/

下面开始正式进入mysql的安装步骤:
我的mysql目录配置如下:
安装路径:/usr/local/mysql
数据库路径:/var/lib/mysql
源码包存放位置:/root/

[root@mysql8035 ~]# tar zxvf mysql-8.0.35.tar.gz
[root@mysql8035 ~]# mkdir -p /usr/local/mysql
[root@mysql8035 ~]# mkdir -p /var/lib/mysql
[root@mysql8035 ~]# cd mysql-8.0.35
[root@mysql8035 mysql-8.0.35]# mkdir -p build
[root@mysql8035 mysql-8.0.35]# cd build
[root@mysql8035 build]# cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DSYSCONFDIR=/usr/local/mysql -DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock -DDEFAULT_CHARSET=utf8mb4 -DDEFAULT_COLLATION=utf8mb4_unicode_ci -DWITH_SSL=system -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_ARCHIVE_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWITH_PERFSCHEMA_STORAGE_ENGINE=1 -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNODB_MEMCACHED=ON -DENABLED_LOCAL_INFILE=ON -DMYSQL_TCP_PORT=3306 -DDOWNLOAD_BOOST=1 -DWITH_BOOST=/root/mysql-8.0.35/boost/boost_1_77_0/ -DMYSQL_DATADIR=/var/lib/mysql
[root@mysql8035 build]# make -j 4 && make install
执行多任务并发编译安装,make -j x(x为任务数)
通过TOP查看,确实是4个线程在编译,这个一般根据CPU核数来指定。我的电脑只有4核,所以只能配置为4了
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
9606 root 20 0 185076 45068 10360 R 100.0 1.1 0:03.02 cc1
9621 root 20 0 167732 26604 10640 R 99.0 0.7 0:01.34 cc1
9317 root 20 0 490020 342128 13900 R 96.1 8.5 0:34.46 cc1plus
9626 root 20 0 183572 34848 5680 R 91.2 0.9 0:00.93 cc1plus

※ 部分编译参数特别说明
-DDOWNLOAD_BOOST=1 -DWITH_BOOST=/tmp
若mysql编译时未加入上述参数,会报错如下:
报错:CMake Error at cmake/boost.cmake:101 (MESSAGE): You can download it with -DDOWNLOAD_BOOST=1 -DWITH_BOOST=
-DDOWNLOAD_BOOST=1,表示系统会自动下载解压boost,若已下载,请将该参数置0

由于我下载的这个版本是带Boost的版本,源码安装包中已包含boost源文件,所以只要指定一下目录就可以了,
-DDOWNLOAD_BOOST=1 -DWITH_BOOST=/root/mysql-8.0.35/boost/boost_1_77_0/
源码包中的文件位置如下:
[root@mysql8035 mysql-8.0.35]# ls
boost configure.cmake INSTALL man README storage
build Docs libbinlogevents mkdir router strings
client Doxyfile-ignored libbinlogstandalone mysql-test run_doxygen.cmake support-files
cmake Doxyfile.in libchangestreams MYSQL_VERSION scripts testclients
CMakeLists.txt doxygen_resources libmysql mysys share unittest
components extra libservices packaging sql utilities
config.h.cmake include LICENSE plugin sql-common vio
[root@mysql8035 mysql-8.0.35]# cd boost/
[root@mysql8035 boost]# pwd
/root/mysql-8.0.35/boost
[root@mysql8035 boost]# ls
boost_1_77_0

下面开始正式进入mysql的配置步骤:

1. 创建mysql用户组(查看mysql.mysql的用户及组是否存在,不存在就创建)
[root@mysql8035 ~]# cat /etc/passwd |grep mysql
[root@mysql8035 ~]# groupadd mysql
[root@mysql8035 ~]# useradd mysql -g mysql -s /sbin/nologin
[root@mysql8035 ~]# cat /etc/passwd |grep mysql
mysql:x:1000:1000::/home/mysql:/sbin/nologin

2. 将mysql目录赋予mysql用户的执行权限
[root@mysql8035 ~]# chown mysql.mysql -R /usr/local/mysql
[root@mysql8035 ~]# chown mysql.mysql -R /var/lib/mysql

3. 初始化mysql,会生成root初始化密码,注意保存
[root@mysql8035 ~]# /usr/local/mysql/bin/mysqld --initialize --user=mysql
2023-12-06T01:27:31.429731Z 0 [Warning] [MY-011070] [Server] 'Disabling symbolic links using --skip-symbolic-links (or equivalent) is the default. Consider not using this option as it' is deprecated and will be removed in a future release.
2023-12-06T01:27:31.429826Z 0 [System] [MY-013169] [Server] /usr/local/mysql/bin/mysqld (mysqld 8.0.35) initializing of server in progress as process 11095
2023-12-06T01:27:31.491320Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2023-12-06T01:27:31.714054Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
2023-12-06T01:27:32.790934Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@mysql8035: 0wjj)riL6*mf

※ 临时密码:[Server] A temporary password is generated for root@mysql8035: 0wjj)riL6*mf

4. 启动mysql
修改错误日志路径:
cat /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock

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

创建文件并授权:
touch /usr/local/mysql/mysql-error.log
chown mysql.mysql /usr/local/mysql/mysql-error.log

[root@mysql8035 ~]# /usr/local/mysql/bin/mysqld_safe --user=mysql &

用secureCRT开启新会话,进入数据库(0wjj)riL6*mf 是刚才生成的临时密码)
[root@mysql8035 ~]# /usr/local/mysql/bin/mysql -uroot -p'0wjj)riL6*mf'

# 修改root 密码为 123456
mysql> alter user 'root'@'localhost' identified by "mysql.123";
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+

4 rows in set (0.01 sec)

# 添加mysql远程登录账号
mysql> create user root@'%' identified by 'mysql.123';
Query OK, 0 rows affected (0.02 sec)

mysql> grant all privileges on *.* to root@'%';
Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)

# 查看目前的帐号,有%的root账号表示远程登录账号配置成功
mysql> select user,host from mysql.user;

+------------------+-----------+
| user | host |
+------------------+-----------+
| root | % |
| mysql.infoschema | localhost |
| mysql.session | localhost |
| mysql.sys | localhost |
| root | localhost |
+------------------+-----------+
5 rows in set (0.00 sec)

mysql> quit

5. 配置为系统服务并加入开机启动
[root@mysql8035 ~]# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
[root@mysql8035 ~]# chmod 755 /etc/init.d/mysqld
[root@mysql8035 ~]# chkconfig --list|grep mysqld
[root@mysql8035 ~]# chkconfig mysqld on
[root@mysql8035 ~]# chkconfig --list|grep mysqld
mysqld 0:关 1:关 2:开 3:开 4:开 5:开 6:关

mysqld已加入系统服务,设置为开机自启动

通过服务启动数据库:
[root@mysql8035 mysql]# systemctl start mysqld
[root@mysql8035 mysql]# ps -ef | grep mysql
root 11627 1389 0 09:42 pts/0 00:00:00 vim mysql-error.log
root 11696 1 0 09:51 ? 00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/var/lib/mysql --pid-file=/var/lib/mysql/mysql8035.pid
mysql 11848 11696 11 09:51 ? 00:00:00 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/var/lib/mysql --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/usr/local/mysql/mysql-error.log --pid-file=/var/lib/mysql/mysql8035.pid --socket=/var/lib/mysql/mysql.sock
root 11897 1389 0 09:51 pts/0 00:00:00 grep --color=auto mysql
通过服务停止数据库:
[root@mysql8035 mysql]# systemctl stop mysqld

配置系统环境变量:
[root@mysql8035 mysql]# tail -n 1 /etc/profile
export PATH="/usr/local/mysql/bin:$PATH"
[root@mysql8035 mysql]# source /etc/profile

至此,mysql安装配置结束!

在防火墙中开启mysql的3306的远程访问,这样就可以使用navicat等工具连上mysql
[root@mysql8035 ~]# firewall-cmd --zone=public --add-port=3306/tcp --permanent
success
[root@mysql8035 ~]# firewall-cmd --reload
success

附录:
centos7默认的防火墙为firewalld,基本命令如下:

开启3306端口,(--permanent永久生效,没有此参数重启后失效)

[root@mysql8035 ~]# firewall-cmd --zone=public --add-port=3306/tcp --permanent
重新载入,使修改立即生效(每次修改都执行该命令)

[root@mysql8035 ~]# firewall-cmd --reload
查看所有打开的端口

[root@mysql8035 ~]# firewall-cmd --zone=public --list-ports
查看指定的端口是否打开

[root@mysql8035 ~]# firewall-cmd --zone= public --query-port=3306/tcp
删除指定的端口

[root@mysql8035 ~]# firewall-cmd --zone= public --remove-port=3306/tcp --permanent

mysql8.0官方编译参数的英文文档简单翻译说明一下:

https://dev.mysql.com/doc/refman/8.0/en/source-configuration-options.html

The InnoDB, MyISAM, MERGE, MEMORY, and CSV engines are mandatory (always compiled into the server) and need not be installed explicitly. (说明:mysql默认支持的数据库引擎有InnoDB,MyISAM, MERGE, MEMORY, CSV,无需在编译时再声明)

所以上面的编译条件省掉了如下行

-DWITH_MYISAM_STORAGE_ENGINE=1
-DWITH_MEMORY_STORAGE_ENGINE=1
-DWITH_INNOBASE_STORAGE_ENGINE=1

相关错误处理
1. CMake Error: The source directory "/xxx/mysql-8.0.35" does not appear to contain CMakeLists.txt
解决:下载的mysql版本有问题。应下载:选择Source Code

2. mysql8源码编译运行CMake,提示Please do not build in-source. Out-of source builds are highly recommended,提示不要在源文档中cmake

解决:在源文档中建个子目录来执行cmake即可(本例中建立了build目录),不在源目录中cmake是良好的习惯。

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

解决:yum install ncurses-devel 和 yum install openssl-devel

相关文章

Oracle如何使用授予和撤销权限的语法和示例
Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
社区版oceanbase安装
Oracle 导出CSV工具-sqluldr2
ETL数据集成丨快速将MySQL数据迁移至Doris数据库

发布评论