关系型数据库目前有很多产品共同特点是分为商业版本和社区开源免费版本,目前社区开源版本的关系型数据库用的最多的数据库是 MySQL Community Server Edition ,最大特点为免费商业使用也不用顾虑任何法律相关的问题,MySQL 被 Oracle 公司收购之后也推出了商业服务,原有的 MySQL 开发人员为了能摆脱 Oracle 相关的控制也在 MySQL 原有代码的分支上开发出来了 MariaDB 开源社区驱动开发的版本。
准备工作
首先需要一台已经安装 RHEL9 的操作系统,目前 rhel 官方的仓库已经支持直接使用 dnf 命令安装 MySQL 服务器,这种针对是完全没有经验用户傻瓜安装方式。如果需要自定义安装路径和用户组还是推荐使用 tar 包的方式安装,首先安装一些依赖包和工具包:
yum -y groupinstall "Development Tools"
yum -y intsall vim wget libaio
wget https://cdn.mysql.com//Downloads/MySQL-8.0/mysql-8.0.32-linux-glibc2.12-x86_64.tar.xz
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
# 创建用户
useradd -M -s /sbin/nologin mysql
# 更改文件所属组和所有者
chown -R mysql:mysql /usr/local/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
ln -s /usr/lib64/libtinfo.so.6 /usr/lib64/libtinfo.so.5
# 重置密码
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
命令进行管理了。