|
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
引言
数据库服务是现代应用架构中不可或缺的组成部分,它负责存储、管理和检索数据。在CentOS系统上搭建一个安全、高效的数据库服务需要经过多个步骤,包括环境准备、软件安装、安全配置和性能优化。本文将详细介绍在CentOS系统上从零开始搭建数据库服务的完整流程,帮助您建立一个稳定、安全且高性能的数据库环境。
1. 环境配置
1.1 系统要求与准备
在开始安装数据库服务之前,我们需要确保系统满足最低要求,并进行必要的准备工作。
数据库服务对硬件有一定要求,具体取决于预期的负载和数据量。以下是一般建议的最低配置:
• CPU:至少2核
• 内存:至少4GB RAM(推荐8GB或更多)
• 硬盘空间:至少50GB可用空间(根据数据量调整)
• 网络:稳定的网络连接
本文以CentOS 7/8为例进行说明,确保您的系统是最新版本:
- # 检查CentOS版本
- cat /etc/redhat-release
- # 更新系统到最新版本
- sudo yum update -y
复制代码
1.2 系统更新与基础配置
保持系统最新是确保安全性和稳定性的重要步骤:
- # 更新所有已安装的软件包
- sudo yum update -y
- # 安装常用工具
- sudo yum install -y wget vim curl net-tools
复制代码
设置一个合适的主机名有助于识别和管理服务器:
- # 查看当前主机名
- hostname
- # 设置新的主机名(例如:dbserver.example.com)
- sudo hostnamectl set-hostname dbserver.example.com
- # 验证主机名更改
- hostname
复制代码
数据库服务对时间准确性要求较高,需要配置NTP服务:
- # 安装NTP服务
- sudo yum install -y ntp
- # 启动并启用NTP服务
- sudo systemctl start ntpd
- sudo systemctl enable ntpd
- # 检查NTP服务状态
- sudo systemctl status ntpd
- # 验证时间同步
- ntpq -p
复制代码
1.3 防火墙配置
防火墙是保护数据库服务的第一道防线,需要正确配置以允许必要的流量。
- # 安装firewalld(如果尚未安装)
- sudo yum install -y firewalld
- # 启动并启用防火墙
- sudo systemctl start firewalld
- sudo systemctl enable firewalld
- # 检查防火墙状态
- sudo systemctl status firewalld
复制代码
根据您选择的数据库类型,需要开放相应的端口。以下是常见数据库的默认端口:
• MySQL/MariaDB:3306
• PostgreSQL:5432
• MongoDB:27017
以MySQL为例:
- # 开放MySQL端口
- sudo firewall-cmd --permanent --add-port=3306/tcp
- # 重新加载防火墙配置
- sudo firewall-cmd --reload
- # 验证端口是否已开放
- sudo firewall-cmd --list-ports
复制代码
1.4 SELinux配置
SELinux(Security-Enhanced Linux)提供了额外的安全层,但可能需要调整以允许数据库服务正常运行。
- # 检查SELinux当前状态
- getenforce
复制代码
如果SELinux处于 enforcing 模式,可能需要为数据库服务设置适当的策略:
- # 临时将SELinux设置为permissive模式(用于测试)
- sudo setenforce 0
- # 永久设置SELinux模式(编辑/etc/selinux/config文件)
- sudo vim /etc/selinux/config
- # 将SELINUX=enforcing改为SELINUX=permissive或SELINUX=disabled
- # 安装SELinux管理工具
- sudo yum install -y policycoreutils-python
- # 为MySQL设置SELinux策略(以MySQL为例)
- sudo semanage port -a -t mysqld_port_t -p tcp 3306
复制代码
1.5 创建专用用户和组
为了安全起见,应该为数据库服务创建专用的用户和组,而不是使用root账户运行数据库服务。
- # 创建数据库用户组
- sudo groupadd -r dbgroup
- # 创建数据库用户
- sudo useradd -r -g dbgroup -s /bin/false dbuser
- # 验证用户和组是否创建成功
- id dbuser
复制代码
1.6 配置文件系统
数据库服务通常需要特定的文件系统配置以获得最佳性能。
- # 创建数据库数据目录
- sudo mkdir -p /data/mysql
- # 设置目录所有权
- sudo chown -R dbuser:dbgroup /data/mysql
- # 设置目录权限
- sudo chmod -R 750 /data/mysql
复制代码
编辑/etc/fstab文件,为数据库数据分区添加noatime和nodiratime选项,以减少不必要的磁盘写入:
- # 备份fstab文件
- sudo cp /etc/fstab /etc/fstab.bak
- # 编辑fstab文件
- sudo vim /etc/fstab
- # 找到数据分区的行,将defaults改为defaults,noatime,nodiratime
- # 例如:UUID=xxxx-xxxx /data ext4 defaults,noatime,nodiratime 0 0
- # 重新挂载所有文件系统
- sudo mount -o remount /
复制代码
编辑/etc/sysctl.conf文件,添加以下参数以优化数据库性能:
- # 备份sysctl.conf文件
- sudo cp /etc/sysctl.conf /etc/sysctl.conf.bak
- # 编辑sysctl.conf文件
- sudo vim /etc/sysctl.conf
- # 添加以下参数
- # 增加文件句柄限制
- fs.file-max = 65535
- # 增加网络参数
- net.core.rmem_max = 16777216
- net.core.wmem_max = 16777216
- net.ipv4.tcp_rmem = 4096 87380 16777216
- net.ipv4.tcp_wmem = 4096 65536 16777216
- net.ipv4.tcp_fin_timeout = 30
- net.core.netdev_max_backlog = 30000
- # 应用新的内核参数
- sudo sysctl -p
复制代码
2. 安装过程
2.1 选择数据库类型
在安装数据库之前,需要根据应用需求选择合适的数据库类型。常见的开源数据库包括:
• MySQL/MariaDB:适用于大多数Web应用
• PostgreSQL:适用于复杂查询和事务处理
• MongoDB:适用于文档存储和大数据应用
本文将以MySQL/MariaDB为例进行说明,因为它是目前最流行的开源关系型数据库之一。
2.2 添加软件仓库
CentOS默认仓库中的数据库版本可能较旧,建议使用官方仓库或第三方仓库获取最新版本。
- # 下载并安装MySQL官方仓库
- wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
- sudo rpm -ivh mysql80-community-release-el7-3.noarch.rpm
- # 验证仓库是否添加成功
- yum repolist enabled | grep "mysql.*-community.*"
复制代码
如果选择MariaDB:
- # 创建MariaDB仓库文件
- sudo vim /etc/yum.repos.d/MariaDB.repo
- # 添加以下内容
- [mariadb]
- name = MariaDB
- baseurl = http://yum.mariadb.org/10.5/centos7-amd64
- gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
- gpgcheck=1
- # 清除缓存并更新
- sudo yum clean all
- sudo yum makecache
复制代码
2.3 安装数据库软件
- # 安装MySQL服务器
- sudo yum install -y mysql-community-server
- # 验证安装
- rpm -qa | grep mysql
复制代码- # 安装MariaDB服务器
- sudo yum install -y MariaDB-server MariaDB-client
- # 验证安装
- rpm -qa | grep MariaDB
复制代码
2.4 初始化数据库
- # 启动MySQL服务
- sudo systemctl start mysqld
- # 启用MySQL服务开机自启
- sudo systemctl enable mysqld
- # 获取临时root密码
- sudo grep 'temporary password' /var/log/mysqld.log
- # 运行安全安装脚本
- sudo mysql_secure_installation
复制代码- # 启动MariaDB服务
- sudo systemctl start mariadb
- # 启用MariaDB服务开机自启
- sudo systemctl enable mariadb
- # 运行安全安装脚本
- sudo mysql_secure_installation
复制代码
2.5 配置数据库
- # 备份原始配置文件
- sudo cp /etc/my.cnf /etc/my.cnf.bak
- # 编辑MySQL配置文件
- sudo vim /etc/my.cnf
- # 添加以下配置
- [mysqld]
- # 设置数据目录
- datadir=/data/mysql
- socket=/var/lib/mysql/mysql.sock
- # 设置字符集
- character-set-server=utf8mb4
- collation-server=utf8mb4_unicode_ci
- # 设置默认存储引擎
- default-storage-engine=InnoDB
- # 设置InnoDB参数
- innodb_buffer_pool_size=2G
- innodb_log_file_size=256M
- innodb_log_buffer_size=8M
- innodb_flush_log_at_trx_commit=2
- innodb_file_per_table=1
- # 设置连接参数
- max_connections=200
- max_connect_errors=100000
- connect_timeout=10
- wait_timeout=28800
- interactive_timeout=28800
- # 设置日志
- slow_query_log=1
- slow_query_log_file=/var/log/mysql/slow.log
- long_query_time=2
- log_error=/var/log/mysql/error.log
- # 重启MySQL服务以应用新配置
- sudo systemctl restart mysqld
复制代码- # 创建日志目录
- sudo mkdir -p /var/log/mysql
- # 设置目录所有权
- sudo chown -R mysql:mysql /var/log/mysql
- # 设置目录权限
- sudo chmod -R 755 /var/log/mysql
复制代码
2.6 验证安装
- # 检查数据库服务状态
- sudo systemctl status mysqld
- # 连接到数据库
- mysql -u root -p
- # 在MySQL shell中执行以下命令
- SHOW VARIABLES LIKE 'version';
- SHOW VARIABLES LIKE 'datadir';
- CREATE DATABASE testdb;
- SHOW DATABASES;
- EXIT;
复制代码
3. 安全设置
3.1 基本安全配置
- # 运行MySQL安全安装脚本
- sudo mysql_secure_installation
- # 按照提示进行以下操作:
- # 1. 设置root密码
- # 2. 移除匿名用户
- # 3. 禁止root远程登录
- # 4. 移除测试数据库
- # 5. 重新加载权限表
复制代码- # 登录MySQL
- mysql -u root -p
- # 修改root用户名(增加安全性)
- RENAME USER 'root'@'localhost' TO 'admin'@'localhost';
- # 创建新的root用户(仅限本地访问)
- CREATE USER 'root'@'localhost' IDENTIFIED BY 'strong_password';
- GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION;
- # 刷新权限
- FLUSH PRIVILEGES;
- # 退出MySQL
- EXIT;
复制代码
3.2 用户权限管理
- # 登录MySQL
- mysql -u root -p
- # 创建新用户
- CREATE USER 'appuser'@'localhost' IDENTIFIED BY 'user_password';
- # 创建数据库
- CREATE DATABASE appdb;
- # 授予用户对数据库的权限
- GRANT ALL PRIVILEGES ON appdb.* TO 'appuser'@'localhost';
- # 刷新权限
- FLUSH PRIVILEGES;
- # 退出MySQL
- EXIT;
复制代码- # 登录MySQL
- mysql -u root -p
- # 创建只读用户
- CREATE USER 'readonly'@'%' IDENTIFIED BY 'readonly_password';
- GRANT SELECT ON appdb.* TO 'readonly'@'%';
- # 创建读写用户
- CREATE USER 'readwrite'@'%' IDENTIFIED BY 'readwrite_password';
- GRANT SELECT, INSERT, UPDATE, DELETE ON appdb.* TO 'readwrite'@'%';
- # 刷新权限
- FLUSH PRIVILEGES;
- # 退出MySQL
- EXIT;
复制代码
3.3 网络访问控制
- # 登录MySQL
- mysql -u root -p
- # 查看当前用户和主机
- SELECT user, host FROM mysql.user;
- # 删除允许从任何主机访问的用户
- DELETE FROM mysql.user WHERE user = '' OR (user = 'root' AND host NOT IN ('localhost', '127.0.0.1', '::1'));
- # 刷新权限
- FLUSH PRIVILEGES;
- # 退出MySQL
- EXIT;
复制代码- # 备份原始配置文件
- sudo cp /etc/my.cnf /etc/my.cnf.bak
- # 编辑MySQL配置文件
- sudo vim /etc/my.cnf
- # 添加以下配置
- [mysqld]
- # 只监听本地接口(禁止远程访问)
- # bind-address = 127.0.0.1
- # 或者监听特定IP地址(允许特定网络访问)
- # bind-address = 192.168.1.100
- # 如果需要从多个IP访问,可以注释掉bind-address
- # bind-address = 0.0.0.0
- # 重启MySQL服务
- sudo systemctl restart mysqld
复制代码
如果需要从远程安全地访问数据库,建议使用SSH隧道而不是直接暴露数据库端口:
- # 从本地机器建立SSH隧道
- ssh -L 3306:localhost:3306 user@dbserver.example.com
- # 然后可以通过本地端口连接到远程数据库
- mysql -h 127.0.0.1 -u appuser -p
复制代码
3.4 加密设置
- # 登录MySQL
- mysql -u root -p
- # 检查SSL状态
- SHOW VARIABLES LIKE '%ssl%';
- # 如果SSL未启用,生成SSL证书(在系统shell中)
- sudo mkdir /etc/mysql/ssl
- sudo chown -R mysql:mysql /etc/mysql/ssl
- cd /etc/mysql/ssl
- # 生成CA证书
- sudo openssl genrsa 2048 > ca-key.pem
- sudo openssl req -new -x509 -nodes -days 3650 -key ca-key.pem -out ca.pem
- # 生成服务器证书
- sudo openssl req -newkey rsa:2048 -days 3650 -nodes -keyout server-key.pem -out server-req.pem
- sudo openssl rsa -in server-key.pem -out server-key.pem
- sudo openssl x509 -req -in server-req.pem -days 3650 -CA ca.pem -CAkey ca-key.pem -set_serial 01 -out server-cert.pem
- # 生成客户端证书
- sudo openssl req -newkey rsa:2048 -days 3650 -nodes -keyout client-key.pem -out client-req.pem
- sudo openssl rsa -in client-key.pem -out client-key.pem
- sudo openssl x509 -req -in client-req.pem -days 3650 -CA ca.pem -CAkey ca-key.pem -set_serial 01 -out client-cert.pem
- # 设置证书权限
- sudo chown mysql:mysql *.pem
- sudo chmod 600 *.pem
- # 编辑MySQL配置文件
- sudo vim /etc/my.cnf
- # 添加以下配置
- [mysqld]
- ssl-ca=/etc/mysql/ssl/ca.pem
- ssl-cert=/etc/mysql/ssl/server-cert.pem
- ssl-key=/etc/mysql/ssl/server-key.pem
- # 重启MySQL服务
- sudo systemctl restart mysqld
- # 验证SSL是否启用
- mysql -u root -p
- SHOW VARIABLES LIKE '%ssl%';
复制代码- # 登录MySQL
- mysql -u root -p
- # 创建需要SSL连接的用户
- CREATE USER 'secureuser'@'%' IDENTIFIED BY 'secure_password' REQUIRE SSL;
- # 修改现有用户要求SSL
- ALTER USER 'appuser'@'%' REQUIRE SSL;
- # 刷新权限
- FLUSH PRIVILEGES;
- # 退出MySQL
- EXIT;
复制代码
3.5 备份策略
- # 创建备份目录
- sudo mkdir -p /backup/mysql
- sudo chown -R mysql:mysql /backup/mysql
- sudo chmod -R 750 /backup/mysql
- # 创建备份脚本
- sudo vim /usr/local/bin/mysql_backup.sh
- # 添加以下内容
- #!/bin/bash
- # 设置变量
- DATE=$(date +%Y%m%d_%H%M%S)
- BACKUP_DIR="/backup/mysql"
- MYSQL_USER="root"
- MYSQL_PASSWORD="your_root_password"
- RETENTION_DAYS=30
- # 创建备份
- mysqldump --user=$MYSQL_USER --password=$MYSQL_PASSWORD --all-databases --single-transaction --routines --triggers | gzip > $BACKUP_DIR/mysql_backup_$DATE.sql.gz
- # 删除旧备份
- find $BACKUP_DIR -name "mysql_backup_*.sql.gz" -type f -mtime +$RETENTION_DAYS -delete
- # 记录备份状态
- if [ $? -eq 0 ]; then
- echo "Backup successful: $DATE" >> $BACKUP_DIR/backup.log
- else
- echo "Backup failed: $DATE" >> $BACKUP_DIR/backup.log
- fi
- # 设置脚本可执行权限
- sudo chmod +x /usr/local/bin/mysql_backup.sh
- # 添加到crontab以实现自动备份
- sudo crontab -e
- # 添加以下行以每天凌晨2点执行备份
- 0 2 * * * /usr/local/bin/mysql_backup.sh
复制代码- # 安装rsync(如果尚未安装)
- sudo yum install -y rsync
- # 创建远程备份脚本
- sudo vim /usr/local/bin/mysql_remote_backup.sh
- # 添加以下内容
- #!/bin/bash
- # 设置变量
- DATE=$(date +%Y%m%d_%H%M%S)
- BACKUP_DIR="/backup/mysql"
- REMOTE_USER="backupuser"
- REMOTE_HOST="backup.example.com"
- REMOTE_DIR="/remote/backups/mysql"
- SSH_KEY="/home/backupuser/.ssh/id_rsa"
- # 创建本地备份
- /usr/local/bin/mysql_backup.sh
- # 同步到远程服务器
- rsync -avz -e "ssh -i $SSH_KEY" $BACKUP_DIR/ $REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR/
- # 记录远程备份状态
- if [ $? -eq 0 ]; then
- echo "Remote backup successful: $DATE" >> $BACKUP_DIR/remote_backup.log
- else
- echo "Remote backup failed: $DATE" >> $BACKUP_DIR/remote_backup.log
- fi
- # 设置脚本可执行权限
- sudo chmod +x /usr/local/bin/mysql_remote_backup.sh
- # 设置SSH无密码登录
- sudo su - backupuser
- ssh-keygen -t rsa
- ssh-copy-id -i ~/.ssh/id_rsa.pub backupuser@backup.example.com
- exit
复制代码
4. 性能优化
4.1 内存配置
InnoDB缓冲池是MySQL最重要的内存设置,应该尽可能分配更多内存,但不要超过系统总内存的70-80%。
- # 编辑MySQL配置文件
- sudo vim /etc/my.cnf
- # 添加以下配置
- [mysqld]
- # 设置InnoDB缓冲池大小(根据系统内存调整)
- innodb_buffer_pool_size=4G
- # 对于大型系统,可以设置多个实例以提高性能
- innodb_buffer_pool_instances=4
- # 重启MySQL服务
- sudo systemctl restart mysqld
复制代码- # 编辑MySQL配置文件
- sudo vim /etc/my.cnf
- # 添加以下配置
- [mysqld]
- # 设置查询缓存(MySQL 8.0已移除此功能)
- # query_cache_type=1
- # query_cache_size=128M
- # query_cache_limit=2M
- # 设置排序缓冲区
- sort_buffer_size=4M
- # 设置连接缓冲区
- join_buffer_size=4M
- # 设置表缓存
- table_open_cache=2000
- # 设置线程缓存
- thread_cache_size=16
- # 设置临时表
- tmp_table_size=64M
- max_heap_table_size=64M
- # 重启MySQL服务
- sudo systemctl restart mysqld
复制代码
4.2 磁盘I/O优化
- # 编辑MySQL配置文件
- sudo vim /etc/my.cnf
- # 添加以下配置
- [mysqld]
- # 设置InnoDB日志文件大小
- innodb_log_file_size=512M
- # 设置InnoDB日志缓冲区大小
- innodb_log_buffer_size=16M
- # 设置InnoDB刷新方法(O_DIRECT适用于大多数现代系统)
- innodb_flush_method=O_DIRECT
- # 设置InnoDB双写缓冲
- innodb_doublewrite=1
- # 设置InnoDB I/O容量
- innodb_io_capacity=2000
- innodb_io_capacity_max=4000
- # 重启MySQL服务
- sudo systemctl restart mysqld
复制代码- # 创建数据目录(假设/dev/sdb是独立磁盘)
- sudo mkfs -t ext4 /dev/sdb
- sudo mkdir /data/mysql
- sudo mount /dev/sdb /data/mysql
- # 添加到/etc/fstab以实现自动挂载
- sudo vim /etc/fstab
- # 添加以下行
- /dev/sdb /data/mysql ext4 defaults,noatime,nodiratime 0 0
- # 设置所有权和权限
- sudo chown -R mysql:mysql /data/mysql
- sudo chmod -R 750 /data/mysql
- # 编辑MySQL配置文件
- sudo vim /etc/my.cnf
- # 修改数据目录
- [mysqld]
- datadir=/data/mysql
- # 重启MySQL服务
- sudo systemctl restart mysqld
复制代码
对于生产环境,建议使用RAID提高磁盘性能和可靠性。以下是配置RAID 10的示例:
- # 安装mdadm
- sudo yum install -y mdadm
- # 创建RAID 10阵列(假设有4块磁盘:/dev/sdb, /dev/sdc, /dev/sdd, /dev/sde)
- sudo mdadm --create --verbose /dev/md0 --level=10 --raid-devices=4 /dev/sdb /dev/sdc /dev/sdd /dev/sde
- # 创建文件系统
- sudo mkfs -t ext4 /dev/md0
- # 挂载RAID设备
- sudo mkdir /data/mysql
- sudo mount /dev/md0 /data/mysql
- # 添加到/etc/fstab以实现自动挂载
- sudo vim /etc/fstab
- # 添加以下行
- /dev/md0 /data/mysql ext4 defaults,noatime,nodiratime 0 0
- # 设置所有权和权限
- sudo chown -R mysql:mysql /data/mysql
- sudo chmod -R 750 /data/mysql
- # 保存RAID配置
- sudo mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf
- # 重启MySQL服务
- sudo systemctl restart mysqld
复制代码
4.3 连接优化
- # 编辑MySQL配置文件
- sudo vim /etc/my.cnf
- # 添加以下配置
- [mysqld]
- # 设置最大连接数
- max_connections=500
- # 设置最大连接错误数
- max_connect_errors=100000
- # 设置连接超时
- connect_timeout=10
- # 设置等待超时
- wait_timeout=28800
- interactive_timeout=28800
- # 设置最大允许数据包
- max_allowed_packet=64M
- # 重启MySQL服务
- sudo systemctl restart mysqld
复制代码
对于高并发应用,可以考虑使用连接池。以下是使用ProxySQL作为连接池的示例:
- # 添加ProxySQL仓库
- sudo yum install -y https://repo.proxysql.com/ProxySQL/proxysql-2.0.x/proxysql-2.0.15-1-centos7.x86_64.rpm
- # 启动ProxySQL服务
- sudo systemctl start proxysql
- # 启用ProxySQL服务开机自启
- sudo systemctl enable proxysql
- # 连接到ProxySQL管理界面
- mysql -u admin -padmin -h 127.0.0.1 -P 6032
- # 添加MySQL服务器到ProxySQL
- INSERT INTO mysql_servers (hostgroup_id, hostname, port) VALUES (1, '127.0.0.1', 3306);
- # 添加监控用户
- INSERT INTO mysql_users (username, password, default_hostgroup) VALUES ('monitor', 'monitor_password', 1);
- # 添加应用用户
- INSERT INTO mysql_users (username, password, default_hostgroup) VALUES ('appuser', 'user_password', 1);
- # 加载配置到运行时
- LOAD MYSQL SERVERS TO RUNTIME;
- LOAD MYSQL USERS TO RUNTIME;
- # 保存配置到磁盘
- SAVE MYSQL SERVERS TO DISK;
- SAVE MYSQL USERS TO DISK;
- # 退出
- EXIT;
复制代码
4.4 查询优化
- # 创建日志目录(如果不存在)
- sudo mkdir -p /var/log/mysql
- sudo chown -R mysql:mysql /var/log/mysql
- sudo chmod -R 750 /var/log/mysql
- # 编辑MySQL配置文件
- sudo vim /etc/my.cnf
- # 添加以下配置
- [mysqld]
- # 启用慢查询日志
- slow_query_log=1
- slow_query_log_file=/var/log/mysql/slow.log
- long_query_time=2
- # 启用未使用索引的查询日志
- log_queries_not_using_indexes=1
- # 重启MySQL服务
- sudo systemctl restart mysqld
复制代码- # 安装mysqldumpslow工具(通常包含在MySQL客户端包中)
- sudo yum install -y mysql-community-client
- # 分析慢查询日志
- sudo mysqldumpslow -s t /var/log/mysql/slow.log
- # 或者使用pt-query-digest工具(需要安装percona-toolkit)
- sudo yum install -y https://repo.percona.com/yum/release/7/RPMS/x86_64/percona-toolkit-3.0.13-1.el7.x86_64.rpm
- # 分析慢查询日志
- pt-query-digest /var/log/mysql/slow.log
复制代码- # 登录MySQL
- mysql -u root -p
- # 使用EXPLAIN分析查询执行计划
- EXPLAIN SELECT * FROM users WHERE email = 'user@example.com';
- # 创建适当的索引
- CREATE INDEX idx_users_email ON users(email);
- # 分析表以更新索引统计信息
- ANALYZE TABLE users;
- # 优化表
- OPTIMIZE TABLE users;
- # 退出MySQL
- EXIT;
复制代码
4.5 监控与调优
- # 安装Percona Monitoring and Management (PMM) 客户端
- sudo yum install -y https://repo.percona.com/yum/release/7/RPMS/x86_64/pmm-client-2.17.0-1.el7.x86_64.rpm
- # 配置PMM客户端
- sudo pmm-client setup --server=pmm-server.example.com --insecure-ssl
- # 启用MySQL监控
- sudo pmm-admin add mysql --username=pmm --password=pmm_password
复制代码- # 安装sysstat包(包含sar等工具)
- sudo yum install -y sysstat
- # 启用sysstat服务
- sudo systemctl enable sysstat
- sudo systemctl start sysstat
- # 配置收集间隔
- sudo vim /etc/sysconfig/sysstat
- # 修改以下行
- HISTORY=7
- SADC_OPTIONS="-S DISK"
- # 重启sysstat服务
- sudo systemctl restart sysstat
- # 查看系统资源使用情况
- sar -u 1 5 # CPU使用率
- sar -r 1 5 # 内存使用情况
- sar -b 1 5 # I/O传输率
复制代码- # 登录MySQL
- mysql -u root -p
- # 检查性能模式是否启用
- SHOW VARIABLES LIKE 'performance_schema';
- # 如果未启用,编辑MySQL配置文件
- # sudo vim /etc/my.cnf
- # [mysqld]
- # performance_schema=ON
- # 重启MySQL服务
- # sudo systemctl restart mysqld
- # 查看性能模式配置
- SELECT * FROM performance_schema.setup_instruments;
- # 启用特定监控点
- UPDATE performance_schema.setup_instruments SET ENABLED = 'YES', TIMED = 'YES' WHERE NAME LIKE 'statement/%';
- # 查看查询统计
- SELECT * FROM performance_schema.events_statements_summary_by_digest ORDER BY SUM_TIMER_WAIT DESC LIMIT 10;
- # 退出MySQL
- EXIT;
复制代码
5. 总结
在CentOS系统上从零开始搭建数据库服务是一个复杂但重要的任务。通过本文的详细介绍,您应该已经了解了从环境配置、安装过程、安全设置到性能优化的完整流程。以下是关键步骤的总结:
1. 环境配置:确保系统满足硬件要求,更新系统,配置防火墙和SELinux,创建专用用户和组,以及优化文件系统。
2. 安装过程:选择合适的数据库类型,添加软件仓库,安装数据库软件,初始化数据库,并进行基本配置。
3. 安全设置:运行安全安装脚本,管理用户权限,限制网络访问,启用加密,以及设置备份策略。
4. 性能优化:配置内存参数,优化磁盘I/O,调整连接设置,优化查询,以及设置监控系统。
环境配置:确保系统满足硬件要求,更新系统,配置防火墙和SELinux,创建专用用户和组,以及优化文件系统。
安装过程:选择合适的数据库类型,添加软件仓库,安装数据库软件,初始化数据库,并进行基本配置。
安全设置:运行安全安装脚本,管理用户权限,限制网络访问,启用加密,以及设置备份策略。
性能优化:配置内存参数,优化磁盘I/O,调整连接设置,优化查询,以及设置监控系统。
通过遵循这些步骤,您可以建立一个安全、稳定且高性能的数据库服务,为您的应用提供可靠的数据存储和管理能力。记住,数据库管理是一个持续的过程,需要定期监控、维护和优化,以确保最佳性能和安全性。 |
|