Skip to content

21. 数据库服务基础

本章节指导在 RHEL 8.10(主机名 ZSLinux)上使用 SecureCRT 配置数据库服务,配合 SecureFX 传输备份文件。内容涵盖 MariaDB/MySQL 和 PostgreSQL 的安装、配置、用户管理、性能优化及备份恢复,全面实用,适合初学者快速掌握和运维人员日常维护。所有操作在 ZSLinux 环境中测试,确保实验一致性。

21.1 前提条件

  • RHEL 8.10 已安装(参考第 1 章),主机名设置为 ZSLinux.
  • 使用 SecureCRT 登录(SSH2 协议,端口 2222,参考第 6 章).
  • 使用 SecureFX 传输文件(SFTP 协议).
  • 具有 root 或 sudo 权限.
  • 系统已订阅并启用 RHEL 和 EPEL 仓库(参考第 4 和 7 章).
  • 防火墙和 SELinux 启用(参考第 13 章).
  • 网络连接正常,时间同步配置完成(参考第 3 章).

21.2 数据库配置

21.2.1 配置 MariaDB

  • 安装 MariaDB:
    bash
    dnf install -y mariadb-server  # 安装 MariaDB 数据库服务器
    systemctl enable --now mariadb  # 启用并启动 MariaDB 服务
  • 初始化安全设置:
    bash
    mysql_secure_installation  # 设置 root 密码,移除匿名用户和测试数据库
  • 配置防火墙和 SELinux:
    bash
    firewall-cmd --permanent --add-service=mysql  # 允许 MySQL 端口(3306)
    firewall-cmd --reload  # 应用防火墙规则
    setsebool -P httpd_can_connect_db 1  # 允许 Apache 连接数据库
  • 创建数据库和用户:
    bash
    mysql -u root -p -e "CREATE DATABASE mydb;"  # 创建数据库 mydb
    mysql -u root -p -e "CREATE USER 'appuser'@'localhost' IDENTIFIED BY 'securepass';"  # 创建用户
    mysql -u root -p -e "GRANT ALL ON mydb.* TO 'appuser'@'localhost';"  # 授予权限

21.2.2 配置 PostgreSQL

  • 安装 PostgreSQL:
    bash
    dnf install -y postgresql-server  # 安装 PostgreSQL 数据库服务器
    postgresql-setup --initdb  # 初始化数据库
    systemctl enable --now postgresql  # 启用并启动 PostgreSQL 服务
  • 配置防火墙:
    bash
    firewall-cmd --permanent --add-service=postgresql  # 允许 PostgreSQL 端口(5432)
    firewall-cmd --reload  # 应用防火墙规则
  • 创建数据库和用户:
    bash
    su - postgres -c "createdb mydb"  # 创建数据库 mydb
    su - postgres -c "psql -c \"CREATE USER appuser WITH PASSWORD 'securepass';\""  # 创建用户
    su - postgres -c "psql -c \"GRANT ALL PRIVILEGES ON DATABASE mydb TO appuser;\""  # 授予权限

21.2.3 优化数据库性能

  • Optimize MariaDB:
    bash
    vim /etc/my.cnf.d/mariadb-server.cnf  # 编辑 MariaDB 配置文件
    # 在 [mysqld] 下添加:
    innodb_buffer_pool_size=512M
    query_cache_size=32M
    systemctl restart mariadb  # 重启 MariaDB 服务
  • Optimize PostgreSQL:
    bash
    vim /var/lib/pgsql/data/postgresql.conf  # 编辑 PostgreSQL 配置文件
    # 修改:
    shared_buffers = 256MB
    work_mem = 8MB
    systemctl restart postgresql  # 重启 PostgreSQL 服务

21.3 备份与恢复

21.3.1 MariaDB 备份与恢复

  • 备份数据库:
    bash
    mysqldump -u root -p mydb > /backup/mydb-$(date +%F).sql  # 备份 mydb 数据库
  • 恢复数据库:
    bash
    mysql -u root -p -e "CREATE DATABASE mydb_restore;"  # 创建新数据库
    mysql -u root -p mydb_restore < /backup/mydb-$(date +%F).sql  # 恢复备份

21.3.2 PostgreSQL 备份与恢复

  • 备份数据库:
    bash
    su - postgres -c "pg_dump mydb > /backup/mydb-$(date +%F).sql"  # 备份 mydb 数据库
  • 恢复数据库:
    bash
    su - postgres -c "createdb mydb_restore"  # 创建新数据库
    su - postgres -c "psql mydb_restore < /backup/mydb-$(date +%F).sql"  # 恢复备份

21.3.3 配置自动备份

  • 创建备份脚本:
    bash
    vim /usr/local/bin/db_backup.sh  # 创建数据库备份脚本
    # 添加:
    #!/bin/bash
    BACKUP_DIR="/backup"
    DATE=$(date +%F)
    mysqldump -u root -psecurepass mydb > $BACKUP_DIR/mydb-$DATE.sql  # MariaDB 备份
    su - postgres -c "pg_dump mydb > $BACKUP_DIR/pg_mydb-$DATE.sql"  # PostgreSQL 备份
    chmod +x /usr/local/bin/db_backup.sh  # 添加执行权限
  • 配置定时任务(参考第 14 章):
    bash
    crontab -e  # 编辑 crontab
    # 添加:
    0 2 * * * /usr/local/bin/db_backup.sh  # 每天 02:00 执行备份

21.4 验证

  • 验证 MariaDB:
    bash
    mysql -u appuser -psecurepass -e "SELECT 1;"  # 测试用户登录
    mysql -u root -p -e "SHOW DATABASES;"  # 检查数据库列表
  • 验证 PostgreSQL:
    bash
    su - postgres -c "psql -U appuser -d mydb -c 'SELECT 1;'"  # 测试用户登录
    su - postgres -c "psql -l"  # 检查数据库列表
  • 验证备份:
    bash
    ls -l /backup/mydb-$(date +%F).sql  # 检查 MariaDB 备份文件
    ls -l /backup/pg_mydb-$(date +%F).sql  # 检查 PostgreSQL 备份文件
  • 验证恢复:
    bash
    mysql -u root -p -e "SELECT COUNT(*) FROM mydb_restore.some_table;"  # 检查恢复的 MariaDB 数据
    su - postgres -c "psql -d mydb_restore -c 'SELECT COUNT(*) FROM some_table;'"  # 检查恢复的 PostgreSQL 数据
  • 测试 SSH 连接:
    bash
    ssh -p 2222 testuser@ZSLinux  # 测试 SSH 连接(参考第 6 章)
  • 常见问题:
    • 数据库无法连接:检查服务状态(systemctl status mariadbpostgresql) 或防火墙(firewall-cmd --list-services)。
    • 备份失败:确认 /backup 权限(chmod 755 /backup)或密码(mysqldump -p)。
    • 性能优化无效:验证配置文件(my.cnf, postgresql.conf)或重启服务。

21.5 实践任务

  1. 使用 SecureCRT 登录 ZSLinux,安装 MariaDB 并创建用户 appuser 和数据库 mydb.
  2. 配置 PostgreSQL,创建数据库 mydb 和用户 appuser.
  3. 创建自动备份脚本,备份 MariaDB 和 PostgreSQL 数据库。
  4. 恢复 MariaDB 数据库到 mydb_restore 并验证数据。

21.6 自测问题

  • 问题:如何创建 MariaDB 用户并授予权限?
    • 答案CREATE USER 'appuser'@'localhost' IDENTIFIED BY 'securepass'; GRANT ALL ON mydb.* TO 'appuser'@'localhost';
  • 问题:如何备份 PostgreSQL 数据库?
    • 答案su - postgres -c "pg_dump mydb > /backup/mydb-$(date +%F).sql"
  • 问题:如何优化 MariaDB 性能?
    • 答案:编辑 /etc/my.cnf.d/mariadb-server.cnf,设置 innodb_buffer_pool_size=512M, 然后 systemctl restart mariadb.

Released under the MIT License.