
好多人都因为“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
在oracle.com官网下载MySQL Community Server 5.7和L8.4两个LTS版本
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.xzsudo mkdir /usr/local/mysql解压缩MySQL5.7到mysql文件夹
sudo tar -xvf ArchiveFile_Path/mysql-5.7.44-linux-glibc2.12-x86_64.tar.gz -C /usr/local/mysql/解压缩MySQL8.4到mysql文件夹
sudo tar -xvf ArchiveFile_Path/mysql-8.4.2-linux-glibc2.28-x86_64.tar.xz -C /usr/local/mysql/修改mysql5.7文件夹名称
sudo mv /usr/local/mysql/mysql-5.7.44-linux-glibc2.12-x86_64 /usr/local/mysql/mysql5.7修改mysql8.4文件夹名称
sudo mv /usr/local/mysql/mysql-8.4.2-linux-glibc2.28-x86_64 /usr/local/mysql/mysql8.4sudo mkdir /usr/local/mysql/mysql5.7/data \
sudo mkdir /usr/local/mysql/mysql8.4/datasudo vim /usr/local/mysql/mysql5.7/my.cnf# 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数据库配置文件
sudo vim /usr/local/mysql/mysql8.4/my.cnf# 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.dsudo 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文件夹后无任何残留。
建立mysql5.7的软链接
sudo ln -s /usr/local/mysql/mysql5.7/bin/mysql /usr/bin/mysql5.7建立mysqld5.7的软链接,没有也无所谓
sudo ln -s /usr/local/mysql/mysql5.7/bin/mysqld /usr/bin/mysqld5.7建立mysql8.4的软链接
sudo ln -s /usr/local/mysql/mysql8.4/bin/mysql /usr/bin/mysql8.4建立mysqld8.4的软链接,没有也无所谓
sudo ln -s /usr/local/mysql/mysql8.4/bin/mysqld /usr/bin/mysqld8.4建立mysql用户组
sudo groupadd mysql 增加用户mysql到mysql用户组
sudo useradd -aG mysql mysql对mysql用户授予MySQL所在文件夹拥有权
sudo chown -R mysql:mysql /usr/local/mysql/*.*将mysql服务器启动文件授予可执行
sudo chmod 755 /usr/local/mysql/mysql5.7/support-files/mysql.server#可以直接授予权限级别777,可能会遇到selinux安全限制。具体没研究明白但是后续遇到了安全级别的问题,不知是否与这一步有关。
sudo /usr/local/mysql//mysql5.7/bin/mysqld --defaults-file=/usr/local/mysql/mysql5.7/my.cnf --user=mysql --initialize-insecuresudo -u mysql /usr/local/mysql/mysql5.7/support-files/mysql.server start提示错误
Starting MySQL.. ERROR! The server quit without updating PID file (/usr/local/mysql/mysql5.7/data/mysqld5.7.pid).如果没执行4.初始化MySQL,会提示错误,需要删除data文件内所有文件,执行初始化后在启动MySQL服务器
提示启动成功
Starting MySQL. SUCCESS!#关闭MySQL服务器可以使用 sudo /usr/local/mysql/mysql5.7/support-files/mysql.server stop
查看MySQL服务器状态
/usr/local/mysql/mysql5.7/support-files/mysql.server status返回结果
SUCCESS! MySQL running (5104) mysql5.7 -u root*如果提示缺少libcnurses运行文件,就找到对应最新版本建立提示缺少同名的软链接
因为CentOS Stream 9使用libncurses6,而且不支持yum install安装旧版,但是libncurses6是兼容5的。所以尝试了建立软链接,让mysql把libncurses.so.6当libncurses.so.5
sudo find / -name libcnurses.* 返回结果
/usr/lib64/libncurses.so.6根据返回结果所在路径建立所需文件软链接
sudo ln -s /usr/lib64/libncurses.so.6 /usr/lib64/libncurses.so.5提示缺少libtinfo.so.5同样的方法查找并建立软链接
sudo ln -s /usr/lib64/libtinfo.so.6 /usr/lib64/libtinfo.so.5运行MySQL
mysql5.7 -u root成功启动
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来启动数据库服务器才行。
sudo vim /usr/lib/systemd/system/mysql57.service[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可以注释掉没什么影响
重新加载配置文件
systemctl daemon-reload启动mysql57.service服务
sudo systemctl start mysql57.service允许mysql57.service服务开机运行
sudo systemctl start mysql57.service查看mysql57.service服务进程
systemctl status mysql57.service返回结果,错误
× 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
sudo vim /etc/selinux/configSELINUX=disable # 关闭selinux
#SELINUXTYPE=targeted # 注释掉
关闭mysql57.service服务
sudo systemctl stop mysql57.service开启mysql57.service服务
sudo systemctl start mysql57.service查看mysql57服务运行状态
systemctl status mysql57返回结果,成功
● 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
mysql5.7 -u root成功启动
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 删除。