☰
MySQL 8.0 Linux安装与配置全指南
2026/11/3 7:13:26 网站建设 项目流程

1. MySQL 8.0安装前的系统准备

在Linux系统上部署MySQL 8.0前,需要做好以下准备工作:

1.1 系统环境检查

首先确认Linux发行版版本和架构:

cat /etc/os-release uname -m

MySQL 8.0支持的主流Linux发行版包括:

  • RHEL/CentOS 7及以上
  • Ubuntu 18.04及以上
  • Debian 9及以上
  • SUSE Linux Enterprise Server 12及以上

注意:MySQL 8.0不再支持32位系统,最低要求x86_64或ARM64架构

1.2 依赖包安装

不同发行版需要安装的基础依赖:

发行版依赖包
RHEL/CentOSopenssl-devel、libaio、ncurses-devel
Ubuntu/Debianlibssl-dev、libaio1、libncurses5
SUSElibopenssl-devel、libaio1、ncurses-devel

安装示例(CentOS):

yum install -y openssl-devel libaio ncurses-devel

1.3 创建专用用户

为MySQL创建专用用户和组:

groupadd mysql useradd -r -g mysql -s /bin/false mysql

2. MySQL 8.0安装方法详解

2.1 官方仓库安装(推荐)

2.1.1 添加MySQL官方仓库

以CentOS 7为例:

rpm -Uvh https://dev.mysql.com/get/mysql80-community-release-el7-6.noarch.rpm
2.1.2 安装MySQL服务器
yum install -y mysql-community-server

2.2 二进制包安装

2.2.1 下载二进制包
wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.33-linux-glibc2.12-x86_64.tar.xz
2.2.2 解压并安装
tar xvf mysql-8.0.33-linux-glibc2.12-x86_64.tar.xz -C /usr/local/ ln -s /usr/local/mysql-8.0.33-linux-glibc2.12-x86_64 /usr/local/mysql

2.3 源码编译安装

2.3.1 下载源码包
wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.33.tar.gz
2.3.2 编译配置
cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \ -DMYSQL_DATADIR=/var/lib/mysql \ -DWITH_BOOST=boost \ -DSYSCONFDIR=/etc \ -DWITH_INNOBASE_STORAGE_ENGINE=1 \ -DWITH_PARTITION_STORAGE_ENGINE=1 \ -DWITH_FEDERATED_STORAGE_ENGINE=1 \ -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \ -DWITH_MYISAM_STORAGE_ENGINE=1 \ -DENABLED_LOCAL_INFILE=1 \ -DENABLE_DTRACE=0 \ -DDEFAULT_CHARSET=utf8mb4 \ -DDEFAULT_COLLATION=utf8mb4_general_ci

3. MySQL 8.0初始化与配置

3.1 数据目录初始化

使用mysqld初始化数据目录:

mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/var/lib/mysql

重要:初始化后会生成临时root密码,保存在错误日志中(通常为/var/log/mysqld.log)

3.2 配置文件优化

/etc/my.cnf基础配置示例:

[mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid # 性能优化参数 innodb_buffer_pool_size=4G innodb_log_file_size=1G max_connections=200 character-set-server=utf8mb4 collation-server=utf8mb4_unicode_ci

3.3 启动MySQL服务

使用systemd管理服务:

systemctl start mysqld systemctl enable mysqld

4. MySQL 8.0安全管理

4.1 修改root密码

首次登录后必须修改root密码:

ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewStrongPassword!123';

4.2 创建应用用户

创建专用应用用户示例:

CREATE USER 'appuser'@'%' IDENTIFIED BY 'AppUserPassword!456'; GRANT ALL PRIVILEGES ON appdb.* TO 'appuser'@'%'; FLUSH PRIVILEGES;

4.3 安全加固措施

建议执行的安全操作:

  1. 运行mysql_secure_installation脚本
  2. 移除匿名用户
  3. 禁止root远程登录
  4. 移除test数据库

5. MySQL 8.0日常管理

5.1 备份与恢复

5.1.1 mysqldump备份
mysqldump -u root -p --all-databases > full_backup.sql
5.1.2 二进制日志备份
FLUSH BINARY LOGS; PURGE BINARY LOGS BEFORE '2023-06-01 00:00:00';

5.2 性能监控

常用监控命令:

SHOW STATUS LIKE 'Threads_connected'; SHOW ENGINE INNODB STATUS; SELECT * FROM sys.schema_table_statistics;

5.3 用户与权限管理

查看用户权限:

SELECT * FROM mysql.user; SHOW GRANTS FOR 'appuser'@'%';

6. MySQL 8.0新特性实践

6.1 窗口函数应用

使用窗口函数计算排名:

SELECT employee_name, salary, RANK() OVER (ORDER BY salary DESC) as salary_rank FROM employees;

6.2 JSON功能增强

JSON数据操作示例:

CREATE TABLE products ( id INT PRIMARY KEY, details JSON ); INSERT INTO products VALUES (1, '{"name": "Laptop", "specs": {"cpu": "i7", "ram": "16GB"}}');

6.3 角色管理

创建和使用角色:

CREATE ROLE read_only; GRANT SELECT ON *.* TO read_only; GRANT read_only TO 'appuser'@'%';

7. 常见问题排查

7.1 启动失败排查

检查错误日志:

tail -n 50 /var/log/mysqld.log

常见错误:

  1. 端口冲突(默认3306)
  2. 数据目录权限问题
  3. 内存不足

7.2 连接问题处理

检查连接数限制:

SHOW VARIABLES LIKE 'max_connections';

临时增加连接数:

SET GLOBAL max_connections = 300;

7.3 性能问题分析

使用EXPLAIN分析查询:

EXPLAIN ANALYZE SELECT * FROM large_table WHERE id = 1000;

慢查询日志配置:

slow_query_log=1 slow_query_log_file=/var/log/mysql-slow.log long_query_time=2

8. 升级与迁移策略

8.1 从MySQL 5.7升级到8.0

升级前检查:

mysqlcheck -u root -p --all-databases --check-upgrade

升级步骤:

  1. 备份所有数据
  2. 停止MySQL 5.7服务
  3. 安装MySQL 8.0
  4. 运行mysql_upgrade

8.2 数据迁移方法

使用mysqldump迁移:

mysqldump -u root -p --all-databases | mysql -u root -p -h new_server

使用MySQL Shell并行迁移:

util.dumpInstance("/backup/mysql", {threads: 8})

9. 高可用方案部署

9.1 主从复制配置

主库配置:

[mysqld] server-id=1 log-bin=mysql-bin binlog-format=ROW

从库配置:

CHANGE MASTER TO MASTER_HOST='master_host', MASTER_USER='repl_user', MASTER_PASSWORD='repl_password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=154;

9.2 组复制部署

初始化组复制:

SET GLOBAL group_replication_bootstrap_group=ON; START GROUP_REPLICATION; SET GLOBAL group_replication_bootstrap_group=OFF;

10. 性能优化实践

10.1 索引优化

添加合适索引:

ALTER TABLE orders ADD INDEX idx_customer_date (customer_id, order_date);

检查索引使用:

SELECT * FROM sys.schema_unused_indexes;

10.2 查询优化

重写低效查询:

-- 优化前 SELECT * FROM orders WHERE DATE(order_date) = '2023-01-01'; -- 优化后 SELECT * FROM orders WHERE order_date >= '2023-01-01' AND order_date < '2023-01-02';

10.3 配置参数调优

关键参数调整:

innodb_buffer_pool_size=12G # 总内存的50-70% innodb_buffer_pool_instances=8 innodb_io_capacity=2000 innodb_io_capacity_max=4000

11. 监控与维护

11.1 监控工具部署

Prometheus + Grafana监控方案:

  1. 部署mysqld_exporter
  2. 配置Prometheus抓取
  3. 导入MySQL仪表板到Grafana

11.2 定期维护任务

建议的维护计划:

  1. 每周优化表
  2. 每月分析表统计信息
  3. 每季度检查磁盘碎片

自动化维护脚本示例:

mysqlcheck -u root -p --auto-repair --optimize --all-databases

12. 容器化部署方案

12.1 Docker部署MySQL

运行MySQL容器:

docker run --name mysql8 \ -e MYSQL_ROOT_PASSWORD=my-secret-pw \ -v /my/own/datadir:/var/lib/mysql \ -p 3306:3306 \ -d mysql:8.0

12.2 Kubernetes部署

MySQL StatefulSet示例:

apiVersion: apps/v1 kind: StatefulSet metadata: name: mysql spec: serviceName: mysql replicas: 1 selector: matchLabels: app: mysql template: metadata: labels: app: mysql spec: containers: - name: mysql image: mysql:8.0 env: - name: MYSQL_ROOT_PASSWORD value: "password" ports: - containerPort: 3306 volumeMounts: - name: mysql-persistent-storage mountPath: /var/lib/mysql volumeClaimTemplates: - metadata: name: mysql-persistent-storage spec: accessModes: [ "ReadWriteOnce" ] resources: requests: storage: 20Gi

13. 安全审计与合规

13.1 审计日志配置

启用审计插件:

plugin-load=audit_log.so audit_log_format=JSON audit_log_policy=ALL

13.2 合规检查

执行MySQL安全检查:

mysql_secure_installation

使用mysql_upgrade检查兼容性:

mysql_upgrade -u root -p

14. 故障恢复策略

14.1 数据恢复流程

从备份恢复步骤:

  1. 停止MySQL服务
  2. 清理数据目录
  3. 恢复备份文件
  4. 启动MySQL服务
  5. 应用二进制日志(如有)

14.2 崩溃恢复测试

定期测试恢复流程:

# 创建测试数据库 mysql -u root -p -e "CREATE DATABASE recovery_test" # 模拟备份和恢复流程 mysqldump -u root -p recovery_test > recovery_test.sql mysql -u root -p -e "DROP DATABASE recovery_test" mysql -u root -p < recovery_test.sql

15. 最佳实践总结

15.1 配置规范

建议的配置原则:

  1. 为生产环境设置合适的缓冲池大小
  2. 启用二进制日志用于时间点恢复
  3. 配置合理的连接超时和连接数限制

15.2 运维建议

日常运维要点:

  1. 定期监控磁盘空间使用
  2. 设置自动备份策略
  3. 保持MySQL版本更新
  4. 定期检查错误日志

15.3 性能优化经验

实测有效的优化技巧:

  1. 为频繁查询的列添加合适索引
  2. 避免使用SELECT * 查询
  3. 合理使用连接池
  4. 对大表进行分区处理

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询