MySQL单机部署全攻略:从安装到优化的完整指南

一、单机部署场景与适用性分析

MySQL单机部署适用于开发测试环境、小型业务系统或资源受限场景。其核心优势在于部署成本低、管理简单,但存在单点故障风险。典型应用场景包括:

  1. 开发环境:为开发者提供独立的数据库实例,避免与生产环境冲突
  2. 小型业务:日均访问量<10万的低并发系统
  3. 边缘计算:物联网设备数据采集等轻量级应用

需特别注意的局限性:数据安全性依赖主机防护,扩展性受限,建议业务量增长至单机性能瓶颈(通常QPS>2000)时考虑主从架构。

二、环境准备与前置条件

1. 硬件配置建议

  • 开发环境:2核4G内存,50GB磁盘空间
  • 生产环境:4核8G内存起,SSD磁盘优先
  • 关键指标:内存建议为数据库缓存(innodb_buffer_pool_size)的1.2倍

2. 操作系统选择

推荐使用CentOS 7/8或Ubuntu 20.04 LTS,需确保:

  • 系统内核版本≥3.10
  • 关闭透明大页(THP):
    1. echo never > /sys/kernel/mm/transparent_hugepage/enabled
  • 配置文件描述符限制:
    1. # /etc/security/limits.conf
    2. mysql soft nofile 65535
    3. mysql hard nofile 65535

3. 软件依赖安装

  1. # CentOS示例
  2. yum install -y numactl libaio ncurses-compat-libs
  3. # Ubuntu示例
  4. apt-get install -y libnuma1 libaio1 libncurses5

三、MySQL安装与配置

1. 版本选择策略

  • 开发环境:MySQL 8.0(支持JSON、窗口函数等新特性)
  • 兼容性要求:MySQL 5.7(广泛兼容旧应用)
  • 下载验证:
    1. wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.33-linux-glibc2.17-x86_64.tar.xz
    2. sha256sum mysql-8.0.33-linux-glibc2.17-x86_64.tar.xz

2. 标准化安装流程

  1. # 解压安装包
  2. tar -xvf mysql-8.0.33-linux-glibc2.17-x86_64.tar.xz -C /usr/local/
  3. ln -s /usr/local/mysql-8.0.33-linux-glibc2.17-x86_64 /usr/local/mysql
  4. # 创建数据目录
  5. mkdir -p /data/mysql
  6. chown -R mysql:mysql /data/mysql
  7. # 初始化数据库
  8. /usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql

3. 核心配置参数

/etc/my.cnf配置示例:

  1. [mysqld]
  2. datadir=/data/mysql
  3. socket=/tmp/mysql.sock
  4. port=3306
  5. user=mysql
  6. # 性能优化
  7. innodb_buffer_pool_size=4G
  8. innodb_log_file_size=512M
  9. innodb_flush_method=O_DIRECT
  10. sync_binlog=1
  11. # 安全配置
  12. skip-name-resolve
  13. local_infile=0

四、服务管理与维护

1. 系统服务注册

  1. # 创建systemd服务文件
  2. cat > /etc/systemd/system/mysqld.service <<EOF
  3. [Unit]
  4. Description=MySQL Server
  5. After=network.target
  6. [Service]
  7. Type=forking
  8. ExecStart=/usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf
  9. User=mysql
  10. Restart=on-failure
  11. [Install]
  12. WantedBy=multi-user.target
  13. EOF
  14. # 启动服务
  15. systemctl daemon-reload
  16. systemctl start mysqld
  17. systemctl enable mysqld

2. 日常维护命令

  1. # 状态检查
  2. systemctl status mysqld
  3. netstat -tulnp | grep 3306
  4. # 日志管理
  5. tail -f /data/mysql/error.log
  6. journalctl -u mysqld -f
  7. # 慢查询分析
  8. mysql -e "SELECT * FROM performance_schema.events_statements_summary_by_digest ORDER BY SUM_TIMER_WAIT DESC LIMIT 10;"

五、安全加固方案

1. 初始安全配置

  1. -- 修改root密码
  2. ALTER USER 'root'@'localhost' IDENTIFIED BY 'StrongPassword@123';
  3. -- 删除匿名用户
  4. DROP USER ''@'localhost';
  5. -- 限制root远程访问
  6. DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1');
  7. FLUSH PRIVILEGES;

2. 防火墙配置

  1. # 允许本地访问
  2. iptables -A INPUT -p tcp --dport 3306 -s 127.0.0.1 -j ACCEPT
  3. # 生产环境限制访问IP
  4. iptables -A INPUT -p tcp --dport 3306 -s 192.168.1.0/24 -j ACCEPT
  5. iptables -A INPUT -p tcp --dport 3306 -j DROP

3. 审计日志配置

  1. # 在my.cnf中添加
  2. [mysqld]
  3. general_log=1
  4. general_log_file=/var/log/mysql/mysql-general.log
  5. log_error=/var/log/mysql/mysql-error.log
  6. slow_query_log=1
  7. slow_query_log_file=/var/log/mysql/mysql-slow.log
  8. long_query_time=2

六、性能调优实践

1. 内存参数优化

  1. [mysqld]
  2. key_buffer_size=256M # MyISAM引擎使用
  3. query_cache_size=0 # MySQL 8.0已移除
  4. table_open_cache=4000
  5. thread_cache_size=100

2. 存储引擎选择

  • InnoDB:默认引擎,支持事务、行级锁
  • MyISAM:读密集型场景,全文索引
  • 混合使用建议:
    ```sql
    CREATE TABLE config (
    id INT PRIMARY KEY,
    value VARCHAR(255)
    ) ENGINE=InnoDB;

CREATE TABLE logs (
id BIGINT AUTO_INCREMENT,
message TEXT,
INDEX (id)
) ENGINE=MyISAM;

  1. ## 3. 监控体系搭建
  2. ```bash
  3. # 安装监控工具
  4. yum install -y sysstat percona-toolkit
  5. # 关键指标采集
  6. vmstat 1 5 # 系统整体状态
  7. iostat -x 1 5 # 磁盘IO分析
  8. mpstat -P ALL 1 5 # CPU使用率

七、故障排查指南

1. 常见问题处理

  • 启动失败:检查错误日志,常见原因包括:

    • 端口冲突:netstat -tulnp | grep 3306
    • 数据目录权限:chown -R mysql:mysql /data/mysql
    • 配置文件错误:mysqld --validate-config
  • 连接拒绝

    1. SHOW VARIABLES LIKE 'max_connections';
    2. SET GLOBAL max_connections=500;

2. 备份恢复策略

  1. # 物理备份(需停机)
  2. /usr/local/mysql/bin/mysqladmin shutdown
  3. cp -r /data/mysql /backup/mysql_backup_$(date +%Y%m%d)
  4. # 逻辑备份
  5. /usr/local/mysql/bin/mysqldump -u root -p --single-transaction --all-databases > full_backup.sql
  6. # 恢复测试
  7. mysql -u root -p < full_backup.sql

八、升级与迁移方案

1. 版本升级流程

  1. # 1. 备份数据
  2. mysqldump -u root -p --all-databases > backup.sql
  3. # 2. 安装新版本
  4. tar -xvf mysql-8.0.34-linux-glibc2.17-x86_64.tar.xz
  5. # 3. 升级数据目录
  6. /usr/local/mysql/bin/mysql_upgrade -u root -p
  7. # 4. 重启服务
  8. systemctl restart mysqld

2. 主机迁移步骤

  1. 停机维护窗口确认
  2. 主库锁定:FLUSH TABLES WITH READ LOCK;
  3. 复制数据文件和日志
  4. 新主机恢复:修改my.cnf中的server-id
  5. 验证数据一致性:pt-table-checksum

九、最佳实践总结

  1. 开发环境标准化:使用Docker容器化部署,示例:

    1. FROM mysql:8.0
    2. ENV MYSQL_ROOT_PASSWORD=devpass
    3. ENV MYSQL_DATABASE=app_db
    4. COPY custom.cnf /etc/mysql/conf.d/
  2. 生产环境高可用:建议3个月内规划主从架构

  3. 监控告警:设置连接数、慢查询、磁盘空间等关键指标的告警阈值
  4. 定期维护:每周执行ANALYZE TABLE更新统计信息,每月优化表

通过系统化的单机部署方案,可有效平衡成本与性能需求。建议每6个月进行配置评审,根据业务发展动态调整参数,为后续架构扩展奠定坚实基础。