关系型数据库目前有很多产品共同特点是分为商业版本和社区开源免费版本,目前社区开源版本的关系型数据库用的最多的数据库是 MySQL Community Server Edition ,最大特点为免费商业使用也不用顾虑任何法律相关的问题,MySQL 被 Oracle 公司收购之后也推出了商业服务,原有的 MySQL 开发人员为了能摆脱 Oracle 相关的控制也在 MySQL 原有代码的分支上开发出来了 MariaDB 开源社区驱动开发的版本。

对于一个想要学习数据库技术的新手来说要解决的问题当然是如何拥有数据库服务器端,数据库也是一种 C/S 架构的程序,对于多数开发者来说用的最多的是客户端,服务器管理大部分由 dba 操作,这篇博客将介绍如何通过 tar 包的方式在 RHEL9 上安装 MySQL 服务端程序。


准备工作

首先需要一台已经安装 RHEL9 的操作系统,目前 rhel 官方的仓库已经支持直接使用 dnf 命令安装 MySQL 服务器,这种针对是完全没有经验用户傻瓜安装方式。如果需要自定义安装路径和用户组还是推荐使用 tar 包的方式安装,首先安装一些依赖包和工具包:

yum -y groupinstall "Development Tools"
yum -y intsall vim wget libaio

最后去 MySQL 官方网站找对应的 Linux Generic Archive 安装包下载到本地:

wget https://cdn.mysql.com//Downloads/MySQL-8.0/mysql-8.0.32-linux-glibc2.12-x86_64.tar.xz

创建一个用于存储 MySQL 服务器程序的目录,通过命令 mkdir -p /usr/local/mysql ,将其解压到这个目录中:

# 解压到指定目录中
tar -xvf mysql-8.0.32-linux-glibc2.12-x86_64.tar.xz -C  /usr/local
# 重新命名目录
mv mysql-8.0.32-linux-glibc2.12-x86_64 mysql

解压完成之后接下来需要创建两个目录,一个用来存放 mysql 运行时产生的日志文件,另外一个为存放 mysql 生成的数据文件目录,需要创建两个目录命令如下:

# 创建 log 目录 和 创建数据目录
sudo mkdir -p /usr/local/mysql/data /usr/local/mysql/logs

将 mysql 的支持文件拷贝到 /etc/systemd/system/ 目录中,该目录存放都是一些开机自动化启动程序,能够使用 systemctl 程序的子命令 start 、 stop 、restart 、reload 来管理某个具体的应用,例如这里的 mysql 程序。

# 复制支持文件,并且重新命名为 mysqld
sudo cp /usr/local/mysql/support-files/mysql.server /etc/systemd/system/
# 所有者应有执行权限
sudo chmod +x /etc/systemd/system/mysql.server

接下来要创建用来运行 mysqld 的用户,和将上面的文件夹所有者和所属组全部设置为新创建的 mysql 用户和组:

# 创建用户
useradd -M -s /sbin/nologin mysql
# 更改文件所属组和所有者
chown -R mysql:mysql /usr/local/mysql

最后将 mysql 的二进制命令工具目录加到环境变量中,以方便在任何地方都能使用 mysql 提供的命令工具:

# 在 /etc/profile 最后一行添加
echo "PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile
# 刷新环境变量
source /etc/profile

到此整个安装前置条件已经满足,剩下就是对数据库进行安装和初始化了。


初始化安装

当准备工作完成之后就需要对数据库进行初始化,这里初始化使用 mysqld 命令,要提供 --initialize 参数,--user 指定运行程序用户,--basedir 指定数据库生成的数据文件存放的目录,--defaults-file 指定配置文件路径,执行命令会自动初始化数据库并且设置默认的 root 登录密码:

[root@rhel9 ~]# sudo mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
2023-03-22T12:08:36.476715Z 0 [System] [MY-013169] [Server] /usr/local/mysql/bin/mysqld (mysqld 8.0.32) initializing of server in progress as process 23676
2023-03-22T12:08:36.486664Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2023-03-22T12:08:36.983513Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
2023-03-22T12:08:38.468726Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: %ajsN=2G_)nf

如果是比较新的系统可能会出现 libtinfo.so.6.1 文件版本过高,导致 mysql 客户端链接的 libtinfo.so.5 ,所以创建一个软链接:

ln -s /usr/lib64/libtinfo.so.6 /usr/lib64/libtinfo.so.5

最后使用 mysql 客户端登录连接到服务器,第一步为重置 mysql 到密码,一定要重新设置 root 的密码,否则不允许任何操作:

# 重置密码
alter user 'root'@'localhost' identified by 'xxxxx';
# 开启远程登录
RENAME USER 'root'@'localhost' TO 'root'@'%';

# 或者直接创建一个新的用户
CREATE USER 'root'@'%' IDENTIFIED BY '12345678';
# 再给予权限操作
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;

最后如果要自定义配置 mysqld 话,需要在 /etc 目录中创建一个 my.conf 文件,这个文件就为 mysqld 启动时所需要的配置文件:

[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8mb4
[mysqld]
skip-name-resolve
#设置3306端口
port = 3306
# 设置mysql的安装目录
basedir=/usr/local/mysql
# 设置mysql数据库的数据的存放目录
datadir=/usr/local/mysql/data
# 允许最大连接数
max_connections=200
# 服务端使用的字符集默认为8比特编码的latin1字符集
character_set_server=utf8mb4
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
lower_case_table_names=1
max_allowed_packet=16M
#配置免密登录
skip-grant-tables

[mysqld_safe]
# 配置日志文件和进程文件
error-log=/usr/local/mysql/logs/error.log
pid-file=/usr/local/mysql/logs/mysql.pid

最后如果想方便管理,使用系统 systmctl 命令管理 mysqld 程序,此时就的使用 chkconfig 命令添加一个服务管理项目:

# 添加 mysqld
chkconfig --add /etc/systemd/system/mysql.server
# 这样就可以启动一个 mysql 服务
systemctl start mysql.server

配置成功之后管理 mysql 就可以使用 systemctl 命令进行管理了。


其他资料

便宜 VPS vultr
最后修改:2023 年 08 月 31 日
如果觉得我的文章对你有用,请随意赞赏 🌹 谢谢 !