Appearance
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 mariadb或postgresql) 或防火墙(firewall-cmd --list-services)。 - 备份失败:确认
/backup权限(chmod 755 /backup)或密码(mysqldump -p)。 - 性能优化无效:验证配置文件(
my.cnf,postgresql.conf)或重启服务。
- 数据库无法连接:检查服务状态(
21.5 实践任务
- 使用 SecureCRT 登录
ZSLinux,安装 MariaDB 并创建用户appuser和数据库mydb. - 配置 PostgreSQL,创建数据库
mydb和用户appuser. - 创建自动备份脚本,备份 MariaDB 和 PostgreSQL 数据库。
- 恢复 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.
- 答案:编辑
