一台服务器单独做mysql 需要设置什么?

将一台服务器专门用于运行 MySQL 数据库服务时,需要从安全性、性能、可靠性、可维护性等多个方面进行合理配置。以下是关键的设置和建议:


一、系统层面设置

1. 操作系统优化

  • 使用稳定版本的 Linux(如 CentOS、Ubuntu Server、Rocky Linux 等)。
  • 关闭不必要的服务(如蓝牙、打印服务等),减少攻击面。
  • 配置合理的内核参数(如 vm.swappinessnet.core.somaxconn 等)。

2. 文件系统选择

  • 推荐使用 ext4XFS,适合大文件和高 I/O 场景。
  • 将 MySQL 数据目录(如 /var/lib/mysql)放在独立的磁盘或分区上,提升 I/O 性能。

3. 优化磁盘 I/O

  • 使用 SSD 存储,提升读写性能。
  • 如果使用 RAID,建议 RAID 10(兼顾性能与冗余)。
  • 启用 noatime 挂载选项,减少不必要的元数据写入。
# /etc/fstab 示例
/dev/sdb1 /var/lib/mysql ext4 defaults,noatime 0 0

4. 内存管理

  • 确保服务器有足够内存,MySQL 通常需要 4GB 以上(根据数据量调整)。
  • 合理设置 swappiness(建议设为 1):
    echo 'vm.swappiness=1' >> /etc/sysctl.conf
    sysctl -p

二、MySQL 配置优化(my.cnfmy.ini

1. 基础配置示例(适用于专用服务器)

[mysqld]
# 基本设置
port = 3306
socket = /var/lib/mysql/mysql.sock
datadir = /var/lib/mysql
skip-name-resolve            # 禁用 DNS 解析,提升连接速度
max_connections = 500        # 根据业务调整
max_connect_errors = 100000  # 防止误封 IP

# 缓存与性能
key_buffer_size = 256M       # MyISAM 索引缓存(如果不用 MyISAM 可小些)
innodb_buffer_pool_size = 70% of RAM  # 最重要!建议设为物理内存的 70%
innodb_log_file_size = 512M
innodb_log_buffer_size = 64M
innodb_flush_log_at_trx_commit = 1     # 保证数据安全(生产环境)
innodb_flush_method = O_DIRECT
innodb_file_per_table = ON
innodb_thread_concurrency = 0          # 让系统自动调节

# 查询优化
query_cache_type = 0                   # MySQL 8.0 已移除,5.7 可设为 0(不推荐开启)
query_cache_size = 0
tmp_table_size = 256M
max_heap_table_size = 256M
sort_buffer_size = 2M
read_buffer_size = 2M
join_buffer_size = 2M

# 日志设置
log-error = /var/log/mysql/error.log
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 2
log_bin = /var/log/mysql/mysql-bin.log   # 开启二进制日志(用于备份和主从)
server-id = 1                            # 主从复制所需
expire_logs_days = 7                     # 自动清理旧 binlog

# 安全
sql_mode = STRICT_TRANS_TABLES,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

⚠️ 注意:innodb_buffer_pool_size 是最关键的性能参数,应根据内存大小合理设置。


三、安全设置

1. 防火墙配置

  • 只允许指定的 IP 或内网访问 MySQL 端口(3306):
    # 使用 firewalld(CentOS)
    firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" port="3306" accept'
    firewall-cmd --reload

2. MySQL 用户权限最小化

  • 不使用 root 远程登录。
  • 为每个应用创建专用账号,并限制其 IP 和权限:
    CREATE USER 'app_user'@'192.168.1.%' IDENTIFIED BY 'StrongPassword123!';
    GRANT SELECT, INSERT, UPDATE, DELETE ON app_db.* TO 'app_user'@'192.168.1.%';
    FLUSH PRIVILEGES;

3. 禁用远程 root 登录

DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1');
FLUSH PRIVILEGES;

4. 定期更新 MySQL 版本

  • 使用官方支持的稳定版本(如 MySQL 8.0 LTS)。
  • 及时打补丁,防止已知漏洞。

四、备份与高可用

1. 定期备份

  • 使用 mysqldumpPercona XtraBackup(支持热备)。
  • 示例定时备份脚本(配合 cron):
    mysqldump -u root -p'password' --all-databases --single-transaction > /backup/mysql_$(date +%F).sql

2. 启用二进制日志(binlog)

  • 支持时间点恢复(PITR)和主从复制。

3. 考虑主从复制(可选)

  • 提高可用性和读性能。
  • 配置 server-idlog-binrelay-log 等。

五、监控与维护

1. 监控工具

  • 使用 Prometheus + GrafanaZabbixPercona Monitoring and Management (PMM)
  • 监控:连接数、慢查询、QPS、缓冲池命中率、I/O 等。

2. 定期维护

  • 分析和优化慢查询(使用 EXPLAIN)。
  • 定期 ANALYZE TABLEOPTIMIZE TABLE(对大表谨慎操作)。
  • 检查错误日志和慢查询日志。

六、其他建议

  • 不要安装不必要的软件,保持系统干净。
  • 使用专用网络环境,如内网或 VPC。
  • 启用 NTP 时间同步,避免时间漂移影响日志和复制。
  • 配置合理的 ulimit(打开文件数、进程数等):
    # /etc/security/limits.conf
    mysql soft nofile 65535
    mysql hard nofile 65535

总结

项目 建议
操作系统 CentOS/Rocky/Ubuntu Server
文件系统 XFS 或 ext4,独立挂载
内存 ≥4GB,innodb_buffer_pool_size 设为 70%
安全 禁用远程 root、防火墙限制、最小权限账号
备份 启用 binlog + 定期全量/增量备份
监控 使用 PMM、Zabbix 等工具
高可用 可考虑主从复制或 MHA/InnoDB Cluster

如果你提供服务器的硬件配置(CPU、内存、磁盘)和业务场景(如读多写少、高并发等),我可以给出更具体的 my.cnf 配置建议。

未经允许不得转载:云计算HECS » 一台服务器单独做mysql 需要设置什么?