首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >CentOS Stream 9 安装MySQL5.7和MySQL8.4

CentOS Stream 9 安装MySQL5.7和MySQL8.4

原创
作者头像
IvanM
修改2024-10-24 09:56:29
修改2024-10-24 09:56:29
2.6K0
举报
文章被收录于专栏:CentOSCentOS

好多人都因为“CentOS 已死”觉得自CentOS 8.5以后再没必要使用CentOS了,可是我看过一篇《CentOS Stream 是稳定的 | 观点》,觉得很有道理,于是用了一段时间CentOS Stream9。就我个人而言,它是强大且稳定的,至少我觉得比8.4要好。

前端时间因为需要安装了mysql5.7,又想用8.4LTS,网上找了很多资料都是安装在centos7的,centos8的都很少,而stream9因为取消了init.d变的又不太一样,所以经过一番折腾有了这篇CentOS Stream9MySQL安装手记。

因为第一次发东西,可能有些地方不够准确或清晰,但是过程我觉得是保姆级的了。希望对想用CentOS Stream 9的你有所帮助。

如需转载请著名出处。

Write by Ivan

2024-10-23

Ⅰ.前期准备工作

1.下载MySQL Community Server Arichive

在oracle.com官网下载MySQL Community Server 5.7和L8.4两个LTS版本

代码语言:bash
复制
wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.44-linux-glibc2.12-x86_64.tar.gz
wget https://dev.mysql.com/get/Downloads/MySQL-8.4/mysql-8.4.3-linux-glibc2.28-x86_64.tar.xz

2.建立mysql文件夹

代码语言:bash
复制
sudo mkdir /usr/local/mysql

3.解压文件到mysql文件夹

解压缩MySQL5.7到mysql文件夹

代码语言:bash
复制
sudo tar -xvf ArchiveFile_Path/mysql-5.7.44-linux-glibc2.12-x86_64.tar.gz -C /usr/local/mysql/

解压缩MySQL8.4到mysql文件夹

代码语言:bash
复制
sudo tar -xvf ArchiveFile_Path/mysql-8.4.2-linux-glibc2.28-x86_64.tar.xz  -C /usr/local/mysql/

修改mysql5.7文件夹名称

代码语言:bash
复制
sudo mv /usr/local/mysql/mysql-5.7.44-linux-glibc2.12-x86_64 /usr/local/mysql/mysql5.7

修改mysql8.4文件夹名称

代码语言:bash
复制
sudo mv /usr/local/mysql/mysql-8.4.2-linux-glibc2.28-x86_64 /usr/local/mysql/mysql8.4

4.建立数据库文件夹

代码语言:txt
复制
sudo mkdir /usr/local/mysql/mysql5.7/data \
sudo mkdir /usr/local/mysql/mysql8.4/data

5.建立mysql5.7数据库配置文件

代码语言:bash
复制
sudo vim /usr/local/mysql/mysql5.7/my.cnf
代码语言:txt
复制
# 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]
#skip-grant-tables
basedir=/usr/local/mysql/mysql5.7
datadir=/usr/local/mysql/mysql5.7/data
port = 3306

[mysqld_safe]
log-error=/usr/local/mysql/mysql5.7/data/error.log
pid-file=/usr/local/mysql/mysql5.7/data/mysqld5.7.pid
tmpdir=/tmp/mysql5.7

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

建立mysql8.4数据库配置文件

代码语言:bash
复制
sudo vim /usr/local/mysql/mysql8.4/my.cnf
代码语言:txt
复制
# 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]
#skip-grant-tables
basedir=/usr/local/mysql/mysql8.4
datadir=/usr/local/mysql/mysql8.4/data
port = 3307

[mysqld_safe]
log-error=/usr/local/mysql/mysql8.4/data/error.log
pid-file=/usr/local/mysql/mysql8.4/data/mysqld8.4.pid
tmpdir=/tmp/mysql8.4

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

6.修改MySQL5.7数据库启动文件内容

代码语言:bash
复制
sudo vim /usr/local/mysql/mysql5.7/support-files/mysql.server

# 修改以下内容

basedir=/usr/local/mysql/mysql5.7 # 46行修改base文件夹路径

datadir=/usr/local/mysql/mysql5.7/data # 47行修改data文件夹路径

lockdir='/var/lock/subsys/mysql' # 57行lock路径 ##如果遇到提示没有lock权限需执行sudo chown -R mysql:mysql /var/lock/subsys/mysql

lock_file_path="$lockdir/mysql5.7" # 58行修改lock文件路径

mysqld_pid_file_path=/usr/local/mysql/mysql5.7/data/mysqld5.7.pid # 63行修改pid文件位置

conf=/usr/local/mysql/mysql5.7/my.cnf # 207行修改my.cnf文件位置

# 准备工作完成,没有任何文件关联和用户关联,删除mysql文件夹后无任何残留。

Ⅱ. 配置MySQL

1.建立软链接

建立mysql5.7的软链接

代码语言:bash
复制
sudo ln -s /usr/local/mysql/mysql5.7/bin/mysql /usr/bin/mysql5.7

建立mysqld5.7的软链接,没有也无所谓

代码语言:bash
复制
sudo ln -s /usr/local/mysql/mysql5.7/bin/mysqld /usr/bin/mysqld5.7

建立mysql8.4的软链接

代码语言:bash
复制
sudo ln -s /usr/local/mysql/mysql8.4/bin/mysql /usr/bin/mysql8.4

建立mysqld8.4的软链接,没有也无所谓

代码语言:bash
复制
sudo ln -s /usr/local/mysql/mysql8.4/bin/mysqld /usr/bin/mysqld8.4

2.添加mysql用户组和用户

建立mysql用户组

代码语言:bash
复制
sudo groupadd mysql 

增加用户mysql到mysql用户组

代码语言:bash
复制
sudo useradd -aG mysql  mysql

3.对文件和文件夹授权

对mysql用户授予MySQL所在文件夹拥有权

代码语言:bash
复制
sudo chown -R mysql:mysql /usr/local/mysql/*.*

将mysql服务器启动文件授予可执行

代码语言:bash
复制
sudo chmod 755 /usr/local/mysql/mysql5.7/support-files/mysql.server

#可以直接授予权限级别777,可能会遇到selinux安全限制。具体没研究明白但是后续遇到了安全级别的问题,不知是否与这一步有关。

4.初始化MySQL5.7

代码语言:bash
复制
sudo /usr/local/mysql//mysql5.7/bin/mysqld --defaults-file=/usr/local/mysql/mysql5.7/my.cnf --user=mysql --initialize-insecure

5.启动MySQL服务器

代码语言:bash
复制
sudo -u mysql /usr/local/mysql/mysql5.7/support-files/mysql.server start

提示错误

代码语言:txt
复制
Starting MySQL.. ERROR! The server quit without updating PID file (/usr/local/mysql/mysql5.7/data/mysqld5.7.pid).

如果没执行4.初始化MySQL,会提示错误,需要删除data文件内所有文件,执行初始化后在启动MySQL服务器

提示启动成功

代码语言:txt
复制
Starting MySQL. SUCCESS!

#关闭MySQL服务器可以使用 sudo /usr/local/mysql/mysql5.7/support-files/mysql.server stop

查看MySQL服务器状态

代码语言:bash
复制
/usr/local/mysql/mysql5.7/support-files/mysql.server status

返回结果

代码语言:txt
复制
SUCCESS! MySQL running (5104) 

6.执行mysql打开连接数据库

代码语言:bash
复制
mysql5.7 -u root

*如果提示缺少libcnurses运行文件,就找到对应最新版本建立提示缺少同名的软链接

因为CentOS Stream 9使用libncurses6,而且不支持yum install安装旧版,但是libncurses6是兼容5的。所以尝试了建立软链接,让mysql把libncurses.so.6当libncurses.so.5

代码语言:bash
复制
sudo find / -name libcnurses.* 

返回结果

代码语言:txt
复制
/usr/lib64/libncurses.so.6

根据返回结果所在路径建立所需文件软链接

代码语言:bash
复制
sudo ln -s /usr/lib64/libncurses.so.6 /usr/lib64/libncurses.so.5

提示缺少libtinfo.so.5同样的方法查找并建立软链接

代码语言:bash
复制
sudo ln -s /usr/lib64/libtinfo.so.6 /usr/lib64/libtinfo.so.5

运行MySQL

代码语言:bash
复制
mysql5.7 -u root

成功启动

代码语言:javascript
复制
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.44 MySQL Community Server (GPL)

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> 

自此建立MySQL5.7数据库完毕,但是每次都要用sudo /usr/local/mysql/mysql5.7/support-files/mysql.server start来启动数据库服务器才行。

Ⅲ.通过systemd开机自动启动服务

1.建立mysql57.service服务

代码语言:bash
复制
sudo vim /usr/lib/systemd/system/mysql57.service
代码语言:txt
复制
[Unit]
Description=MySQL Server 5.7 Service
Documentation=mysql.server
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Service]
Type=forking
User=mysql
Group=mysql
#PIDFile=/usr/local/mysql/mysql5.7/data/mysqld5.7.pid
TimeoutStartSec=60
ExecStart=/usr/local/mysql/mysql5.7/support-files/mysql.server start
ExecStop=/usr/local/mysql/mysql5.7/support-files/mysql.server stop
ExecReload=/usr/local/mysql/mysql5.7/support-files/mysql.server reload
[Install]
WantedBy=multi-user.target

# Type=forking #感觉好像应该用simple,但是对systemd不懂,本着能用就行不深究了#

# PIDFile可以注释掉没什么影响

2.开启加载MySQL.service服务

重新加载配置文件

代码语言:bash
复制
systemctl daemon-reload

启动mysql57.service服务

代码语言:bash
复制
sudo systemctl start mysql57.service

允许mysql57.service服务开机运行

代码语言:bash
复制
sudo systemctl start mysql57.service

查看mysql57.service服务进程

代码语言:bash
复制
systemctl status mysql57.service

返回结果,错误

代码语言:txt
复制
× mysql57.service - MySQL Server 5.7 Service
     Loaded: loaded (/usr/lib/systemd/system/mysql57.service; disabled; preset: disabled)
     Active: failed (Result: exit-code) since Tue 2024-10-22 15:12:53 CST; 14min ago
     Docs: http://dev.mysql.com/doc/refman/en/using-systemd.html
     Process: 4139 ExecStart=/usr/local/mysql/mysql5.7/support-files/mysql.server start (code=exited, status=203/EXEC)
     CPU: 1ms
Oct 22 15:12:53 localhost systemd[1]: Starting MySQL Server 5.7 Service...
Oct 22 15:12:53 localhost systemd[4139]: mysql57.service: Failed to locate executable /usr/local/mysql/mysql5.7/support-files/mysql.server: Permission denied
Oct 22 15:12:53 localhost systemd[4139]: mysql57.service: Failed at step EXEC spawning /usr/local/mysql/mysql5.7/support-files/mysql.server: Permission denied
Oct 22 15:12:53 localhost systemd[1]: mysql57.service: Control process exited, code=exited, status=203/EXEC
Oct 22 15:12:53 localhost systemd[1]: mysql57.service: Failed with result 'exit-code'.
Oct 22 15:12:53 localhost systemd[1]: Failed to start MySQL Server 5.7 Service.

以下是分析过程和尝试方法

# "mysql.server: Permission denied".

# systemd提示mysql.server没有权限,直接命令行mysql.server start可以启动

# sudo chown -R mysql:mysql /usr/local/mysql/*.* # 重新授权MySQL文件夹用户权限还是不行

可能是selinux安全上下文的政策不允许mysql越权使用root权限,有安全隐患,尝试关闭selinux

代码语言:bash
复制
sudo vim /etc/selinux/config

SELINUX=disable # 关闭selinux

#SELINUXTYPE=targeted # 注释掉

关闭mysql57.service服务

代码语言:bash
复制
sudo systemctl stop mysql57.service

开启mysql57.service服务

代码语言:bash
复制
sudo systemctl start mysql57.service

查看mysql57服务运行状态

代码语言:bash
复制
systemctl status mysql57

返回结果,成功

代码语言:txt
复制
● mysql57.service - MySQL Server 5.7 Service
     Loaded: loaded (/usr/lib/systemd/system/mysql57.service; enabled; preset: disabled)
     Active: active (running) since Wed 2024-10-23 13:49:22 CST; 4min 33s ago
     Docs: http://dev.mysql.com/doc/refman/en/using-systemd.html
     Process: 931 ExecStart=/usr/local/mysql/mysql5.7/support-files/mysql.server start (code=exited, status=0/SUCCESS)
     Main PID: 1166 (mysqld)
     Tasks: 28 (limit: 48561)
     Memory: 211.6M
     CPU: 606ms
     CGroup: /system.slice/mysql57.service
             ├─ 956 /bin/sh /usr/local/mysql/mysql5.7/bin/mysqld_safe --datadir=/usr/local/mysql/mysql5.7/data --pid-file=/usr/local/mysql/mysql5.7/data/mysqld5.7.pid
             └─1166 /usr/local/mysql/mysql5.7/bin/mysqld --basedir=/usr/local/mysql/mysql5.7 --datadir=/usr/local/mysql/mysql5.7/data --plugin-dir=/usr/local/mysql/mysql5.7/lib/plugin --log-error=/usr/local/mysql/mysql5.7/data/error.log --pid-file=/usr/local/mysql/mysql5.7/data/mysqld5.7.pid --port=3306
Oct 23 13:49:21 localhost.localdomain systemd[1]: Starting MySQL Server 5.7 Service...
Oct 23 13:49:22 localhost.localdomain mysql.server[931]: Starting MySQL. SUCCESS!
Oct 23 13:49:22 localhost.localdomain systemd[1]: mysql57.service: Supervising process 1166 which is not our child. We'll most likely not notice when it exits.
Oct 23 13:49:22 localhost.localdomain systemd[1]: Started MySQL Server 5.7 Service.

运行MySQL

代码语言:bash
复制
mysql5.7 -u root

成功启动

代码语言:txt
复制
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.44 MySQL Community Server (GPL)

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> 

####至此,完全偶机霸剋了,同理再搞mysql8.4,原理和方法都一样。

注意,5.7和8.4不能同时运行,可以用systemctl enalbe(disable)) mysql57(mysql84)来选择启用的MySQL版本。mysld_multi.server是运行同版本的多个数据库。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Ⅰ.前期准备工作
    • 1.下载MySQL Community Server Arichive
    • 2.建立mysql文件夹
    • 3.解压文件到mysql文件夹
    • 4.建立数据库文件夹
    • 5.建立mysql5.7数据库配置文件
    • 6.修改MySQL5.7数据库启动文件内容
  • Ⅱ. 配置MySQL
    • 1.建立软链接
    • 2.添加mysql用户组和用户
    • 3.对文件和文件夹授权
    • 4.初始化MySQL5.7
    • 5.启动MySQL服务器
    • 6.执行mysql打开连接数据库
  • Ⅲ.通过systemd开机自动启动服务
    • 1.建立mysql57.service服务
    • 2.开启加载MySQL.service服务
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档