# 数据库服务（MySQL / PostgreSQL）

URL: https://caijiao.org/rockylinux/database-server
Source: docs/rockylinux/database-server.md
Description: 在 Rocky Linux 中安装和配置 MySQL 与 PostgreSQL 数据库服务，涵盖安装命令、防火墙配置、开机自启和基础安全设置。

数据库是企业与开发环境中最常见的服务之一。Rocky Linux 作为 RHEL 兼容的企业级系统，提供了稳定的 MySQL 与 PostgreSQL 数据库支持。本文介绍如何在 Rocky Linux 上安装、配置和管理这两种常用数据库。

## 一、安装 MySQL（MariaDB）

Rocky Linux 默认仓库中提供 **MariaDB**，兼容 MySQL 命令和客户端。

### 1. 安装

```bash
sudo dnf install -y mariadb-server
```

### 2. 启动与开机自启

```bash
sudo systemctl enable --now mariadb
```

### 3. 初始化安全设置

运行安全脚本，设置 root 密码、删除测试数据库等：

```bash
sudo mysql_secure_installation
```

推荐设置选项：

- 设置 root 密码
- 删除匿名用户
- 禁止远程 root 登录
- 删除测试数据库
- 重新加载权限表

### 4. 测试登录

```bash
mysql -u root -p
```

## 二、安装 PostgreSQL

Rocky Linux 默认提供 **PostgreSQL 版本 13** 或更高版本。你可以使用默认版本或通过官方仓库安装特定版本。

### 1. 安装 PostgreSQL

```bash
sudo dnf install -y postgresql-server postgresql-contrib
```

### 2. 初始化数据库

```bash
sudo postgresql-setup --initdb
```

### 3. 启动与开机自启

```bash
sudo systemctl enable --now postgresql
```

### 4. 创建用户与数据库

切换至 postgres 系统用户：

```bash
sudo -i -u postgres
psql
```

创建数据库和用户：

```sql
CREATE DATABASE mydb;
CREATE USER myuser WITH ENCRYPTED PASSWORD 'mypassword';
GRANT ALL PRIVILEGES ON DATABASE mydb TO myuser;
\q
exit
```

## 三、防火墙与远程访问

如果需要外部连接数据库，开放相应端口：

```bash
# MySQL (MariaDB)
sudo firewall-cmd --permanent --add-service=mysql

# PostgreSQL
sudo firewall-cmd --permanent --add-service=postgresql

sudo firewall-cmd --reload
```

启用远程访问：

- **MySQL:** 编辑 `/etc/my.cnf.d/mariadb-server.cnf`，注释或修改 `bind-address=0.0.0.0`
- **PostgreSQL:** 编辑 `/var/lib/pgsql/data/postgresql.conf` 与 `pg_hba.conf`

## 四、常用管理命令

| 操作       | MySQL                           | PostgreSQL                    |
| ---------- | ------------------------------- | ----------------------------- |
| 启动服务   | `systemctl start mariadb`       | `systemctl start postgresql`  |
| 停止服务   | `systemctl stop mariadb`        | `systemctl stop postgresql`   |
| 查看状态   | `systemctl status mariadb`      | `systemctl status postgresql` |
| 登录数据库 | `mysql -u root -p`              | `psql -U postgres`            |
| 备份数据库 | `mysqldump dbname > backup.sql` | `pg_dump dbname > backup.sql` |
| 恢复数据库 | `mysql dbname < backup.sql`     | `psql dbname < backup.sql`    |

## 五、总结

- **MariaDB** 是 MySQL 的社区分支，命令和配置高度兼容。
- **PostgreSQL** 功能强大，支持事务、触发器和复杂查询。
- 建议在生产环境中启用 **防火墙与安全认证**，并定期执行数据备份。

> 推荐：在测试环境中熟悉两者的操作差异，根据项目需求选择合适的数据库系统。
