活动公告

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

在CentOS系统上从零开始搭建数据库服务的详细步骤包含环境配置安装过程安全设置及性能优化

SunJu_FaceMall

3万

主题

3148

科技点

3万

积分

执行版主

碾压王

积分
32876

塔罗立华奏

执行版主 发表于 2025-9-8 09:10:00 | 显示全部楼层 |阅读模式

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

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

x
引言

数据库服务是现代应用架构中不可或缺的组成部分,它负责存储、管理和检索数据。在CentOS系统上搭建一个安全、高效的数据库服务需要经过多个步骤,包括环境准备、软件安装、安全配置和性能优化。本文将详细介绍在CentOS系统上从零开始搭建数据库服务的完整流程,帮助您建立一个稳定、安全且高性能的数据库环境。

1. 环境配置

1.1 系统要求与准备

在开始安装数据库服务之前,我们需要确保系统满足最低要求,并进行必要的准备工作。

数据库服务对硬件有一定要求,具体取决于预期的负载和数据量。以下是一般建议的最低配置:

• CPU:至少2核
• 内存:至少4GB RAM(推荐8GB或更多)
• 硬盘空间:至少50GB可用空间(根据数据量调整)
• 网络:稳定的网络连接

本文以CentOS 7/8为例进行说明,确保您的系统是最新版本:
  1. # 检查CentOS版本
  2. cat /etc/redhat-release
  3. # 更新系统到最新版本
  4. sudo yum update -y
复制代码

1.2 系统更新与基础配置

保持系统最新是确保安全性和稳定性的重要步骤:
  1. # 更新所有已安装的软件包
  2. sudo yum update -y
  3. # 安装常用工具
  4. sudo yum install -y wget vim curl net-tools
复制代码

设置一个合适的主机名有助于识别和管理服务器:
  1. # 查看当前主机名
  2. hostname
  3. # 设置新的主机名(例如:dbserver.example.com)
  4. sudo hostnamectl set-hostname dbserver.example.com
  5. # 验证主机名更改
  6. hostname
复制代码

数据库服务对时间准确性要求较高,需要配置NTP服务:
  1. # 安装NTP服务
  2. sudo yum install -y ntp
  3. # 启动并启用NTP服务
  4. sudo systemctl start ntpd
  5. sudo systemctl enable ntpd
  6. # 检查NTP服务状态
  7. sudo systemctl status ntpd
  8. # 验证时间同步
  9. ntpq -p
复制代码

1.3 防火墙配置

防火墙是保护数据库服务的第一道防线,需要正确配置以允许必要的流量。
  1. # 安装firewalld(如果尚未安装)
  2. sudo yum install -y firewalld
  3. # 启动并启用防火墙
  4. sudo systemctl start firewalld
  5. sudo systemctl enable firewalld
  6. # 检查防火墙状态
  7. sudo systemctl status firewalld
复制代码

根据您选择的数据库类型,需要开放相应的端口。以下是常见数据库的默认端口:

• MySQL/MariaDB:3306
• PostgreSQL:5432
• MongoDB:27017

以MySQL为例:
  1. # 开放MySQL端口
  2. sudo firewall-cmd --permanent --add-port=3306/tcp
  3. # 重新加载防火墙配置
  4. sudo firewall-cmd --reload
  5. # 验证端口是否已开放
  6. sudo firewall-cmd --list-ports
复制代码

1.4 SELinux配置

SELinux(Security-Enhanced Linux)提供了额外的安全层,但可能需要调整以允许数据库服务正常运行。
  1. # 检查SELinux当前状态
  2. getenforce
复制代码

如果SELinux处于 enforcing 模式,可能需要为数据库服务设置适当的策略:
  1. # 临时将SELinux设置为permissive模式(用于测试)
  2. sudo setenforce 0
  3. # 永久设置SELinux模式(编辑/etc/selinux/config文件)
  4. sudo vim /etc/selinux/config
  5. # 将SELINUX=enforcing改为SELINUX=permissive或SELINUX=disabled
  6. # 安装SELinux管理工具
  7. sudo yum install -y policycoreutils-python
  8. # 为MySQL设置SELinux策略(以MySQL为例)
  9. sudo semanage port -a -t mysqld_port_t -p tcp 3306
复制代码

1.5 创建专用用户和组

为了安全起见,应该为数据库服务创建专用的用户和组,而不是使用root账户运行数据库服务。
  1. # 创建数据库用户组
  2. sudo groupadd -r dbgroup
  3. # 创建数据库用户
  4. sudo useradd -r -g dbgroup -s /bin/false dbuser
  5. # 验证用户和组是否创建成功
  6. id dbuser
复制代码

1.6 配置文件系统

数据库服务通常需要特定的文件系统配置以获得最佳性能。
  1. # 创建数据库数据目录
  2. sudo mkdir -p /data/mysql
  3. # 设置目录所有权
  4. sudo chown -R dbuser:dbgroup /data/mysql
  5. # 设置目录权限
  6. sudo chmod -R 750 /data/mysql
复制代码

编辑/etc/fstab文件,为数据库数据分区添加noatime和nodiratime选项,以减少不必要的磁盘写入:
  1. # 备份fstab文件
  2. sudo cp /etc/fstab /etc/fstab.bak
  3. # 编辑fstab文件
  4. sudo vim /etc/fstab
  5. # 找到数据分区的行,将defaults改为defaults,noatime,nodiratime
  6. # 例如:UUID=xxxx-xxxx /data ext4 defaults,noatime,nodiratime 0 0
  7. # 重新挂载所有文件系统
  8. sudo mount -o remount /
复制代码

编辑/etc/sysctl.conf文件,添加以下参数以优化数据库性能:
  1. # 备份sysctl.conf文件
  2. sudo cp /etc/sysctl.conf /etc/sysctl.conf.bak
  3. # 编辑sysctl.conf文件
  4. sudo vim /etc/sysctl.conf
  5. # 添加以下参数
  6. # 增加文件句柄限制
  7. fs.file-max = 65535
  8. # 增加网络参数
  9. net.core.rmem_max = 16777216
  10. net.core.wmem_max = 16777216
  11. net.ipv4.tcp_rmem = 4096 87380 16777216
  12. net.ipv4.tcp_wmem = 4096 65536 16777216
  13. net.ipv4.tcp_fin_timeout = 30
  14. net.core.netdev_max_backlog = 30000
  15. # 应用新的内核参数
  16. sudo sysctl -p
复制代码

2. 安装过程

2.1 选择数据库类型

在安装数据库之前,需要根据应用需求选择合适的数据库类型。常见的开源数据库包括:

• MySQL/MariaDB:适用于大多数Web应用
• PostgreSQL:适用于复杂查询和事务处理
• MongoDB:适用于文档存储和大数据应用

本文将以MySQL/MariaDB为例进行说明,因为它是目前最流行的开源关系型数据库之一。

2.2 添加软件仓库

CentOS默认仓库中的数据库版本可能较旧,建议使用官方仓库或第三方仓库获取最新版本。
  1. # 下载并安装MySQL官方仓库
  2. wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
  3. sudo rpm -ivh mysql80-community-release-el7-3.noarch.rpm
  4. # 验证仓库是否添加成功
  5. yum repolist enabled | grep "mysql.*-community.*"
复制代码

如果选择MariaDB:
  1. # 创建MariaDB仓库文件
  2. sudo vim /etc/yum.repos.d/MariaDB.repo
  3. # 添加以下内容
  4. [mariadb]
  5. name = MariaDB
  6. baseurl = http://yum.mariadb.org/10.5/centos7-amd64
  7. gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
  8. gpgcheck=1
  9. # 清除缓存并更新
  10. sudo yum clean all
  11. sudo yum makecache
复制代码

2.3 安装数据库软件
  1. # 安装MySQL服务器
  2. sudo yum install -y mysql-community-server
  3. # 验证安装
  4. rpm -qa | grep mysql
复制代码
  1. # 安装MariaDB服务器
  2. sudo yum install -y MariaDB-server MariaDB-client
  3. # 验证安装
  4. rpm -qa | grep MariaDB
复制代码

2.4 初始化数据库
  1. # 启动MySQL服务
  2. sudo systemctl start mysqld
  3. # 启用MySQL服务开机自启
  4. sudo systemctl enable mysqld
  5. # 获取临时root密码
  6. sudo grep 'temporary password' /var/log/mysqld.log
  7. # 运行安全安装脚本
  8. sudo mysql_secure_installation
复制代码
  1. # 启动MariaDB服务
  2. sudo systemctl start mariadb
  3. # 启用MariaDB服务开机自启
  4. sudo systemctl enable mariadb
  5. # 运行安全安装脚本
  6. sudo mysql_secure_installation
复制代码

2.5 配置数据库
  1. # 备份原始配置文件
  2. sudo cp /etc/my.cnf /etc/my.cnf.bak
  3. # 编辑MySQL配置文件
  4. sudo vim /etc/my.cnf
  5. # 添加以下配置
  6. [mysqld]
  7. # 设置数据目录
  8. datadir=/data/mysql
  9. socket=/var/lib/mysql/mysql.sock
  10. # 设置字符集
  11. character-set-server=utf8mb4
  12. collation-server=utf8mb4_unicode_ci
  13. # 设置默认存储引擎
  14. default-storage-engine=InnoDB
  15. # 设置InnoDB参数
  16. innodb_buffer_pool_size=2G
  17. innodb_log_file_size=256M
  18. innodb_log_buffer_size=8M
  19. innodb_flush_log_at_trx_commit=2
  20. innodb_file_per_table=1
  21. # 设置连接参数
  22. max_connections=200
  23. max_connect_errors=100000
  24. connect_timeout=10
  25. wait_timeout=28800
  26. interactive_timeout=28800
  27. # 设置日志
  28. slow_query_log=1
  29. slow_query_log_file=/var/log/mysql/slow.log
  30. long_query_time=2
  31. log_error=/var/log/mysql/error.log
  32. # 重启MySQL服务以应用新配置
  33. sudo systemctl restart mysqld
复制代码
  1. # 创建日志目录
  2. sudo mkdir -p /var/log/mysql
  3. # 设置目录所有权
  4. sudo chown -R mysql:mysql /var/log/mysql
  5. # 设置目录权限
  6. sudo chmod -R 755 /var/log/mysql
复制代码

2.6 验证安装
  1. # 检查数据库服务状态
  2. sudo systemctl status mysqld
  3. # 连接到数据库
  4. mysql -u root -p
  5. # 在MySQL shell中执行以下命令
  6. SHOW VARIABLES LIKE 'version';
  7. SHOW VARIABLES LIKE 'datadir';
  8. CREATE DATABASE testdb;
  9. SHOW DATABASES;
  10. EXIT;
复制代码

3. 安全设置

3.1 基本安全配置
  1. # 运行MySQL安全安装脚本
  2. sudo mysql_secure_installation
  3. # 按照提示进行以下操作:
  4. # 1. 设置root密码
  5. # 2. 移除匿名用户
  6. # 3. 禁止root远程登录
  7. # 4. 移除测试数据库
  8. # 5. 重新加载权限表
复制代码
  1. # 登录MySQL
  2. mysql -u root -p
  3. # 修改root用户名(增加安全性)
  4. RENAME USER 'root'@'localhost' TO 'admin'@'localhost';
  5. # 创建新的root用户(仅限本地访问)
  6. CREATE USER 'root'@'localhost' IDENTIFIED BY 'strong_password';
  7. GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION;
  8. # 刷新权限
  9. FLUSH PRIVILEGES;
  10. # 退出MySQL
  11. EXIT;
复制代码

3.2 用户权限管理
  1. # 登录MySQL
  2. mysql -u root -p
  3. # 创建新用户
  4. CREATE USER 'appuser'@'localhost' IDENTIFIED BY 'user_password';
  5. # 创建数据库
  6. CREATE DATABASE appdb;
  7. # 授予用户对数据库的权限
  8. GRANT ALL PRIVILEGES ON appdb.* TO 'appuser'@'localhost';
  9. # 刷新权限
  10. FLUSH PRIVILEGES;
  11. # 退出MySQL
  12. EXIT;
复制代码
  1. # 登录MySQL
  2. mysql -u root -p
  3. # 创建只读用户
  4. CREATE USER 'readonly'@'%' IDENTIFIED BY 'readonly_password';
  5. GRANT SELECT ON appdb.* TO 'readonly'@'%';
  6. # 创建读写用户
  7. CREATE USER 'readwrite'@'%' IDENTIFIED BY 'readwrite_password';
  8. GRANT SELECT, INSERT, UPDATE, DELETE ON appdb.* TO 'readwrite'@'%';
  9. # 刷新权限
  10. FLUSH PRIVILEGES;
  11. # 退出MySQL
  12. EXIT;
复制代码

3.3 网络访问控制
  1. # 登录MySQL
  2. mysql -u root -p
  3. # 查看当前用户和主机
  4. SELECT user, host FROM mysql.user;
  5. # 删除允许从任何主机访问的用户
  6. DELETE FROM mysql.user WHERE user = '' OR (user = 'root' AND host NOT IN ('localhost', '127.0.0.1', '::1'));
  7. # 刷新权限
  8. FLUSH PRIVILEGES;
  9. # 退出MySQL
  10. EXIT;
复制代码
  1. # 备份原始配置文件
  2. sudo cp /etc/my.cnf /etc/my.cnf.bak
  3. # 编辑MySQL配置文件
  4. sudo vim /etc/my.cnf
  5. # 添加以下配置
  6. [mysqld]
  7. # 只监听本地接口(禁止远程访问)
  8. # bind-address = 127.0.0.1
  9. # 或者监听特定IP地址(允许特定网络访问)
  10. # bind-address = 192.168.1.100
  11. # 如果需要从多个IP访问,可以注释掉bind-address
  12. # bind-address = 0.0.0.0
  13. # 重启MySQL服务
  14. sudo systemctl restart mysqld
复制代码

如果需要从远程安全地访问数据库,建议使用SSH隧道而不是直接暴露数据库端口:
  1. # 从本地机器建立SSH隧道
  2. ssh -L 3306:localhost:3306 user@dbserver.example.com
  3. # 然后可以通过本地端口连接到远程数据库
  4. mysql -h 127.0.0.1 -u appuser -p
复制代码

3.4 加密设置
  1. # 登录MySQL
  2. mysql -u root -p
  3. # 检查SSL状态
  4. SHOW VARIABLES LIKE '%ssl%';
  5. # 如果SSL未启用,生成SSL证书(在系统shell中)
  6. sudo mkdir /etc/mysql/ssl
  7. sudo chown -R mysql:mysql /etc/mysql/ssl
  8. cd /etc/mysql/ssl
  9. # 生成CA证书
  10. sudo openssl genrsa 2048 > ca-key.pem
  11. sudo openssl req -new -x509 -nodes -days 3650 -key ca-key.pem -out ca.pem
  12. # 生成服务器证书
  13. sudo openssl req -newkey rsa:2048 -days 3650 -nodes -keyout server-key.pem -out server-req.pem
  14. sudo openssl rsa -in server-key.pem -out server-key.pem
  15. sudo openssl x509 -req -in server-req.pem -days 3650 -CA ca.pem -CAkey ca-key.pem -set_serial 01 -out server-cert.pem
  16. # 生成客户端证书
  17. sudo openssl req -newkey rsa:2048 -days 3650 -nodes -keyout client-key.pem -out client-req.pem
  18. sudo openssl rsa -in client-key.pem -out client-key.pem
  19. sudo openssl x509 -req -in client-req.pem -days 3650 -CA ca.pem -CAkey ca-key.pem -set_serial 01 -out client-cert.pem
  20. # 设置证书权限
  21. sudo chown mysql:mysql *.pem
  22. sudo chmod 600 *.pem
  23. # 编辑MySQL配置文件
  24. sudo vim /etc/my.cnf
  25. # 添加以下配置
  26. [mysqld]
  27. ssl-ca=/etc/mysql/ssl/ca.pem
  28. ssl-cert=/etc/mysql/ssl/server-cert.pem
  29. ssl-key=/etc/mysql/ssl/server-key.pem
  30. # 重启MySQL服务
  31. sudo systemctl restart mysqld
  32. # 验证SSL是否启用
  33. mysql -u root -p
  34. SHOW VARIABLES LIKE '%ssl%';
复制代码
  1. # 登录MySQL
  2. mysql -u root -p
  3. # 创建需要SSL连接的用户
  4. CREATE USER 'secureuser'@'%' IDENTIFIED BY 'secure_password' REQUIRE SSL;
  5. # 修改现有用户要求SSL
  6. ALTER USER 'appuser'@'%' REQUIRE SSL;
  7. # 刷新权限
  8. FLUSH PRIVILEGES;
  9. # 退出MySQL
  10. EXIT;
复制代码

3.5 备份策略
  1. # 创建备份目录
  2. sudo mkdir -p /backup/mysql
  3. sudo chown -R mysql:mysql /backup/mysql
  4. sudo chmod -R 750 /backup/mysql
  5. # 创建备份脚本
  6. sudo vim /usr/local/bin/mysql_backup.sh
  7. # 添加以下内容
  8. #!/bin/bash
  9. # 设置变量
  10. DATE=$(date +%Y%m%d_%H%M%S)
  11. BACKUP_DIR="/backup/mysql"
  12. MYSQL_USER="root"
  13. MYSQL_PASSWORD="your_root_password"
  14. RETENTION_DAYS=30
  15. # 创建备份
  16. mysqldump --user=$MYSQL_USER --password=$MYSQL_PASSWORD --all-databases --single-transaction --routines --triggers | gzip > $BACKUP_DIR/mysql_backup_$DATE.sql.gz
  17. # 删除旧备份
  18. find $BACKUP_DIR -name "mysql_backup_*.sql.gz" -type f -mtime +$RETENTION_DAYS -delete
  19. # 记录备份状态
  20. if [ $? -eq 0 ]; then
  21.     echo "Backup successful: $DATE" >> $BACKUP_DIR/backup.log
  22. else
  23.     echo "Backup failed: $DATE" >> $BACKUP_DIR/backup.log
  24. fi
  25. # 设置脚本可执行权限
  26. sudo chmod +x /usr/local/bin/mysql_backup.sh
  27. # 添加到crontab以实现自动备份
  28. sudo crontab -e
  29. # 添加以下行以每天凌晨2点执行备份
  30. 0 2 * * * /usr/local/bin/mysql_backup.sh
复制代码
  1. # 安装rsync(如果尚未安装)
  2. sudo yum install -y rsync
  3. # 创建远程备份脚本
  4. sudo vim /usr/local/bin/mysql_remote_backup.sh
  5. # 添加以下内容
  6. #!/bin/bash
  7. # 设置变量
  8. DATE=$(date +%Y%m%d_%H%M%S)
  9. BACKUP_DIR="/backup/mysql"
  10. REMOTE_USER="backupuser"
  11. REMOTE_HOST="backup.example.com"
  12. REMOTE_DIR="/remote/backups/mysql"
  13. SSH_KEY="/home/backupuser/.ssh/id_rsa"
  14. # 创建本地备份
  15. /usr/local/bin/mysql_backup.sh
  16. # 同步到远程服务器
  17. rsync -avz -e "ssh -i $SSH_KEY" $BACKUP_DIR/ $REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR/
  18. # 记录远程备份状态
  19. if [ $? -eq 0 ]; then
  20.     echo "Remote backup successful: $DATE" >> $BACKUP_DIR/remote_backup.log
  21. else
  22.     echo "Remote backup failed: $DATE" >> $BACKUP_DIR/remote_backup.log
  23. fi
  24. # 设置脚本可执行权限
  25. sudo chmod +x /usr/local/bin/mysql_remote_backup.sh
  26. # 设置SSH无密码登录
  27. sudo su - backupuser
  28. ssh-keygen -t rsa
  29. ssh-copy-id -i ~/.ssh/id_rsa.pub backupuser@backup.example.com
  30. exit
复制代码

4. 性能优化

4.1 内存配置

InnoDB缓冲池是MySQL最重要的内存设置,应该尽可能分配更多内存,但不要超过系统总内存的70-80%。
  1. # 编辑MySQL配置文件
  2. sudo vim /etc/my.cnf
  3. # 添加以下配置
  4. [mysqld]
  5. # 设置InnoDB缓冲池大小(根据系统内存调整)
  6. innodb_buffer_pool_size=4G
  7. # 对于大型系统,可以设置多个实例以提高性能
  8. innodb_buffer_pool_instances=4
  9. # 重启MySQL服务
  10. sudo systemctl restart mysqld
复制代码
  1. # 编辑MySQL配置文件
  2. sudo vim /etc/my.cnf
  3. # 添加以下配置
  4. [mysqld]
  5. # 设置查询缓存(MySQL 8.0已移除此功能)
  6. # query_cache_type=1
  7. # query_cache_size=128M
  8. # query_cache_limit=2M
  9. # 设置排序缓冲区
  10. sort_buffer_size=4M
  11. # 设置连接缓冲区
  12. join_buffer_size=4M
  13. # 设置表缓存
  14. table_open_cache=2000
  15. # 设置线程缓存
  16. thread_cache_size=16
  17. # 设置临时表
  18. tmp_table_size=64M
  19. max_heap_table_size=64M
  20. # 重启MySQL服务
  21. sudo systemctl restart mysqld
复制代码

4.2 磁盘I/O优化
  1. # 编辑MySQL配置文件
  2. sudo vim /etc/my.cnf
  3. # 添加以下配置
  4. [mysqld]
  5. # 设置InnoDB日志文件大小
  6. innodb_log_file_size=512M
  7. # 设置InnoDB日志缓冲区大小
  8. innodb_log_buffer_size=16M
  9. # 设置InnoDB刷新方法(O_DIRECT适用于大多数现代系统)
  10. innodb_flush_method=O_DIRECT
  11. # 设置InnoDB双写缓冲
  12. innodb_doublewrite=1
  13. # 设置InnoDB I/O容量
  14. innodb_io_capacity=2000
  15. innodb_io_capacity_max=4000
  16. # 重启MySQL服务
  17. sudo systemctl restart mysqld
复制代码
  1. # 创建数据目录(假设/dev/sdb是独立磁盘)
  2. sudo mkfs -t ext4 /dev/sdb
  3. sudo mkdir /data/mysql
  4. sudo mount /dev/sdb /data/mysql
  5. # 添加到/etc/fstab以实现自动挂载
  6. sudo vim /etc/fstab
  7. # 添加以下行
  8. /dev/sdb /data/mysql ext4 defaults,noatime,nodiratime 0 0
  9. # 设置所有权和权限
  10. sudo chown -R mysql:mysql /data/mysql
  11. sudo chmod -R 750 /data/mysql
  12. # 编辑MySQL配置文件
  13. sudo vim /etc/my.cnf
  14. # 修改数据目录
  15. [mysqld]
  16. datadir=/data/mysql
  17. # 重启MySQL服务
  18. sudo systemctl restart mysqld
复制代码

对于生产环境,建议使用RAID提高磁盘性能和可靠性。以下是配置RAID 10的示例:
  1. # 安装mdadm
  2. sudo yum install -y mdadm
  3. # 创建RAID 10阵列(假设有4块磁盘:/dev/sdb, /dev/sdc, /dev/sdd, /dev/sde)
  4. sudo mdadm --create --verbose /dev/md0 --level=10 --raid-devices=4 /dev/sdb /dev/sdc /dev/sdd /dev/sde
  5. # 创建文件系统
  6. sudo mkfs -t ext4 /dev/md0
  7. # 挂载RAID设备
  8. sudo mkdir /data/mysql
  9. sudo mount /dev/md0 /data/mysql
  10. # 添加到/etc/fstab以实现自动挂载
  11. sudo vim /etc/fstab
  12. # 添加以下行
  13. /dev/md0 /data/mysql ext4 defaults,noatime,nodiratime 0 0
  14. # 设置所有权和权限
  15. sudo chown -R mysql:mysql /data/mysql
  16. sudo chmod -R 750 /data/mysql
  17. # 保存RAID配置
  18. sudo mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf
  19. # 重启MySQL服务
  20. sudo systemctl restart mysqld
复制代码

4.3 连接优化
  1. # 编辑MySQL配置文件
  2. sudo vim /etc/my.cnf
  3. # 添加以下配置
  4. [mysqld]
  5. # 设置最大连接数
  6. max_connections=500
  7. # 设置最大连接错误数
  8. max_connect_errors=100000
  9. # 设置连接超时
  10. connect_timeout=10
  11. # 设置等待超时
  12. wait_timeout=28800
  13. interactive_timeout=28800
  14. # 设置最大允许数据包
  15. max_allowed_packet=64M
  16. # 重启MySQL服务
  17. sudo systemctl restart mysqld
复制代码

对于高并发应用,可以考虑使用连接池。以下是使用ProxySQL作为连接池的示例:
  1. # 添加ProxySQL仓库
  2. sudo yum install -y https://repo.proxysql.com/ProxySQL/proxysql-2.0.x/proxysql-2.0.15-1-centos7.x86_64.rpm
  3. # 启动ProxySQL服务
  4. sudo systemctl start proxysql
  5. # 启用ProxySQL服务开机自启
  6. sudo systemctl enable proxysql
  7. # 连接到ProxySQL管理界面
  8. mysql -u admin -padmin -h 127.0.0.1 -P 6032
  9. # 添加MySQL服务器到ProxySQL
  10. INSERT INTO mysql_servers (hostgroup_id, hostname, port) VALUES (1, '127.0.0.1', 3306);
  11. # 添加监控用户
  12. INSERT INTO mysql_users (username, password, default_hostgroup) VALUES ('monitor', 'monitor_password', 1);
  13. # 添加应用用户
  14. INSERT INTO mysql_users (username, password, default_hostgroup) VALUES ('appuser', 'user_password', 1);
  15. # 加载配置到运行时
  16. LOAD MYSQL SERVERS TO RUNTIME;
  17. LOAD MYSQL USERS TO RUNTIME;
  18. # 保存配置到磁盘
  19. SAVE MYSQL SERVERS TO DISK;
  20. SAVE MYSQL USERS TO DISK;
  21. # 退出
  22. EXIT;
复制代码

4.4 查询优化
  1. # 创建日志目录(如果不存在)
  2. sudo mkdir -p /var/log/mysql
  3. sudo chown -R mysql:mysql /var/log/mysql
  4. sudo chmod -R 750 /var/log/mysql
  5. # 编辑MySQL配置文件
  6. sudo vim /etc/my.cnf
  7. # 添加以下配置
  8. [mysqld]
  9. # 启用慢查询日志
  10. slow_query_log=1
  11. slow_query_log_file=/var/log/mysql/slow.log
  12. long_query_time=2
  13. # 启用未使用索引的查询日志
  14. log_queries_not_using_indexes=1
  15. # 重启MySQL服务
  16. sudo systemctl restart mysqld
复制代码
  1. # 安装mysqldumpslow工具(通常包含在MySQL客户端包中)
  2. sudo yum install -y mysql-community-client
  3. # 分析慢查询日志
  4. sudo mysqldumpslow -s t /var/log/mysql/slow.log
  5. # 或者使用pt-query-digest工具(需要安装percona-toolkit)
  6. sudo yum install -y https://repo.percona.com/yum/release/7/RPMS/x86_64/percona-toolkit-3.0.13-1.el7.x86_64.rpm
  7. # 分析慢查询日志
  8. pt-query-digest /var/log/mysql/slow.log
复制代码
  1. # 登录MySQL
  2. mysql -u root -p
  3. # 使用EXPLAIN分析查询执行计划
  4. EXPLAIN SELECT * FROM users WHERE email = 'user@example.com';
  5. # 创建适当的索引
  6. CREATE INDEX idx_users_email ON users(email);
  7. # 分析表以更新索引统计信息
  8. ANALYZE TABLE users;
  9. # 优化表
  10. OPTIMIZE TABLE users;
  11. # 退出MySQL
  12. EXIT;
复制代码

4.5 监控与调优
  1. # 安装Percona Monitoring and Management (PMM) 客户端
  2. sudo yum install -y https://repo.percona.com/yum/release/7/RPMS/x86_64/pmm-client-2.17.0-1.el7.x86_64.rpm
  3. # 配置PMM客户端
  4. sudo pmm-client setup --server=pmm-server.example.com --insecure-ssl
  5. # 启用MySQL监控
  6. sudo pmm-admin add mysql --username=pmm --password=pmm_password
复制代码
  1. # 安装sysstat包(包含sar等工具)
  2. sudo yum install -y sysstat
  3. # 启用sysstat服务
  4. sudo systemctl enable sysstat
  5. sudo systemctl start sysstat
  6. # 配置收集间隔
  7. sudo vim /etc/sysconfig/sysstat
  8. # 修改以下行
  9. HISTORY=7
  10. SADC_OPTIONS="-S DISK"
  11. # 重启sysstat服务
  12. sudo systemctl restart sysstat
  13. # 查看系统资源使用情况
  14. sar -u 1 5  # CPU使用率
  15. sar -r 1 5  # 内存使用情况
  16. sar -b 1 5  # I/O传输率
复制代码
  1. # 登录MySQL
  2. mysql -u root -p
  3. # 检查性能模式是否启用
  4. SHOW VARIABLES LIKE 'performance_schema';
  5. # 如果未启用,编辑MySQL配置文件
  6. # sudo vim /etc/my.cnf
  7. # [mysqld]
  8. # performance_schema=ON
  9. # 重启MySQL服务
  10. # sudo systemctl restart mysqld
  11. # 查看性能模式配置
  12. SELECT * FROM performance_schema.setup_instruments;
  13. # 启用特定监控点
  14. UPDATE performance_schema.setup_instruments SET ENABLED = 'YES', TIMED = 'YES' WHERE NAME LIKE 'statement/%';
  15. # 查看查询统计
  16. SELECT * FROM performance_schema.events_statements_summary_by_digest ORDER BY SUM_TIMER_WAIT DESC LIMIT 10;
  17. # 退出MySQL
  18. EXIT;
复制代码

5. 总结

在CentOS系统上从零开始搭建数据库服务是一个复杂但重要的任务。通过本文的详细介绍,您应该已经了解了从环境配置、安装过程、安全设置到性能优化的完整流程。以下是关键步骤的总结:

1. 环境配置:确保系统满足硬件要求,更新系统,配置防火墙和SELinux,创建专用用户和组,以及优化文件系统。
2. 安装过程:选择合适的数据库类型,添加软件仓库,安装数据库软件,初始化数据库,并进行基本配置。
3. 安全设置:运行安全安装脚本,管理用户权限,限制网络访问,启用加密,以及设置备份策略。
4. 性能优化:配置内存参数,优化磁盘I/O,调整连接设置,优化查询,以及设置监控系统。

环境配置:确保系统满足硬件要求,更新系统,配置防火墙和SELinux,创建专用用户和组,以及优化文件系统。

安装过程:选择合适的数据库类型,添加软件仓库,安装数据库软件,初始化数据库,并进行基本配置。

安全设置:运行安全安装脚本,管理用户权限,限制网络访问,启用加密,以及设置备份策略。

性能优化:配置内存参数,优化磁盘I/O,调整连接设置,优化查询,以及设置监控系统。

通过遵循这些步骤,您可以建立一个安全、稳定且高性能的数据库服务,为您的应用提供可靠的数据存储和管理能力。记住,数据库管理是一个持续的过程,需要定期监控、维护和优化,以确保最佳性能和安全性。
「七転び八起き(ななころびやおき)」
回复

使用道具 举报

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

本版积分规则