在 CentOS Stream 8 上安装数据库软件
一、准备与通用步骤
- 更新系统并安装常用工具:sudo dnf update -y && sudo dnf install -y wget vim
- 建议为数据库创建专用系统用户(以 mysql 为例):sudo useradd -r -s /sbin/nologin -m -d /var/lib/mysql mysql
- 规划数据与日志目录并授权:sudo mkdir -p /data/mysql /var/log/mysql && sudo chown -R mysql:mysql /data/mysql /var/log/mysql
- 防火墙放行数据库端口(示例:MySQL 3306、PostgreSQL 5432):sudo firewall-cmd --permanent --add-port=3306/tcp && sudo firewall-cmd --permanent --add-port=5432/tcp && sudo firewall-cmd --reload
- SELinux 如开启,按需设置(示例:允许 mysqld 网络访问)或使用 sudo setenforce 0 临时宽松用于排障(生产环境不建议长期关闭)
二、安装 MySQL 8.0(YUM 官方仓库,推荐)
- 添加 MySQL YUM 仓库(EL8):sudo dnf install -y https://repo.mysql.com/mysql80-community-release-el8-5.noarch.rpm
- 禁用系统自带的 MySQL 模块以避免冲突:sudo dnf module disable -y mysql
- 安装服务器与客户端:sudo dnf install -y mysql-community-server mysql-community-client
- 启动与开机自启:sudo systemctl enable --now mysqld
- 获取初始 root 密码:grep ‘temporary password’ /var/log/mysqld.log
- 安全初始化(设置 root 密码、移除匿名用户、禁止远程 root 等):sudo mysql_secure_installation
- 登录验证:mysql -u root -p
- 常见问题处理:
- 若出现“All matches were filtered out by modular filtering”,说明模块未禁用,执行:sudo dnf module disable -y mysql 再安装
- 若遇到仓库元数据或签名问题,可临时使用:sudo dnf install -y mysql-community-server --nogpgcheck(仅用于排障,生产请修复 GPG 与仓库)
三、安装 MariaDB(替代方案)
- 安装 MariaDB 服务器与客户端:sudo dnf install -y mariadb-server mariadb
- 启动与开机自启:sudo systemctl enable --now mariadb
- 安全初始化:sudo mysql_secure_installation
- 登录验证:mysql -u root -p
- 说明:MariaDB 与 MySQL 命令与协议高度兼容,适合希望保持与 MySQL 5.7/8.0 生态接近的场景
四、安装 PostgreSQL 14(官方仓库)
- 安装 PostgreSQL 官方仓库并禁用内置模块:sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rpm && sudo dnf -qy module disable postgresql
- 安装服务器包:sudo dnf install -y postgresql14-server
- 初始化数据库并启用开机启动:sudo /usr/pgsql-14/bin/postgresql-14-setup initdb && sudo systemctl enable --now postgresql-14
- 切换到 postgres 用户并设置密码:sudo -u postgres psql -c “ALTER USER postgres WITH PASSWORD ‘YourStrongP@ssw0rd’;”
- 远程访问(按需开启):
- 编辑 /var/lib/pgsql/14/data/postgresql.conf:listen_addresses=‘*’
- 编辑 /var/lib/pgsql/14/data/pg_hba.conf:在末尾添加 host all all 0.0.0.0/0 md5
- 重启生效:sudo systemctl restart postgresql-14
- 防火墙放行:sudo firewall-cmd --permanent --add-port=5432/tcp && sudo firewall-cmd --reload
五、其他安装方式与后续建议
- RPM 离线安装 MySQL 8.0(适用于无外网环境)
- 从 MySQL 官网下载对应版本的 RPM Bundle(如:mysql-8.0.31-1.el8.x86_64.rpm-bundle.tar),上传至服务器
- 解压:tar xf mysql-8.0.31-1.el8.x86_64.rpm-bundle.tar
- 按依赖顺序安装(示例):sudo dnf install -y mysql-community-common-.rpm mysql-community-libs-.rpm mysql-community-client-plugins-.rpm mysql-community-client-.rpm mysql-community-icu-data-files-.rpm mysql-community-server-.rpm
- 若遇到冲突(如 mariadb-connector-c-config 被取代),先卸载冲突包:sudo dnf remove -y mariadb-connector-c-config
- 启动与开机自启:sudo systemctl enable --now mysqld
- 获取初始密码:grep ‘temporary password’ /var/log/mysqld.log
- 安全与运维要点
- 为数据库服务使用最小权限的系统账户,目录与文件权限最小化
- 仅开放必要端口,强制使用强密码策略与 TLS 连接(如启用 SSL/TLS)
- 定期备份(如 mysqldump、pg_dump),并验证可恢复性
- 生产环境建议开启审计日志与慢查询日志,按需进行性能调优(缓冲池、连接数、I/O 调度等)