活动公告

系统通知
05-18 21:22
系统通知
通知:本站资源由网友上传分享,如有违规等问题请到版务模块进行投诉,资源失效请在帖子内回复要求补档,会尽快处理!
10-23 09:31

全面解析Fedora系统数据库配置流程与管理最佳实践

SunJu_FaceMall

3万

主题

2860

科技点

3万

积分

白金月票

碾压王

积分
32872

塔罗立华奏

<font color=白金月票" /> 发表于 2025-9-3 16:20:00 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
1. Fedora系统与数据库概述

Fedora是一个强大的Linux发行版,以其前沿技术和稳定性著称。作为Red Hat Enterprise Linux(RHEL)的社区版,Fedora为数据库服务器提供了优秀的运行环境。在Fedora系统上配置和管理数据库需要系统性的知识和实践经验。

1.1 Fedora系统特点

Fedora系统具有以下特点,使其成为数据库服务器的理想选择:

• 先进的技术栈:Fedora总是采用最新的Linux内核和软件包
• 强大的包管理系统:DNF包管理器提供了高效的软件安装和更新机制
• SELinux支持:提供了强大的安全框架,保护数据库服务器免受未授权访问
• 活跃的社区支持:拥有庞大的开发者社区,提供及时的技术支持和更新

1.2 常见数据库类型

在Fedora系统上,可以部署多种类型的数据库系统:

• 关系型数据库:MySQL/MariaDB、PostgreSQL、SQLite
• NoSQL数据库:MongoDB、Redis、Cassandra
• 时序数据库:InfluxDB、TimescaleDB
• 图数据库:Neo4j

本文将重点介绍在Fedora系统上配置和管理最常用的关系型数据库:MySQL/MariaDB和PostgreSQL。

2. 数据库安装流程

2.1 系统准备

在安装数据库之前,需要确保Fedora系统已更新并配置了基本的安全设置:
  1. # 更新系统
  2. sudo dnf update -y
  3. # 安装必要的工具
  4. sudo dnf install -y wget vim curl
  5. # 配置防火墙
  6. sudo firewall-cmd --permanent --add-service=ssh
  7. sudo firewall-cmd --reload
复制代码

2.2 安装MySQL/MariaDB

MariaDB是MySQL的一个分支,完全兼容MySQL,并且在Fedora中是默认的MySQL替代品。
  1. # 安装MariaDB服务器
  2. sudo dnf install -y mariadb-server
  3. # 启动MariaDB服务
  4. sudo systemctl start mariadb
  5. # 设置开机自启
  6. sudo systemctl enable mariadb
  7. # 查看服务状态
  8. sudo systemctl status mariadb
复制代码

2.3 安装PostgreSQL

PostgreSQL是一个功能强大的开源对象关系型数据库系统。
  1. # 安装PostgreSQL服务器
  2. sudo dnf install -y postgresql-server postgresql-contrib
  3. # 初始化数据库
  4. sudo postgresql-setup --initdb
  5. # 启动PostgreSQL服务
  6. sudo systemctl start postgresql
  7. # 设置开机自启
  8. sudo systemctl enable postgresql
  9. # 查看服务状态
  10. sudo systemctl status postgresql
复制代码

3. 数据库基本配置

3.1 MySQL/MariaDB基本配置

安装完成后,运行安全初始化脚本:
  1. sudo mysql_secure_installation
复制代码

此脚本将引导您完成以下步骤:

• 设置root密码
• 移除匿名用户
• 禁止root远程登录
• 移除测试数据库
• 重新加载权限表

MariaDB的主配置文件位于/etc/my.cnf或/etc/my.cnf.d/目录下。创建自定义配置文件:
  1. sudo vim /etc/my.cnf.d/custom.cnf
复制代码

添加以下基本配置:
  1. [mysqld]
  2. # 设置默认字符集
  3. character-set-server = utf8mb4
  4. collation-server = utf8mb4_unicode_ci
  5. # 设置默认存储引擎
  6. default-storage-engine = InnoDB
  7. # 设置最大连接数
  8. max_connections = 200
  9. # 设置InnoDB缓冲池大小(通常为系统内存的50-70%)
  10. innodb_buffer_pool_size = 2G
  11. # 设置日志文件大小
  12. innodb_log_file_size = 256M
  13. # 设置查询缓存
  14. query_cache_type = 1
  15. query_cache_size = 128M
  16. # 设置超时时间
  17. wait_timeout = 300
  18. interactive_timeout = 300
复制代码

重启MariaDB服务以应用配置:
  1. sudo systemctl restart mariadb
复制代码

3.2 PostgreSQL基本配置

PostgreSQL安装后,会自动创建一个名为postgres的系统用户和数据库超级用户。首先,设置postgres用户的密码:
  1. sudo -u postgres psql -c "ALTER USER postgres PASSWORD 'your_password';"
复制代码

PostgreSQL的主要配置文件位于/var/lib/pgsql/data/postgresql.conf和/var/lib/pgsql/data/pg_hba.conf。

编辑postgresql.conf文件:
  1. sudo vim /var/lib/pgsql/data/postgresql.conf
复制代码

修改以下关键参数:
  1. # 连接设置
  2. listen_addresses = '*'          # 监听所有IP地址
  3. port = 5432                     # 默认端口
  4. max_connections = 100           # 最大连接数
  5. # 内存设置
  6. shared_buffers = 256MB          # 共享缓冲区,通常为系统内存的25%
  7. effective_cache_size = 1GB      # 有效缓存大小,通常为系统内存的50%
  8. work_mem = 4MB                  # 排序操作使用的内存
  9. maintenance_work_mem = 64MB     # 维护操作使用的内存
  10. # 日志设置
  11. logging_collector = on          # 启用日志收集
  12. log_directory = 'log'           # 日志目录
  13. log_filename = 'postgresql-%a.log'  # 日志文件名
  14. log_statement = 'mod'           # 记录修改数据的语句
  15. log_line_prefix = '%t [%p]: [%l-1] user=%u,db=%d '  # 日志行前缀
  16. # 检查点设置
  17. checkpoint_completion_target = 0.9  # 检查点完成目标
  18. wal_buffers = 16MB               # WAL缓冲区
复制代码

编辑pg_hba.conf文件以配置客户端认证:
  1. sudo vim /var/lib/pgsql/data/pg_hba.conf
复制代码

添加或修改以下行以允许密码认证:
  1. # TYPE  DATABASE        USER            ADDRESS                 METHOD
  2. host    all             all             0.0.0.0/0               md5
  3. local   all             all                                     md5
复制代码

重启PostgreSQL服务以应用配置:
  1. sudo systemctl restart postgresql
复制代码

4. 数据库安全配置

4.1 MySQL/MariaDB安全配置

创建具有特定权限的数据库用户:
  1. -- 登录到MariaDB
  2. mysql -u root -p
  3. -- 创建新用户
  4. CREATE USER 'db_user'@'localhost' IDENTIFIED BY 'secure_password';
  5. -- 授予用户特定数据库的所有权限
  6. GRANT ALL PRIVILEGES ON database_name.* TO 'db_user'@'localhost';
  7. -- 授予用户远程访问权限
  8. CREATE USER 'db_user'@'%' IDENTIFIED BY 'secure_password';
  9. GRANT ALL PRIVILEGES ON database_name.* TO 'db_user'@'%';
  10. -- 刷新权限
  11. FLUSH PRIVILEGES;
  12. -- 查看用户权限
  13. SHOW GRANTS FOR 'db_user'@'localhost';
复制代码

为MariaDB配置SSL/TLS加密连接:
  1. # 创建SSL证书目录
  2. sudo mkdir /etc/mysql/ssl
  3. cd /etc/mysql/ssl
  4. # 创建CA证书
  5. sudo openssl genrsa 2048 > ca-key.pem
  6. sudo openssl req -new -x509 -nodes -days 3650 -key ca-key.pem -out ca-cert.pem
  7. # 创建服务器证书
  8. sudo openssl req -newkey rsa:2048 -days 3650 -nodes -keyout server-key.pem -out server-req.pem
  9. sudo openssl rsa -in server-key.pem -out server-key.pem
  10. sudo openssl x509 -req -in server-req.pem -days 3650 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 -out server-cert.pem
  11. # 创建客户端证书
  12. sudo openssl req -newkey rsa:2048 -days 3650 -nodes -keyout client-key.pem -out client-req.pem
  13. sudo openssl rsa -in client-key.pem -out client-key.pem
  14. sudo openssl x509 -req -in client-req.pem -days 3650 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 -out client-cert.pem
  15. # 设置权限
  16. sudo chmod 600 *.pem
  17. sudo chown mysql:mysql *.pem
复制代码

编辑MariaDB配置文件以启用SSL:
  1. sudo vim /etc/my.cnf.d/custom.cnf
复制代码

添加以下配置:
  1. [mysqld]
  2. # SSL配置
  3. ssl-ca = /etc/mysql/ssl/ca-cert.pem
  4. ssl-cert = /etc/mysql/ssl/server-cert.pem
  5. ssl-key = /etc/mysql/ssl/server-key.pem
  6. # 要求所有连接使用SSL
  7. require_secure_transport = ON
复制代码

重启MariaDB服务:
  1. sudo systemctl restart mariadb
复制代码

验证SSL配置:
  1. SHOW VARIABLES LIKE '%ssl%';
复制代码

4.2 PostgreSQL安全配置

创建具有特定权限的数据库用户:
  1. # 切换到postgres用户
  2. sudo -u postgres psql
  3. -- 创建新用户
  4. CREATE USER db_user WITH PASSWORD 'secure_password';
  5. -- 创建数据库并设置所有者
  6. CREATE DATABASE database_name OWNER db_user;
  7. -- 授予用户数据库连接权限
  8. GRANT CONNECT ON DATABASE database_name TO db_user;
  9. -- 授予用户模式使用权限
  10. GRANT USAGE ON SCHEMA public TO db_user;
  11. -- 授予用户表的所有权限
  12. GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO db_user;
  13. -- 授予用户序列的所有权限
  14. GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO db_user;
  15. -- 设置默认权限
  16. ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON TABLES TO db_user;
  17. ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON SEQUENCES TO db_user;
  18. -- 查看用户权限
  19. \du db_user
复制代码

为PostgreSQL配置SSL/TLS加密连接:
  1. # 创建SSL证书目录
  2. sudo mkdir /var/lib/pgsql/data/ssl
  3. cd /var/lib/pgsql/data/ssl
  4. # 创建服务器证书
  5. sudo openssl req -new -x509 -days 3650 -nodes -text -out server.crt -keyout server.key -subj "/CN=db.example.com"
  6. sudo chmod og-rwx server.key
  7. # 创建根证书
  8. sudo openssl req -new -nodes -text -out root.csr -keyout root.key -subj "/CN=root.example.com"
  9. sudo openssl x509 -req -in root.csr -text -days 3650 -extfile /etc/ssl/openssl.cnf -extensions v3_ca -signkey root.key -out root.crt
  10. # 设置权限
  11. sudo chown postgres:postgres /var/lib/pgsql/data/ssl/*
  12. sudo chmod 600 /var/lib/pgsql/data/ssl/server.key
复制代码

编辑PostgreSQL配置文件以启用SSL:
  1. sudo vim /var/lib/pgsql/data/postgresql.conf
复制代码

修改以下参数:
  1. # SSL配置
  2. ssl = on
  3. ssl_cert_file = 'ssl/server.crt'
  4. ssl_key_file = 'ssl/server.key'
  5. ssl_ca_file = 'ssl/root.crt'
复制代码

编辑pg_hba.conf文件以要求SSL连接:
  1. sudo vim /var/lib/pgsql/data/pg_hba.conf
复制代码

修改认证方法:
  1. # TYPE  DATABASE        USER            ADDRESS                 METHOD
  2. hostssl all             all             0.0.0.0/0               md5
  3. host    all             all             127.0.0.1/32            md5
复制代码

重启PostgreSQL服务:
  1. sudo systemctl restart postgresql
复制代码

验证SSL配置:
  1. sudo -u postgres psql -c "SHOW ssl;"
复制代码

5. 数据库性能优化

5.1 MySQL/MariaDB性能优化

索引是提高数据库查询性能的关键。以下是一些索引优化的最佳实践:
  1. -- 创建索引
  2. CREATE INDEX idx_user_email ON users(email);
  3. -- 创建复合索引
  4. CREATE INDEX idx_user_name_email ON users(last_name, first_name);
  5. -- 创建全文索引(适用于文本搜索)
  6. CREATE FULLTEXT INDEX idx_article_content ON articles(content);
  7. -- 分析索引使用情况
  8. SHOW INDEX FROM users;
  9. -- 查看查询执行计划
  10. EXPLAIN SELECT * FROM users WHERE email = 'user@example.com';
  11. -- 识别未使用的索引
  12. SELECT * FROM sys.schema_unused_indexes;
  13. -- 识别冗余索引
  14. SELECT * FROM sys.schema_redundant_indexes;
复制代码

优化SQL查询可以显著提高数据库性能:
  1. -- 使用LIMIT限制结果集大小
  2. SELECT * FROM large_table LIMIT 1000;
  3. -- 避免使用SELECT *,只选择需要的列
  4. SELECT id, name, email FROM users;
  5. -- 使用JOIN替代子查询
  6. SELECT u.id, u.name, o.order_date
  7. FROM users u
  8. JOIN orders o ON u.id = o.user_id
  9. WHERE u.status = 'active';
  10. -- 使用EXISTS替代IN
  11. SELECT u.id, u.name
  12. FROM users u
  13. WHERE EXISTS (SELECT 1 FROM orders o WHERE o.user_id = u.id);
  14. -- 使用批量插入替代单条插入
  15. INSERT INTO users (name, email) VALUES
  16. ('User1', 'user1@example.com'),
  17. ('User2', 'user2@example.com'),
  18. ('User3', 'user3@example.com');
  19. -- 使用事务处理批量操作
  20. START TRANSACTION;
  21. UPDATE accounts SET balance = balance - 100 WHERE id = 1;
  22. UPDATE accounts SET balance = balance + 100 WHERE id = 2;
  23. COMMIT;
复制代码

根据服务器硬件和工作负载调整MariaDB配置:
  1. sudo vim /etc/my.cnf.d/custom.cnf
复制代码

添加以下性能优化配置:
  1. [mysqld]
  2. # InnoDB优化
  3. innodb_buffer_pool_size = 4G        # 根据系统内存调整,通常为50-70%
  4. innodb_buffer_pool_instances = 4    # 缓冲池实例数,通常为CPU核心数
  5. innodb_log_file_size = 512M         # 日志文件大小
  6. innodb_log_buffer_size = 64M         # 日志缓冲区大小
  7. innodb_flush_log_at_trx_commit = 2   # 平衡性能和数据安全
  8. innodb_flush_method = O_DIRECT       # 直接I/O,避免双缓冲
  9. innodb_file_per_table = ON           # 每表一个文件空间
  10. innodb_read_io_threads = 8          # 读I/O线程数
  11. innodb_write_io_threads = 8         # 写I/O线程数
  12. innodb_thread_concurrency = 0       # 并发线程数,0表示不限制
  13. # MyISAM优化(如果使用MyISAM表)
  14. key_buffer_size = 256M              # 键缓冲区大小
  15. myisam_sort_buffer_size = 64M       # 排序缓冲区大小
  16. myisam_max_sort_file_size = 10G     # 最大排序文件大小
  17. myisam_repair_threads = 1           # 修复线程数
  18. # 其他优化
  19. tmp_table_size = 256M               # 临时表大小
  20. max_heap_table_size = 256M          # 内存表大小
  21. query_cache_size = 128M             # 查询缓存大小
  22. query_cache_type = 1                # 启用查询缓存
  23. table_open_cache = 2000             # 表缓存数
  24. thread_cache_size = 10              # 线程缓存数
  25. thread_stack = 256K                 # 线程堆栈大小
  26. max_connect_errors = 100000         # 最大连接错误数
复制代码

重启MariaDB服务以应用配置:
  1. sudo systemctl restart mariadb
复制代码

5.2 PostgreSQL性能优化

PostgreSQL提供了多种索引类型,根据数据类型和查询模式选择合适的索引:
  1. -- 创建B-tree索引(默认索引类型)
  2. CREATE INDEX idx_user_email ON users(email);
  3. -- 创建复合索引
  4. CREATE INDEX idx_user_name_email ON users(last_name, first_name);
  5. -- 创建部分索引
  6. CREATE INDEX idx_active_users ON users(id) WHERE status = 'active';
  7. -- 创建唯一索引
  8. CREATE UNIQUE INDEX idx_user_email ON users(email);
  9. -- 创建表达式索引
  10. CREATE INDEX idx_user_lower_email ON users(LOWER(email));
  11. -- 创建GIN索引(适用于全文搜索)
  12. CREATE INDEX idx_article_content_gin ON articles USING gin(to_tsvector('english', content));
  13. -- 创建GiST索引(适用于地理数据)
  14. CREATE INDEX idx_location_gist ON locations USING gist(geom);
  15. -- 分析索引使用情况
  16. EXPLAIN ANALYZE SELECT * FROM users WHERE email = 'user@example.com';
  17. -- 查看索引统计信息
  18. SELECT * FROM pg_stat_user_indexes;
  19. -- 识别未使用的索引
  20. SELECT s.schemaname, s.tablename, s.indexname, s.idx_scan
  21. FROM pg_stat_user_indexes s
  22. JOIN pg_index i ON s.indexrelid = i.indexrelid
  23. WHERE s.idx_scan = 0 AND i.indisunique = 'f';
复制代码

优化PostgreSQL查询的技巧:
  1. -- 使用LIMIT限制结果集大小
  2. SELECT * FROM large_table LIMIT 1000;
  3. -- 避免使用SELECT *,只选择需要的列
  4. SELECT id, name, email FROM users;
  5. -- 使用JOIN替代子查询
  6. SELECT u.id, u.name, o.order_date
  7. FROM users u
  8. JOIN orders o ON u.id = o.user_id
  9. WHERE u.status = 'active';
  10. -- 使用EXISTS替代IN
  11. SELECT u.id, u.name
  12. FROM users u
  13. WHERE EXISTS (SELECT 1 FROM orders o WHERE o.user_id = u.id);
  14. -- 使用CTE (Common Table Expressions)提高复杂查询的可读性
  15. WITH active_users AS (
  16.     SELECT id, name FROM users WHERE status = 'active'
  17. )
  18. SELECT u.id, u.name, COUNT(o.id) as order_count
  19. FROM active_users u
  20. LEFT JOIN orders o ON u.id = o.user_id
  21. GROUP BY u.id, u.name;
  22. -- 使用窗口函数
  23. SELECT
  24.     id,
  25.     name,
  26.     salary,
  27.     RANK() OVER (ORDER BY salary DESC) as salary_rank
  28. FROM employees;
  29. -- 使用批量插入
  30. INSERT INTO users (name, email) VALUES
  31. ('User1', 'user1@example.com'),
  32. ('User2', 'user2@example.com'),
  33. ('User3', 'user3@example.com');
  34. -- 使用COPY命令进行大批量数据导入
  35. COPY users(name, email) FROM '/path/to/users.csv' DELIMITER ',' CSV HEADER;
复制代码

根据服务器硬件和工作负载调整PostgreSQL配置:
  1. sudo vim /var/lib/pgsql/data/postgresql.conf
复制代码

修改以下性能优化参数:
  1. # 内存设置
  2. shared_buffers = 1GB                # 共享缓冲区,通常为系统内存的25%
  3. effective_cache_size = 3GB          # 有效缓存大小,通常为系统内存的50%
  4. work_mem = 16MB                     # 排序操作使用的内存
  5. maintenance_work_mem = 256MB        # 维护操作使用的内存
  6. max_stack_depth = 2MB               # 最大堆栈深度
  7. # WAL设置
  8. wal_buffers = 16MB                  # WAL缓冲区
  9. wal_level = replica                 # WAL级别
  10. synchronous_commit = on             # 同步提交设置
  11. full_page_writes = on               # 完整页写入
  12. wal_compression = on                # WAL压缩
  13. # 检查点设置
  14. checkpoint_completion_target = 0.9  # 检查点完成目标
  15. checkpoint_timeout = 15min          # 检查点超时
  16. max_wal_size = 1GB                  # 最大WAL大小
  17. min_wal_size = 80MB                 # 最小WAL大小
  18. # 查询优化
  19. random_page_cost = 1.1              # 随机页成本
  20. effective_io_concurrency = 200      # 有效I/O并发
  21. parallel_tuple_cost = 0.1           # 并行元组成本
  22. parallel_setup_cost = 1000.0        # 并行设置成本
  23. min_parallel_table_scan_size = 8MB  # 最小并行表扫描大小
  24. min_parallel_index_scan_size = 512kB # 最小并行索引扫描大小
  25. max_parallel_workers_per_gather = 2 # 每个Gather节点的最大并行工作进程数
  26. # 连接设置
  27. max_connections = 100               # 最大连接数
  28. superuser_reserved_connections = 3  # 超级用户保留连接数
  29. # 日志设置
  30. log_statement = 'mod'               # 记录修改数据的语句
  31. log_line_prefix = '%t [%p]: [%l-1] user=%u,db=%d '  # 日志行前缀
  32. log_min_duration_statement = 1000   # 记录执行时间超过此值的语句
复制代码

重启PostgreSQL服务以应用配置:
  1. sudo systemctl restart postgresql
复制代码

6. 数据库备份与恢复

6.1 MySQL/MariaDB备份与恢复

使用mysqldump工具进行逻辑备份:
  1. # 备份所有数据库
  2. mysqldump -u root -p --all-databases > /backup/all_databases.sql
  3. # 备份特定数据库
  4. mysqldump -u root -p database_name > /backup/database_name.sql
  5. # 备份特定表
  6. mysqldump -u root -p database_name table1 table2 > /backup/tables.sql
  7. # 备份数据库结构(不包含数据)
  8. mysqldump -u root -p --no-data database_name > /backup/database_structure.sql
  9. # 备份数据库数据(不包含结构)
  10. mysqldump -u root -p --no-create-info database_name > /backup/database_data.sql
  11. # 压缩备份
  12. mysqldump -u root -p database_name | gzip > /backup/database_name.sql.gz
  13. # 备份并添加时间戳
  14. mysqldump -u root -p database_name > /backup/database_name_$(date +%Y%m%d_%H%M%S).sql
复制代码

使用mariabackup工具进行物理备份(热备份):
  1. # 安装mariabackup
  2. sudo dnf install -y mariadb-backup
  3. # 创建完整备份
  4. mariabackup --backup --target-dir=/backup/full_backup --user=root --password=your_password
  5. # 准备备份
  6. mariabackup --prepare --target-dir=/backup/full_backup
  7. # 创建增量备份(基于完整备份)
  8. mariabackup --backup --target-dir=/backup/inc_backup1 --incremental-basedir=/backup/full_backup --user=root --password=your_password
  9. # 准备增量备份
  10. mariabackup --prepare --target-dir=/backup/full_backup --incremental-dir=/backup/inc_backup1
复制代码

从逻辑备份恢复:
  1. # 恢复整个数据库系统
  2. mysql -u root -p < /backup/all_databases.sql
  3. # 恢复特定数据库
  4. mysql -u root -p database_name < /backup/database_name.sql
  5. # 从压缩备份恢复
  6. gunzip < /backup/database_name.sql.gz | mysql -u root -p database_name
复制代码

从物理备份恢复:
  1. # 停止MariaDB服务
  2. sudo systemctl stop mariadb
  3. # 备份原始数据目录
  4. sudo mv /var/lib/mysql /var/lib/mysql.bak
  5. # 恢复数据
  6. sudo mariabackup --copy-back --target-dir=/backup/full_backup
  7. # 修复权限
  8. sudo chown -R mysql:mysql /var/lib/mysql
  9. # 启动MariaDB服务
  10. sudo systemctl start mariadb
复制代码

创建自动化备份脚本:
  1. #!/bin/bash
  2. # 设置变量
  3. BACKUP_DIR="/backup/mysql"
  4. DATE=$(date +%Y%m%d_%H%M%S)
  5. MYSQL_USER="root"
  6. MYSQL_PASSWORD="your_password"
  7. RETENTION_DAYS=30
  8. # 创建备份目录
  9. mkdir -p $BACKUP_DIR
  10. # 备份所有数据库
  11. mysqldump -u $MYSQL_USER -p$MYSQL_PASSWORD --all-databases | gzip > $BACKUP_DIR/all_databases_$DATE.sql.gz
  12. # 备份重要数据库
  13. for DB in database1 database2 database3; do
  14.     mysqldump -u $MYSQL_USER -p$MYSQL_PASSWORD $DB | gzip > $BACKUP_DIR/${DB}_$DATE.sql.gz
  15. done
  16. # 删除旧备份
  17. find $BACKUP_DIR -type f -name "*.sql.gz" -mtime +$RETENTION_DAYS -delete
  18. # 记录备份状态
  19. echo "Backup completed at $(date)" >> $BACKUP_DIR/backup_log.txt
复制代码

设置脚本可执行并添加到cron:
  1. chmod +x /usr/local/bin/mysql_backup.sh
  2. crontab -e
复制代码

添加以下行以每天凌晨2点执行备份:
  1. 0 2 * * * /usr/local/bin/mysql_backup.sh
复制代码

6.2 PostgreSQL备份与恢复

使用pg_dump和pg_dumpall工具进行逻辑备份:
  1. # 备份所有数据库
  2. pg_dumpall -U postgres -f /backup/all_databases.sql
  3. # 备份特定数据库
  4. pg_dump -U postgres database_name > /backup/database_name.sql
  5. # 备份特定数据库并压缩
  6. pg_dump -U postgres database_name | gzip > /backup/database_name.sql.gz
  7. # 备份数据库结构(不包含数据)
  8. pg_dump -U postgres -s database_name > /backup/database_structure.sql
  9. # 备份数据库数据(不包含结构)
  10. pg_dump -U postgres -a database_name > /backup/database_data.sql
  11. # 备份特定表
  12. pg_dump -U postgres -t table1 -t table2 database_name > /backup/tables.sql
  13. # 创建自定义格式的备份(允许选择性恢复)
  14. pg_dump -U postgres -Fc database_name > /backup/database_name.dump
  15. # 备份并添加时间戳
  16. pg_dump -U postgres database_name > /backup/database_name_$(date +%Y%m%d_%H%M%S).sql
复制代码

使用pg_basebackup工具进行物理备份(热备份):
  1. # 创建完整备份
  2. pg_basebackup -U postgres -D /backup/postgresql_backup -Ft -z -P -X stream
  3. # 创建增量备份需要使用WAL归档
  4. # 首先配置postgresql.conf
  5. wal_level = replica
  6. archive_mode = on
  7. archive_command = 'cp %p /backup/wal_archive/%f'
  8. # 重启PostgreSQL服务
  9. sudo systemctl restart postgresql
  10. # 然后可以使用pg_basebackup创建基础备份,WAL文件将自动归档
复制代码

从逻辑备份恢复:
  1. # 恢复所有数据库
  2. psql -U postgres -f /backup/all_databases.sql
  3. # 恢复特定数据库
  4. psql -U postgres -d database_name -f /backup/database_name.sql
  5. # 从压缩备份恢复
  6. gunzip -c /backup/database_name.sql.gz | psql -U postgres -d database_name
  7. # 从自定义格式备份恢复
  8. pg_restore -U postgres -d database_name /backup/database_name.dump
复制代码

从物理备份恢复:
  1. # 停止PostgreSQL服务
  2. sudo systemctl stop postgresql
  3. # 备份原始数据目录
  4. sudo mv /var/lib/pgsql/data /var/lib/pgsql/data.bak
  5. # 恢复数据
  6. sudo tar -xzf /backup/postgresql_backup/base.tar.gz -C /var/lib/pgsql
  7. # 如果有WAL归档,创建recovery.conf文件
  8. sudo vim /var/lib/pgsql/data/recovery.conf
复制代码

添加以下内容:
  1. restore_command = 'cp /backup/wal_archive/%f %p'
  2. recovery_target_time = '2023-01-01 12:00:00'
  3. recovery_target_inclusive = true
复制代码

修复权限并启动PostgreSQL服务:
  1. sudo chown -R postgres:postgres /var/lib/pgsql/data
  2. sudo systemctl start postgresql
复制代码

创建自动化备份脚本:
  1. #!/bin/bash
  2. # 设置变量
  3. BACKUP_DIR="/backup/postgresql"
  4. DATE=$(date +%Y%m%d_%H%M%S)
  5. POSTGRES_USER="postgres"
  6. RETENTION_DAYS=30
  7. # 创建备份目录
  8. mkdir -p $BACKUP_DIR
  9. # 备份所有数据库(全局对象)
  10. pg_dumpall -U $POSTGRES_USER -g > $BACKUP_DIR/globals_$DATE.sql
  11. # 备份重要数据库
  12. for DB in database1 database2 database3; do
  13.     pg_dump -U $POSTGRES_USER -Fc $DB > $BACKUP_DIR/${DB}_$DATE.dump
  14. done
  15. # 创建基础备份
  16. pg_basebackup -U $POSTGRES_USER -D $BACKUP_DIR/base_backup_$DATE -Ft -z -P -X stream
  17. # 删除旧备份
  18. find $BACKUP_DIR -type f -name "*.sql" -mtime +$RETENTION_DAYS -delete
  19. find $BACKUP_DIR -type f -name "*.dump" -mtime +$RETENTION_DAYS -delete
  20. find $BACKUP_DIR -type d -name "base_backup_*" -mtime +$RETENTION_DAYS -exec rm -rf {} \;
  21. # 记录备份状态
  22. echo "Backup completed at $(date)" >> $BACKUP_DIR/backup_log.txt
复制代码

设置脚本可执行并添加到cron:
  1. chmod +x /usr/local/bin/postgresql_backup.sh
  2. crontab -e
复制代码

添加以下行以每天凌晨2点执行备份:
  1. 0 2 * * * /usr/local/bin/postgresql_backup.sh
复制代码

7. 数据库日常管理最佳实践

7.1 监控与维护

使用内置工具和命令监控数据库状态:
  1. -- 查看服务器状态
  2. SHOW STATUS;
  3. SHOW VARIABLES;
  4. -- 查看进程列表
  5. SHOW PROCESSLIST;
  6. SHOW FULL PROCESSLIST;
  7. -- 查看运行中的查询
  8. SELECT id, user, host, db, command, time, state, info
  9. FROM information_schema.processlist
  10. WHERE command != 'Sleep';
  11. -- 查看服务器负载
  12. SHOW GLOBAL STATUS LIKE 'Threads_connected';
  13. SHOW GLOBAL STATUS LIKE 'Threads_running';
  14. SHOW GLOBAL STATUS LIKE 'Questions';
  15. SHOW GLOBAL STATUS LIKE 'Slow_queries';
  16. -- 查看InnoDB状态
  17. SHOW ENGINE INNODB STATUS;
  18. -- 查看锁信息
  19. SHOW OPEN TABLES WHERE In_use > 0;
  20. SELECT * FROM information_schema.innodb_locks;
  21. SELECT * FROM information_schema.innodb_lock_waits;
  22. -- 查看复制状态(如果配置了复制)
  23. SHOW SLAVE STATUS\G
  24. SHOW MASTER STATUS\G
复制代码

使用mysqladmin工具进行监控:
  1. # 查看服务器状态
  2. mysqladmin -u root -p status
  3. mysqladmin -u root -p extended-status
  4. # 查看进程列表
  5. mysqladmin -u root -p processlist
  6. # 查看服务器变量
  7. mysqladmin -u root -p variables
  8. # 查看服务器是否存活
  9. mysqladmin -u root -p ping
复制代码

使用内置工具和命令监控数据库状态:
  1. -- 查看服务器状态
  2. SELECT * FROM pg_stat_activity;
  3. SELECT * FROM pg_stat_database;
  4. -- 查看运行中的查询
  5. SELECT pid, usename, application_name, client_addr, state, query, query_start
  6. FROM pg_stat_activity
  7. WHERE state != 'idle';
  8. -- 查看表统计信息
  9. SELECT schemaname, tablename, seq_scan, seq_tup_read, idx_scan, idx_tup_fetch
  10. FROM pg_stat_user_tables;
  11. -- 查看索引统计信息
  12. SELECT schemaname, tablename, indexname, idx_scan, idx_tup_read, idx_tup_fetch
  13. FROM pg_stat_user_indexes;
  14. -- 查看锁信息
  15. SELECT locktype, relation::regclass, mode, pid
  16. FROM pg_locks
  17. WHERE NOT granted;
  18. -- 查看复制状态(如果配置了复制)
  19. SELECT * FROM pg_stat_replication;
复制代码

使用pg_stat_statements扩展监控查询性能:
  1. -- 启用pg_stat_statements扩展
  2. CREATE EXTENSION pg_stat_statements;
  3. -- 查看查询统计信息
  4. SELECT query, calls, total_time, mean_time, rows
  5. FROM pg_stat_statements
  6. ORDER BY total_time DESC
  7. LIMIT 10;
复制代码

创建定期维护脚本:
  1. #!/bin/bash
  2. # MySQL/MariaDB维护脚本
  3. # 设置变量
  4. MYSQL_USER="root"
  5. MYSQL_PASSWORD="your_password"
  6. LOG_FILE="/var/log/mysql_maintenance.log"
  7. # 记录开始时间
  8. echo "Maintenance started at $(date)" >> $LOG_FILE
  9. # 检查并优化表
  10. mysql -u $MYSQL_USER -p$MYSQL_PASSWORD -e "SELECT CONCAT('CHECK TABLE ', table_schema, '.', table_name, ';') FROM information_schema.tables WHERE table_type = 'BASE TABLE' AND table_schema NOT IN ('information_schema', 'mysql', 'performance_schema')" | grep -v "CONCAT" | mysql -u $MYSQL_USER -p$MYSQL_PASSWORD
  11. mysql -u $MYSQL_USER -p$MYSQL_PASSWORD -e "SELECT CONCAT('OPTIMIZE TABLE ', table_schema, '.', table_name, ';') FROM information_schema.tables WHERE table_type = 'BASE TABLE' AND table_schema NOT IN ('information_schema', 'mysql', 'performance_schema')" | grep -v "CONCAT" | mysql -u $MYSQL_USER -p$MYSQL_PASSWORD
  12. # 删除二进制日志(保留最近7天)
  13. mysql -u $MYSQL_USER -p$MYSQL_PASSWORD -e "PURGE BINARY LOGS BEFORE DATE_SUB(NOW(), INTERVAL 7 DAY);"
  14. # 刷新慢查询日志
  15. mysql -u $MYSQL_USER -p$MYSQL_PASSWORD -e "SET GLOBAL slow_query_log = 'OFF'; SET GLOBAL slow_query_log = 'ON';"
  16. # 记录结束时间
  17. echo "Maintenance completed at $(date)" >> $LOG_FILE
复制代码

PostgreSQL维护脚本:
  1. #!/bin/bash
  2. # PostgreSQL维护脚本
  3. # 设置变量
  4. POSTGRES_USER="postgres"
  5. LOG_FILE="/var/log/postgresql_maintenance.log"
  6. # 记录开始时间
  7. echo "Maintenance started at $(date)" >> $LOG_FILE
  8. # 更新统计信息
  9. sudo -u $POSTGRES_USER psql -c "ANALYZE;"
  10. # 清理过期事务ID
  11. sudo -u $POSTGRES_USER vacuumdb -a -z
  12. # 重建索引
  13. sudo -u $POSTGRES_USER reindexdb -a
  14. # 清理WAL文件(如果使用归档)
  15. # 这里需要根据实际归档策略进行调整
  16. # 记录结束时间
  17. echo "Maintenance completed at $(date)" >> $LOG_FILE
复制代码

7.2 安全最佳实践

实施严格的访问控制策略:
  1. -- MySQL/MariaDB访问控制
  2. -- 创建具有最小必要权限的用户
  3. CREATE USER 'app_user'@'localhost' IDENTIFIED BY 'secure_password';
  4. GRANT SELECT, INSERT, UPDATE, DELETE ON database_name.* TO 'app_user'@'localhost';
  5. -- 限制root用户访问
  6. DELETE FROM mysql.user WHERE User = 'root' AND Host NOT IN ('localhost', '127.0.0.1', '::1');
  7. FLUSH PRIVILEGES;
  8. -- 定期审查用户权限
  9. SELECT user, host, authentication_string FROM mysql.user;
  10. SELECT * FROM information_schema.user_privileges;
复制代码
  1. -- PostgreSQL访问控制
  2. -- 创建具有最小必要权限的角色
  3. CREATE ROLE app_user WITH LOGIN PASSWORD 'secure_password';
  4. GRANT CONNECT ON DATABASE database_name TO app_user;
  5. GRANT USAGE ON SCHEMA public TO app_user;
  6. GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO app_user;
  7. GRANT USAGE, SELECT ON ALL SEQUENCES IN SCHEMA public TO app_user;
  8. -- 限制postgres用户远程访问
  9. ALTER ROLE postgres WITH NOLOGIN;
  10. -- 定期审查角色权限
  11. SELECT rolname, rolcreaterole, rolcreatedb, rolsuper FROM pg_roles;
  12. SELECT grantee, privilege_type FROM information_schema.role_table_grants;
复制代码

配置防火墙和SSL以保护数据库服务器:
  1. # 配置防火墙规则
  2. sudo firewall-cmd --permanent --add-service=mysql
  3. sudo firewall-cmd --permanent --add-service=postgresql
  4. sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" service name="mysql" accept'
  5. sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" service name="postgresql" accept'
  6. sudo firewall-cmd --reload
  7. # 配置SELinux(如果启用)
  8. sudo setsebool -P mysql_connect_any=1
  9. sudo setsebool -P postgresql_connect_any=1
复制代码

实施数据加密保护敏感信息:
  1. -- MySQL/MariaDB数据加密
  2. -- 启用数据静态加密(需要企业版或特定版本)
  3. -- 在配置文件中添加
  4. # plugin-load-add=file_key_management.so
  5. # file_key_management_filename = /etc/mysql/encryption.key
  6. # innodb_encrypt_tables = ON
  7. # innodb_encrypt_log = ON
  8. # innodb_encryption_threads = 4
  9. -- 使用加密函数
  10. SELECT AES_ENCRYPT('sensitive_data', 'encryption_key');
  11. SELECT AES_DECRYPT(encrypted_column, 'encryption_key') FROM table_name;
复制代码
  1. -- PostgreSQL数据加密
  2. -- 使用pgcrypto扩展
  3. CREATE EXTENSION pgcrypto;
  4. -- 使用加密函数
  5. SELECT encrypt('sensitive_data', 'encryption_key', 'aes');
  6. SELECT decrypt(encrypted_column, 'encryption_key', 'aes') FROM table_name;
  7. -- 使用加密哈希
  8. SELECT crypt('password', gen_salt('bf'));
  9. SELECT (password_hash = crypt('input_password', password_hash)) AS password_match FROM users;
复制代码

7.3 高可用性与灾难恢复

配置主从复制实现高可用性:
  1. # 主服务器配置
  2. sudo vim /etc/my.cnf.d/custom.cnf
复制代码

添加以下配置:
  1. [mysqld]
  2. # 服务器ID
  3. server-id = 1
  4. # 启用二进制日志
  5. log-bin = mysql-bin
  6. binlog_format = ROW
  7. # 需要复制的数据库
  8. binlog-do-db = database_name
  9. # 忽略复制的数据库
  10. binlog-ignore-db = mysql
  11. binlog-ignore-db = information_schema
  12. binlog-ignore-db = performance_schema
复制代码

重启MariaDB服务:
  1. sudo systemctl restart mariadb
复制代码

创建复制用户:
  1. CREATE USER 'repl_user'@'%' IDENTIFIED BY 'repl_password';
  2. GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'%';
  3. FLUSH PRIVILEGES;
复制代码

获取主服务器二进制日志位置:
  1. SHOW MASTER STATUS;
复制代码

从服务器配置:
  1. sudo vim /etc/my.cnf.d/custom.cnf
复制代码

添加以下配置:
  1. [mysqld]
  2. # 服务器ID(必须与主服务器不同)
  3. server-id = 2
  4. # 中继日志配置
  5. relay-log = mysql-relay-bin
  6. relay-log-index = mysql-relay-bin.index
  7. # 只读模式(可选)
  8. read_only = ON
复制代码

重启MariaDB服务:
  1. sudo systemctl restart mariadb
复制代码

配置从服务器连接到主服务器:
  1. CHANGE MASTER TO
  2.     MASTER_HOST = 'master_ip',
  3.     MASTER_USER = 'repl_user',
  4.     MASTER_PASSWORD = 'repl_password',
  5.     MASTER_LOG_FILE = 'mysql-bin.000001',
  6.     MASTER_LOG_POS = 154;
  7. -- 启动复制
  8. START SLAVE;
  9. -- 检查复制状态
  10. SHOW SLAVE STATUS\G
复制代码

配置PostgreSQL流复制实现高可用性:
  1. # 主服务器配置
  2. sudo vim /var/lib/pgsql/data/postgresql.conf
复制代码

修改以下参数:
  1. # 服务器ID
  2. wal_level = replica
  3. max_wal_senders = 3
  4. max_replication_slots = 3
  5. synchronous_commit = on
  6. synchronous_standby_names = 'standby1'
复制代码

编辑pg_hba.conf文件:
  1. sudo vim /var/lib/pgsql/data/pg_hba.conf
复制代码

添加以下行:
  1. # 允许复制连接
  2. host replication replicator 192.168.1.0/24 md5
复制代码

创建复制用户:
  1. CREATE USER replicator REPLICATION LOGIN PASSWORD 'repl_password';
复制代码

重启PostgreSQL服务:
  1. sudo systemctl restart postgresql
复制代码

从服务器配置:
  1. # 停止PostgreSQL服务
  2. sudo systemctl stop postgresql
  3. # 备份数据目录
  4. sudo mv /var/lib/pgsql/data /var/lib/pgsql/data.bak
  5. # 使用pg_basebackup从主服务器获取基础备份
  6. sudo -u postgres pg_basebackup -h master_ip -U replicator -D /var/lib/pgsql/data -Fp -Xs -P -R
  7. # 编辑standby.signal文件
  8. sudo vim /var/lib/pgsql/data/standby.signal
复制代码

添加以下内容:
  1. standby_mode = 'on'
复制代码

编辑postgresql.conf文件:
  1. sudo vim /var/lib/pgsql/data/postgresql.conf
复制代码

添加以下配置:
  1. # 服务器ID(必须与主服务器不同)
  2. hot_standby = on
  3. # 主服务器连接信息
  4. primary_conninfo = 'host=master_ip port=5432 user=replicator password=repl_password'
  5. # 应用延迟(可选)
  6. recovery_min_apply_delay = 0
复制代码

启动PostgreSQL服务:
  1. sudo systemctl start postgresql
复制代码

验证复制状态:
  1. -- 在主服务器上执行
  2. SELECT * FROM pg_stat_replication;
  3. -- 在从服务器上执行
  4. SELECT * FROM pg_stat_wal_receiver;
复制代码

制定全面的灾难恢复计划:

1. 风险评估:识别潜在风险(硬件故障、自然灾害、人为错误等)评估每种风险的可能性和影响确定恢复时间目标(RTO)和恢复点目标(RPO)
2. 识别潜在风险(硬件故障、自然灾害、人为错误等)
3. 评估每种风险的可能性和影响
4. 确定恢复时间目标(RTO)和恢复点目标(RPO)
5. 备份策略:定期全量备份(每日或每周)增量备份(每小时或每日)异地备份存储备份验证和测试
6. 定期全量备份(每日或每周)
7. 增量备份(每小时或每日)
8. 异地备份存储
9. 备份验证和测试
10. 恢复流程:详细记录恢复步骤指定恢复负责人和联系方式定期进行恢复演练
11. 详细记录恢复步骤
12. 指定恢复负责人和联系方式
13. 定期进行恢复演练
14. 故障转移计划:自动故障转移机制手动故障转移流程故障恢复后的数据同步
15. 自动故障转移机制
16. 手动故障转移流程
17. 故障恢复后的数据同步
18. 文档和沟通:维护详细的系统文档建立紧急沟通渠道定期更新和审查灾难恢复计划
19. 维护详细的系统文档
20. 建立紧急沟通渠道
21. 定期更新和审查灾难恢复计划

风险评估:

• 识别潜在风险(硬件故障、自然灾害、人为错误等)
• 评估每种风险的可能性和影响
• 确定恢复时间目标(RTO)和恢复点目标(RPO)

备份策略:

• 定期全量备份(每日或每周)
• 增量备份(每小时或每日)
• 异地备份存储
• 备份验证和测试

恢复流程:

• 详细记录恢复步骤
• 指定恢复负责人和联系方式
• 定期进行恢复演练

故障转移计划:

• 自动故障转移机制
• 手动故障转移流程
• 故障恢复后的数据同步

文档和沟通:

• 维护详细的系统文档
• 建立紧急沟通渠道
• 定期更新和审查灾难恢复计划

8. 监控与故障排除

8.1 监控工具

使用系统监控工具监控数据库服务器:
  1. # 安装监控工具
  2. sudo dnf install -y htop iotop sysstat nmon
  3. # 使用htop监控进程和资源使用
  4. htop
  5. # 使用iotop监控I/O使用
  6. sudo iotop
  7. # 使用vmstat监控内存和CPU
  8. vmstat 1 10
  9. # 使用iostat监控磁盘I/O
  10. iostat -xz 1 10
  11. # 使用sar收集系统活动数据
  12. sar -u 1 10    # CPU使用率
  13. sar -r 1 10    # 内存使用率
  14. sar -b 1 10    # I/O传输率
  15. sar -n DEV 1 10 # 网络使用率
复制代码

安装和使用数据库专用监控工具:
  1. # 安装Percona Monitoring and Management (PMM) for MySQL/MariaDB
  2. # 首先安装Docker
  3. sudo dnf install -y docker
  4. sudo systemctl start docker
  5. sudo systemctl enable docker
  6. # 运行PMM服务器
  7. docker run -d -p 80:80 -p 443:443 --name pmm-server \
  8.   -v /opt/prometheus/data:/opt/prometheus/data \
  9.   -v /opt/grafana/data:/opt/grafana/data \
  10.   -v /var/lib/mysql:/var/lib/mysql \
  11.   -v /var/lib/grafana:/var/lib/grafana \
  12.   --restart always \
  13.   percona/pmm-server:latest
  14. # 在数据库服务器上安装PMM客户端
  15. sudo dnf install -y https://repo.percona.com/yum/percona-release-latest.noarch.rpm
  16. sudo dnf install -y pmm2-client
  17. # 注册客户端到PMM服务器
  18. pmm-admin config --server-insecure-tls --server-url=https://pmm-server-ip --force
  19. pmm-admin add mysql --username=root --password=your_password
复制代码

对于PostgreSQL,可以使用pgAdmin和pgBadger:
  1. # 安装pgAdmin
  2. sudo dnf install -y pgadmin4
  3. # 安装pgBadger
  4. sudo dnf install -y pgbadger
  5. # 使用pgBadger分析PostgreSQL日志
  6. pgbadger /var/lib/pgsql/data/log/postgresql-*.log -o /var/www/html/pgbadger/index.html
复制代码

创建自定义监控脚本:
  1. #!/bin/bash
  2. # MySQL/MariaDB监控脚本
  3. # 设置变量
  4. MYSQL_USER="monitor_user"
  5. MYSQL_PASSWORD="monitor_password"
  6. ALERT_EMAIL="admin@example.com"
  7. ALERT_SUBJECT="MySQL Alert"
  8. LOG_FILE="/var/log/mysql_monitor.log"
  9. TEMP_FILE="/tmp/mysql_status.txt"
  10. # 获取MySQL状态
  11. mysql -u $MYSQL_USER -p$MYSQL_PASSWORD -e "SHOW GLOBAL STATUS;" > $TEMP_FILE
  12. mysql -u $MYSQL_USER -p$MYSQL_PASSWORD -e "SHOW GLOBAL VARIABLES;" >> $TEMP_FILE
  13. mysql -u $MYSQL_USER -p$MYSQL_PASSWORD -e "SHOW PROCESSLIST;" >> $TEMP_FILE
  14. # 检查关键指标
  15. THREADS_CONNECTED=$(grep "Threads_connected" $TEMP_FILE | awk '{print $2}')
  16. THREADS_RUNNING=$(grep "Threads_running" $TEMP_FILE | awk '{print $2}')
  17. SLOW_QUERIES=$(grep "Slow_queries" $TEMP_FILE | awk '{print $2}')
  18. MAX_CONNECTIONS=$(grep "max_connections" $TEMP_FILE | awk '{print $2}')
  19. CONNECTION_USAGE=$(echo "scale=2; $THREADS_CONNECTED * 100 / $MAX_CONNECTIONS" | bc)
  20. # 检查阈值并发出警报
  21. if [ $(echo "$CONNECTION_USAGE > 80" | bc) -eq 1 ]; then
  22.     echo "High connection usage: $CONNECTION_USAGE%" | mailx -s "$ALERT_SUBJECT" $ALERT_EMAIL
  23.     echo "$(date): High connection usage: $CONNECTION_USAGE%" >> $LOG_FILE
  24. fi
  25. if [ $THREADS_RUNNING -gt 10 ]; then
  26.     echo "High running threads: $THREADS_RUNNING" | mailx -s "$ALERT_SUBJECT" $ALERT_EMAIL
  27.     echo "$(date): High running threads: $THREADS_RUNNING" >> $LOG_FILE
  28. fi
  29. # 清理临时文件
  30. rm -f $TEMP_FILE
复制代码

8.2 常见问题及解决方案

问题:数据库响应缓慢

解决方案:
  1. -- MySQL/MariaDB
  2. -- 识别慢查询
  3. SELECT * FROM mysql.slow_log WHERE start_time > NOW() - INTERVAL 1 DAY;
  4. -- 启用慢查询日志
  5. SET GLOBAL slow_query_log = 'ON';
  6. SET GLOBAL long_query_time = 2;
  7. SET GLOBAL slow_query_log_file = '/var/log/mysql/slow.log';
  8. -- 分析查询执行计划
  9. EXPLAIN SELECT * FROM large_table WHERE column = 'value';
  10. -- 检查索引使用情况
  11. SELECT * FROM sys.schema_unused_indexes;
  12. SELECT * FROM sys.schema_redundant_indexes;
  13. -- 检查表碎片化
  14. SELECT table_schema, table_name, data_free / 1024 / 1024 AS fragmentation_mb
  15. FROM information_schema.tables
  16. WHERE data_free > 0;
  17. -- 优化表
  18. OPTIMIZE TABLE table_name;
复制代码
  1. -- PostgreSQL
  2. -- 识别慢查询
  3. SELECT query, calls, total_time, mean_time, rows
  4. FROM pg_stat_statements
  5. ORDER BY total_time DESC
  6. LIMIT 10;
  7. -- 启用查询日志
  8. ALTER SYSTEM SET log_min_duration_statement = '2000';
  9. SELECT pg_reload_conf();
  10. -- 分析查询执行计划
  11. EXPLAIN ANALYZE SELECT * FROM large_table WHERE column = 'value';
  12. -- 检查索引使用情况
  13. SELECT schemaname, tablename, indexname, idx_scan
  14. FROM pg_stat_user_indexes
  15. WHERE idx_scan = 0;
  16. -- 检查表膨胀
  17. SELECT
  18.   schemaname, tablename,
  19.   pg_size_pretty(pg_total_relation_size(schemaname||'.'||tablename)) as size,
  20.   pg_size_pretty(pg_total_relation_size(schemaname||'.'||tablename) - pg_relation_size(schemaname||'.'||tablename)) as external_size,
  21.   pg_size_pretty(pg_indexes_size(schemaname||'.'||tablename)) as index_size
  22. FROM pg_tables
  23. WHERE schemaname NOT IN ('pg_catalog', 'information_schema')
  24. ORDER BY pg_total_relation_size(schemaname||'.'||tablename) DESC;
  25. -- 清理表膨胀
  26. VACUUM (FULL, ANALYZE) table_name;
复制代码

问题:无法连接到数据库

解决方案:
  1. # MySQL/MariaDB连接问题排查
  2. # 检查服务状态
  3. sudo systemctl status mariadb
  4. # 检查端口监听
  5. sudo netstat -tulnp | grep mysql
  6. sudo ss -tulnp | grep mysql
  7. # 检查防火墙设置
  8. sudo firewall-cmd --list-all
  9. # 检查SELinux设置
  10. sudo getsebool -a | grep mysql
  11. sudo grep mysql /var/log/audit/audit.log | audit2allow -M mymysql
  12. sudo semodule -i mymysql.pp
  13. # 检查用户权限
  14. mysql -u root -p -e "SELECT user, host FROM mysql.user;"
  15. # 检查错误日志
  16. sudo tail -f /var/log/mariadb/mariadb.log
复制代码
  1. # PostgreSQL连接问题排查
  2. # 检查服务状态
  3. sudo systemctl status postgresql
  4. # 检查端口监听
  5. sudo netstat -tulnp | grep postgres
  6. sudo ss -tulnp | grep postgres
  7. # 检查防火墙设置
  8. sudo firewall-cmd --list-all
  9. # 检查SELinux设置
  10. sudo getsebool -a | grep postgres
  11. sudo grep postgres /var/log/audit/audit.log | audit2allow -mypostgres
  12. sudo semodule -i mypostgres.pp
  13. # 检查用户权限
  14. sudo -u postgres psql -c "SELECT usename, usecreatedb, usesuper, userepl FROM pg_user;"
  15. # 检查客户端认证配置
  16. sudo cat /var/lib/pgsql/data/pg_hba.conf
  17. # 检查错误日志
  18. sudo tail -f /var/lib/pgsql/data/log/postgresql-*.log
复制代码

问题:主从复制中断

解决方案:
  1. -- MySQL/MariaDB复制问题排查
  2. -- 在从服务器上检查复制状态
  3. SHOW SLAVE STATUS\G
  4. -- 检查错误信息
  5. SHOW SLAVE STATUS\G
  6. -- 查看Last_Error和Last_SQL_Error字段
  7. -- 常见错误解决方法
  8. -- 1. 主键冲突
  9. STOP SLAVE;
  10. SET GLOBAL sql_slave_skip_counter = 1;
  11. START SLAVE;
  12. -- 2. 网络问题
  13. -- 检查主从服务器之间的网络连接
  14. ping master_ip
  15. telnet master_ip 3306
  16. -- 3. 中继日志损坏
  17. STOP SLAVE;
  18. CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=154;
  19. START SLAVE;
  20. -- 4. 重新同步数据
  21. -- 使用mysqldump或mariabackup重新同步数据
复制代码
  1. -- PostgreSQL复制问题排查
  2. -- 在主服务器上检查复制状态
  3. SELECT * FROM pg_stat_replication;
  4. -- 在从服务器上检查接收状态
  5. SELECT * FROM pg_stat_wal_receiver;
  6. -- 检查从服务器日志
  7. sudo tail -f /var/lib/pgsql/data/log/postgresql-*.log
  8. -- 常见错误解决方法
  9. -- 1. WAL文件缺失
  10. -- 检查归档设置
  11. SHOW archive_command;
  12. -- 2. 网络问题
  13. -- 检查主从服务器之间的网络连接
  14. ping master_ip
  15. telnet master_ip 5432
  16. -- 3. 重新同步数据
  17. -- 在从服务器上停止服务
  18. sudo systemctl stop postgresql
  19. -- 重新备份主服务器数据
  20. sudo -u postgres rm -rf /var/lib/pgsql/data/*
  21. sudo -u postgres pg_basebackup -h master_ip -U replicator -D /var/lib/pgsql/data -Fp -Xs -P -R
  22. -- 启动从服务器
  23. sudo systemctl start postgresql
复制代码

9. 高级配置技巧

9.1 MySQL/MariaDB高级配置

虽然MySQL 8.0移除了查询缓存功能,但在MariaDB中仍然可以使用:
  1. [mysqld]
  2. # 查询缓存配置
  3. query_cache_type = 1
  4. query_cache_size = 128M
  5. query_cache_limit = 2M
  6. query_cache_min_res_unit = 4K
复制代码

监控查询缓存使用情况:
  1. SHOW STATUS LIKE 'Qcache%';
  2. SHOW STATUS LIKE 'Com_select';
复制代码

对于高并发环境,配置线程池可以提高性能:
  1. [mysqld]
  2. # 线程池配置
  3. thread_pool_size = 16           # 通常为CPU核心数
  4. thread_pool_oversubscribe = 10  # 每个线程组的额外线程数
  5. thread_pool_stall_limit = 100   # 线程停滞时间阈值(毫秒)
复制代码

针对InnoDB存储引擎的高级优化:
  1. [mysqld]
  2. # InnoDB I/O优化
  3. innodb_io_capacity = 2000           # SSD使用2000,HDD使用200
  4. innodb_io_capacity_max = 4000       # SSD使用4000,HDD使用400
  5. innodb_flush_neighbors = 0          # SSD使用0,HDD使用1
  6. # InnoDB并发控制
  7. innodb_thread_concurrency = 0       # 0表示不限制
  8. innodb_read_io_threads = 8         # 读I/O线程数
  9. innodb_write_io_threads = 8        # 写I/O线程数
  10. # InnoDB内存优化
  11. innodb_buffer_pool_instances = 4    # 缓冲池实例数,通常为CPU核心数
  12. innodb_page_cleaners = 4            # 页清理线程数,通常为缓冲池实例数
  13. innodb_purge_threads = 4            # 清除线程数,通常为CPU核心数
  14. # InnoDB日志优化
  15. innodb_log_write_ahead_size = 8192  # 日志写入前大小,通常与文件系统块大小匹配
  16. innodb_log_buffer_size = 64M        # 日志缓冲区大小
  17. innodb_log_file_size = 512M         # 日志文件大小
复制代码

9.2 PostgreSQL高级配置

PostgreSQL支持并行查询,可以显著提高大型查询的性能:
  1. # 并行查询配置
  2. max_parallel_workers_per_gather = 2    # 每个Gather节点的最大并行工作进程数
  3. max_parallel_workers = 8                 # 最大并行工作进程数
  4. max_parallel_maintenance_workers = 2     # 维护操作的最大并行工作进程数
  5. parallel_tuple_cost = 0.1               # 并行元组成本
  6. parallel_setup_cost = 1000.0            # 并行设置成本
  7. min_parallel_table_scan_size = 8MB      # 最小并行表扫描大小
  8. min_parallel_index_scan_size = 512kB    # 最小并行索引扫描大小
复制代码

强制使用并行查询:
  1. -- 设置表并行扫描的工作进程数
  2. ALTER TABLE large_table SET (parallel_workers = 4);
  3. -- 强制使用并行查询
  4. SET max_parallel_workers_per_gather = 4;
  5. EXPLAIN ANALYZE SELECT * FROM large_table WHERE condition;
复制代码

PostgreSQL支持表空间,可以将数据库对象存储在不同的位置:
  1. -- 创建表空间
  2. CREATE TABLESPACE fast_space LOCATION '/mnt/fast_disk/postgresql';
  3. CREATE TABLESPACE archive_space LOCATION '/mnt/archive_disk/postgresql';
  4. -- 在表空间中创建表
  5. CREATE TABLE large_table (
  6.     id SERIAL PRIMARY KEY,
  7.     data TEXT
  8. ) TABLESPACE fast_space;
  9. -- 将现有表移动到表空间
  10. ALTER TABLE existing_table SET TABLESPACE fast_space;
  11. -- 为特定用户设置默认表空间
  12. ALTER ROLE user_name SET default_tablespace = fast_space;
复制代码

对于大型表,使用分区可以提高查询性能和维护效率:
  1. -- 创建分区表
  2. CREATE TABLE measurement (
  3.     id SERIAL,
  4.     logdate DATE NOT NULL,
  5.     peaktemp INT,
  6.     unitsales INT
  7. ) PARTITION BY RANGE (logdate);
  8. -- 创建分区
  9. CREATE TABLE measurement_y2023m01 PARTITION OF measurement
  10.     FOR VALUES FROM ('2023-01-01') TO ('2023-02-01');
  11. CREATE TABLE measurement_y2023m02 PARTITION OF measurement
  12.     FOR VALUES FROM ('2023-02-01') TO ('2023-03-01');
  13. -- 创建索引
  14. CREATE INDEX ON measurement (logdate);
  15. -- 查询分区表
  16. EXPLAIN SELECT * FROM measurement WHERE logdate = '2023-01-15';
  17. -- 添加新分区
  18. CREATE TABLE measurement_y2023m03 PARTITION OF measurement
  19.     FOR VALUES FROM ('2023-03-01') TO ('2023-04-01');
  20. -- 删除旧分区
  21. DROP TABLE measurement_y2022m12;
复制代码

9.3 自动化运维

创建数据库自动化部署脚本:
  1. #!/bin/bash
  2. # 数据库自动化部署脚本
  3. # 设置变量
  4. DB_TYPE="mariadb"  # 或 "postgresql"
  5. DB_NAME="app_db"
  6. DB_USER="app_user"
  7. DB_PASSWORD="secure_password"
  8. ROOT_PASSWORD="root_password"
  9. # 安装数据库
  10. if [ "$DB_TYPE" == "mariadb" ]; then
  11.     # 安装MariaDB
  12.     sudo dnf install -y mariadb-server
  13.     sudo systemctl start mariadb
  14.     sudo systemctl enable mariadb
  15.    
  16.     # 安全初始化
  17.     sudo mysql_secure_installation <<EOF
  18. y
  19. $ROOT_PASSWORD
  20. $ROOT_PASSWORD
  21. y
  22. y
  23. y
  24. y
  25. EOF
  26.    
  27.     # 创建数据库和用户
  28.     mysql -u root -p$ROOT_PASSWORD -e "CREATE DATABASE $DB_NAME;"
  29.     mysql -u root -p$ROOT_PASSWORD -e "CREATE USER '$DB_USER'@'localhost' IDENTIFIED BY '$DB_PASSWORD';"
  30.     mysql -u root -p$ROOT_PASSWORD -e "GRANT ALL PRIVILEGES ON $DB_NAME.* TO '$DB_USER'@'localhost';"
  31.     mysql -u root -p$ROOT_PASSWORD -e "FLUSH PRIVILEGES;"
  32.    
  33.     # 配置数据库
  34.     sudo tee /etc/my.cnf.d/custom.cnf > /dev/null <<EOF
  35. [mysqld]
  36. character-set-server = utf8mb4
  37. collation-server = utf8mb4_unicode_ci
  38. default-storage-engine = InnoDB
  39. max_connections = 200
  40. innodb_buffer_pool_size = 1G
  41. EOF
  42.    
  43.     sudo systemctl restart mariadb
  44.    
  45. elif [ "$DB_TYPE" == "postgresql" ]; then
  46.     # 安装PostgreSQL
  47.     sudo dnf install -y postgresql-server postgresql-contrib
  48.     sudo postgresql-setup --initdb
  49.     sudo systemctl start postgresql
  50.     sudo systemctl enable postgresql
  51.    
  52.     # 设置postgres用户密码
  53.     sudo -u postgres psql -c "ALTER USER postgres PASSWORD '$ROOT_PASSWORD';"
  54.    
  55.     # 创建数据库和用户
  56.     sudo -u postgres createdb $DB_NAME
  57.     sudo -u postgres psql -c "CREATE USER $DB_USER WITH PASSWORD '$DB_PASSWORD';"
  58.     sudo -u postgres psql -c "GRANT ALL PRIVILEGES ON DATABASE $DB_NAME TO $DB_USER;"
  59.    
  60.     # 配置数据库
  61.     sudo sed -i "s/#listen_addresses = 'localhost'/listen_addresses = '*'/" /var/lib/pgsql/data/postgresql.conf
  62.     sudo sed -i "s/#port = 5432/port = 5432/" /var/lib/pgsql/data/postgresql.conf
  63.     sudo sed -i "s/#max_connections = 100/max_connections = 200/" /var/lib/pgsql/data/postgresql.conf
  64.     sudo sed -i "s/#shared_buffers = 128MB/shared_buffers = 256MB/" /var/lib/pgsql/data/postgresql.conf
  65.    
  66.     sudo tee -a /var/lib/pgsql/data/pg_hba.conf > /dev/null <<EOF
  67. host    $DB_NAME    $DB_USER    0.0.0.0/0    md5
  68. EOF
  69.    
  70.     sudo systemctl restart postgresql
  71. fi
  72. # 配置防火墙
  73. sudo firewall-cmd --permanent --add-service=${DB_TYPE}
  74. sudo firewall-cmd --reload
  75. echo "Database deployment completed successfully!"
复制代码

使用Prometheus和Grafana实现自动化监控与报警:
  1. # 安装Prometheus
  2. sudo dnf install -y prometheus
  3. sudo systemctl start prometheus
  4. sudo systemctl enable prometheus
  5. # 安装Grafana
  6. sudo dnf install -y grafana
  7. sudo systemctl start grafana
  8. sudo systemctl enable grafana
  9. # 安装MySQL/MariaDB Exporter
  10. sudo dnf install -y mariadb-exporter
  11. sudo systemctl start mariadb-exporter
  12. sudo systemctl enable mariadb-exporter
  13. # 安装PostgreSQL Exporter
  14. sudo dnf install -y postgresql-exporter
  15. sudo systemctl start postgresql-exporter
  16. sudo systemctl enable postgresql-exporter
  17. # 配置Prometheus采集数据
  18. sudo tee /etc/prometheus/prometheus.yml > /dev/null <<EOF
  19. global:
  20.   scrape_interval: 15s
  21. scrape_configs:
  22.   - job_name: 'prometheus'
  23.     static_configs:
  24.       - targets: ['localhost:9090']
  25.   - job_name: 'mariadb'
  26.     static_configs:
  27.       - targets: ['localhost:9104']
  28.   - job_name: 'postgresql'
  29.     static_configs:
  30.       - targets: ['localhost:9187']
  31. EOF
  32. sudo systemctl restart prometheus
复制代码

访问Grafana Web界面(http://localhost:3000),添加Prometheus数据源,并导入数据库监控仪表板。

创建自动化扩展与收缩脚本:
  1. #!/bin/bash
  2. # 数据库自动化扩展与收缩脚本
  3. # 设置变量
  4. DB_TYPE="mariadb"  # 或 "postgresql"
  5. CPU_THRESHOLD=80
  6. MEMORY_THRESHOLD=80
  7. DISK_THRESHOLD=80
  8. CONNECTION_THRESHOLD=80
  9. SCALE_UP_THRESHOLD=3
  10. SCALE_DOWN_THRESHOLD=1
  11. CHECK_INTERVAL=60
  12. # 获取系统指标
  13. get_system_metrics() {
  14.     CPU_USAGE=$(top -bn1 | grep "Cpu(s)" | sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | awk '{print 100 - $1}')
  15.     MEMORY_USAGE=$(free | grep Mem | awk '{print $3/$2 * 100.0}')
  16.     DISK_USAGE=$(df -h / | awk 'NR==2{print $5}' | sed 's/%//')
  17.    
  18.     if [ "$DB_TYPE" == "mariadb" ]; then
  19.         MAX_CONNECTIONS=$(mysql -u root -p$ROOT_PASSWORD -e "SHOW VARIABLES LIKE 'max_connections';" | awk 'NR==2{print $2}')
  20.         THREADS_CONNECTED=$(mysql -u root -p$ROOT_PASSWORD -e "SHOW STATUS LIKE 'Threads_connected';" | awk 'NR==2{print $2}')
  21.         CONNECTION_USAGE=$(echo "scale=2; $THREADS_CONNECTED * 100 / $MAX_CONNECTIONS" | bc)
  22.     elif [ "$DB_TYPE" == "postgresql" ]; then
  23.         MAX_CONNECTIONS=$(sudo -u postgres psql -t -c "SHOW max_connections;")
  24.         THREADS_CONNECTED=$(sudo -u postgres psql -t -c "SELECT count(*) FROM pg_stat_activity;")
  25.         CONNECTION_USAGE=$(echo "scale=2; $THREADS_CONNECTED * 100 / $MAX_CONNECTIONS" | bc)
  26.     fi
  27.    
  28.     echo "CPU: $CPU_USAGE%, Memory: $MEMORY_USAGE%, Disk: $DISK_USAGE%, Connections: $CONNECTION_USAGE%"
  29. }
  30. # 扩展数据库服务器
  31. scale_up() {
  32.     echo "Scaling up database server..."
  33.    
  34.     # 这里可以添加自动扩展的逻辑,例如:
  35.     # 1. 增加服务器资源(CPU、内存)
  36.     # 2. 启动只读副本
  37.     # 3. 调整数据库配置参数
  38.    
  39.     if [ "$DB_TYPE" == "mariadb" ]; then
  40.         # 增加最大连接数
  41.         NEW_MAX_CONNECTIONS=$(echo "$MAX_CONNECTIONS * 1.5 / 1" | bc)
  42.         mysql -u root -p$ROOT_PASSWORD -e "SET GLOBAL max_connections = $NEW_MAX_CONNECTIONS;"
  43.         echo "Increased max_connections to $NEW_MAX_CONNECTIONS"
  44.     elif [ "$DB_TYPE" == "postgresql" ]; then
  45.         # 增加最大连接数
  46.         NEW_MAX_CONNECTIONS=$(echo "$MAX_CONNECTIONS * 1.5 / 1" | bc)
  47.         sudo -u postgres psql -c "ALTER SYSTEM SET max_connections = $NEW_MAX_CONNECTIONS;"
  48.         sudo systemctl restart postgresql
  49.         echo "Increased max_connections to $NEW_MAX_CONNECTIONS"
  50.     fi
  51.    
  52.     # 发送通知
  53.     echo "Database server scaled up at $(date)" | mailx -s "Database Scale Up Alert" admin@example.com
  54. }
  55. # 收缩数据库服务器
  56. scale_down() {
  57.     echo "Scaling down database server..."
  58.    
  59.     # 这里可以添加自动收缩的逻辑,例如:
  60.     # 1. 减少服务器资源
  61.     # 2. 关闭只读副本
  62.     # 3. 调整数据库配置参数
  63.    
  64.     if [ "$DB_TYPE" == "mariadb" ]; then
  65.         # 减少最大连接数
  66.         NEW_MAX_CONNECTIONS=$(echo "$MAX_CONNECTIONS * 0.7 / 1" | bc)
  67.         mysql -u root -p$ROOT_PASSWORD -e "SET GLOBAL max_connections = $NEW_MAX_CONNECTIONS;"
  68.         echo "Decreased max_connections to $NEW_MAX_CONNECTIONS"
  69.     elif [ "$DB_TYPE" == "postgresql" ]; then
  70.         # 减少最大连接数
  71.         NEW_MAX_CONNECTIONS=$(echo "$MAX_CONNECTIONS * 0.7 / 1" | bc)
  72.         sudo -u postgres psql -c "ALTER SYSTEM SET max_connections = $NEW_MAX_CONNECTIONS;"
  73.         sudo systemctl restart postgresql
  74.         echo "Decreased max_connections to $NEW_MAX_CONNECTIONS"
  75.     fi
  76.    
  77.     # 发送通知
  78.     echo "Database server scaled down at $(date)" | mailx -s "Database Scale Down Alert" admin@example.com
  79. }
  80. # 主循环
  81. while true; do
  82.     get_system_metrics
  83.    
  84.     # 检查是否需要扩展
  85.     if (( $(echo "$CPU_USAGE > $CPU_THRESHOLD" | bc -l) )) || \
  86.        (( $(echo "$MEMORY_USAGE > $MEMORY_THRESHOLD" | bc -l) )) || \
  87.        [ "$DISK_USAGE" -gt "$DISK_THRESHOLD" ] || \
  88.        (( $(echo "$CONNECTION_USAGE > $CONNECTION_THRESHOLD" | bc -l) )); then
  89.         SCALE_UP_COUNTER=$((SCALE_UP_COUNTER + 1))
  90.         SCALE_DOWN_COUNTER=0
  91.         
  92.         if [ "$SCALE_UP_COUNTER" -ge "$SCALE_UP_THRESHOLD" ]; then
  93.             scale_up
  94.             SCALE_UP_COUNTER=0
  95.         fi
  96.     else
  97.         SCALE_UP_COUNTER=0
  98.         SCALE_DOWN_COUNTER=$((SCALE_DOWN_COUNTER + 1))
  99.         
  100.         if [ "$SCALE_DOWN_COUNTER" -ge "$SCALE_DOWN_THRESHOLD" ]; then
  101.             scale_down
  102.             SCALE_DOWN_COUNTER=0
  103.         fi
  104.     fi
  105.    
  106.     sleep $CHECK_INTERVAL
  107. done
复制代码

10. 总结

本文全面解析了Fedora系统数据库配置流程与管理最佳实践,涵盖了MySQL/MariaDB和PostgreSQL两大主流关系型数据库的安装、配置、安全、性能优化、备份恢复、日常管理、监控与故障排除以及高级配置技巧等方面。

通过遵循本文提供的最佳实践,您可以:

1. 在Fedora系统上高效安装和配置数据库服务器
2. 实施严格的安全措施保护数据库
3. 优化数据库性能以满足高并发需求
4. 建立可靠的备份与恢复机制
5. 实现有效的监控与故障排除
6. 采用高级配置技巧进一步提升数据库性能和可靠性

数据库管理是一个持续优化的过程,需要根据实际工作负载和业务需求不断调整配置和策略。希望本文提供的知识和实践能够帮助您在Fedora系统上构建稳定、高效、安全的数据库环境。
「七転び八起き(ななころびやおき)」
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则