Carry の Blog Carry の Blog
首页
  • Nginx
  • Prometheus
  • Iptables
  • Systemd
  • Firewalld
  • Docker
  • Sshd
  • DBA工作笔记
  • MySQL
  • Redis
  • TiDB
  • Elasticsearch
  • Python
  • Shell
  • MySQL8-SOP手册
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Carry の Blog

好记性不如烂键盘
首页
  • Nginx
  • Prometheus
  • Iptables
  • Systemd
  • Firewalld
  • Docker
  • Sshd
  • DBA工作笔记
  • MySQL
  • Redis
  • TiDB
  • Elasticsearch
  • Python
  • Shell
  • MySQL8-SOP手册
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • MySQL8-SOP

    • 第一章 概述
    • 第二章 环境准备
    • 第三章 安装部署规范
      • 3.1 安装方式选择
      • 3.2 标准安装步骤 (以 CentOS/RHEL YUM 源为例)
      • 3.3 标准安装步骤 (以通用二进制包为例)
      • 3.4 配置文件规范 (my.cnf)
    • 第四章 ReplicaSet高可用配置
    • 第五章 监控与日常维护
    • 第六章 故障处理手册
    • 第七章 安全与权限管理
    • 第八章 扩展与升级方案
    • 附录
  • 专题系列
  • MySQL8-SOP
Carry の Blog
2024-01-09
目录

第三章 安装部署规范原创

# 第三章 安装部署规范

本章详细规定了 MySQL 8.0 的标准化安装与部署流程,旨在确保一致性、可靠性和安全性。

# 3.1 安装方式选择

MySQL 8.0 提供多种安装方式,各有优劣:

  1. 官方 YUM/APT Repository (推荐):

    • 优点: 安装、升级、卸载方便,依赖关系由包管理器自动处理。与操作系统集成度高。
    • 缺点: 定制性相对较低,版本更新可能略有延迟。
    • 适用场景: 大多数标准部署场景,特别是需要快速部署和简化管理的环境。
  2. RPM/DEB 包:

    • 优点: 离线安装方便,版本控制精确。
    • 缺点: 需要手动处理依赖关系,管理相对复杂。
    • 适用场景: 无法访问外网或需要精确控制安装版本的环境。
  3. 通用二进制包 (Generic Binaries - tar.gz):

    • 优点: 灵活性最高,不依赖特定包管理器,可以安装在任意位置,方便部署多个实例。
    • 缺点: 安装步骤相对繁琐,需要手动创建用户、初始化、配置服务脚本等。
    • 适用场景: 需要高度定制化安装、同一主机部署多版本/实例、或操作系统没有官方源支持的情况。
  4. 源码编译:

    • 优点: 完全定制化,可以启用或禁用特定功能,针对特定硬件进行优化。
    • 缺点: 过程复杂耗时,需要处理编译依赖,后续维护升级困难。
    • 适用场景: 特殊性能优化需求、开发或研究目的。

本 SOP 优先推荐使用官方 YUM/APT Repository 进行安装。对于需要更高灵活性的场景,可以选择通用二进制包方式。

# 3.2 标准安装步骤 (以 CentOS/RHEL YUM 源为例)

前提: 已完成第二章 中的所有准备工作。

  1. 配置 MySQL YUM Repository:

    • 访问 MySQL 官方网站下载对应操作系统版本的 Repository RPM 包。
    • 例如: mysql80-community-release-el7-x.noarch.rpm
    • 安装 Repository RPM 包:
      # rpm -Uvh mysql80-community-release-el<version>-<release>.noarch.rpm
      echo "请下载并安装适合您操作系统版本的 MySQL YUM Repository RPM 包"
      echo "例如: rpm -Uvh mysql80-community-release-el7-x.noarch.rpm"
      
      1
      2
      3
    • (可选) 禁用默认的 MySQL 模块 (CentOS/RHEL 8+):
      # yum module disable mysql
      echo "对于 RHEL/CentOS 8+, 可能需要禁用系统自带的 mysql 模块: yum module disable mysql"
      
      1
      2
  2. 安装 MySQL Server:

    # yum install mysql-community-server
    echo "使用 YUM 安装 MySQL 服务器: yum install mysql-community-server"
    
    1
    2

    这将自动安装服务器、客户端、公共库等必要组件。

  3. 后续步骤: 请参考 3.4 数据库初始化 及之后的小节。

# 3.3 标准安装步骤 (以通用二进制包为例)

前提: 已完成第二章 中的所有准备工作,特别是 mysql 用户和组的创建,以及目录规划与授权。

  1. 下载并解压二进制包:

    • 从 MySQL 官网下载适用于 Linux 通用版 (glibc 2.17 或更高) 的 tar.xz 压缩包。
    • 解压到目标安装目录,例如 /usr/local/。
      # cd /usr/local
      # tar -Jxvf /path/to/mysql-8.0.xx-linux-glibc2.17-x86_64.tar.xz
      # ln -s mysql-8.0.xx-linux-glibc2.17-x86_64 mysql
      echo "请下载 MySQL 通用二进制包 (tar.xz),解压到安装目录 (如 /usr/local/),并创建软链接"
      echo "例如: cd /usr/local && tar -Jxvf /path/to/mysql-*.tar.xz && ln -s mysql-8.0.xx-* mysql"
      
      1
      2
      3
      4
      5
  2. 创建配置文件: 参考 3.4 配置文件规范 创建 my.cnf。

  3. 创建数据目录并授权: (已在环境准备中完成)

    # mkdir -p /data/mysql/data
    # chown -R mysql:mysql /data/mysql
    # chmod 700 /data/mysql/data # 确保数据目录权限正确
    echo "请确保数据目录 (如 /data/mysql/data) 已创建并设置正确的属主(mysql:mysql)和权限(700)"
    
    1
    2
    3
    4
  4. 初始化数据库:

    # cd /usr/local/mysql
    # bin/mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql/data
    echo "执行初始化命令,例如: bin/mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql/data"
    echo "注意: --initialize 会生成随机密码,--initialize-insecure 不生成密码,后续需要手动设置。"
    
    1
    2
    3
    4
    • 重要: 如果使用 --initialize (非 --insecure),请务必记录错误日志中输出的临时 root 密码。
  5. 配置系统服务 (可选但推荐):

    • 将 support-files/mysql.server 脚本复制到 /etc/init.d/ 并配置。
    • 或者,创建 systemd 服务单元文件 (/etc/systemd/system/mysqld.service)。
    • 由于 systemctl 命令受限,此处仅作说明:
      # cp support-files/mysql.server /etc/init.d/mysqld
      # chkconfig --add mysqld
      # chkconfig mysqld on
      
      1
      2
      3
      或创建 mysqld.service 文件并使用 systemctl enable mysqld 和 systemctl start mysqld 管理。 echo "请根据您的系统 (SysVinit 或 systemd) 配置 MySQL 服务脚本,以便使用 service 或 systemctl 命令管理。"
  6. 后续步骤: 请参考 3.5 服务启动与安全设置 及之后的小节。

# 3.4 配置文件规范 (my.cnf)

MySQL 的主配置文件通常位于 /etc/my.cnf 或 /etc/mysql/my.cnf (取决于安装方式)。对于二进制安装,可以在 basedir 或 datadir 下创建。

以下是一个基础的生产环境配置模板,请根据实际硬件和业务需求调整:

# /etc/my.cnf or /etc/mysql/my.cnf

[client]
port            = 3306
socket          = /var/lib/mysql/mysql.sock # 根据实际路径调整

[mysql]
# prompt = "\\u@\\h [\\d]> " # 可选:自定义命令行提示符
auto-rehash                     # 可选:启用自动补全

[mysqld]
# --- 基础设置 ---
user            = mysql
port            = 3306
basedir         = /usr/local/mysql          # 二进制安装时指定,YUM/APT 通常不需要
datadir         = /data/mysql/data          # **重要**: 必须与初始化时指定的路径一致
socket          = /var/lib/mysql/mysql.sock # **重要**: 确保路径存在且 mysql 用户有权限
pid-file        = /var/run/mysqld/mysqld.pid # 确保目录存在且 mysql 用户有权限
character-set-server = utf8mb4
collation-server     = utf8mb4_0900_ai_ci
skip-external-locking
explicit_defaults_for_timestamp = ON

# --- 日志设置 ---
log_error       = /data/mysql/logs/errorlog/mysql_error.log # **重要**: 指定错误日志路径
slow_query_log  = 1
slow_query_log_file = /data/mysql/logs/slowlog/mysql_slow.log # 慢查询日志路径
long_query_time = 1                             # 记录执行时间超过 1 秒的查询
log_queries_not_using_indexes = OFF             # 可选:是否记录未使用索引的查询

# --- Binlog (复制和恢复需要) ---
server_id       = 1                             # **重要**: 集群中必须唯一
log_bin         = /data/mysql/logs/binlog/mysql-bin # **重要**: Binlog 基础文件名和路径
binlog_format   = ROW                           # 推荐使用 ROW 格式
sync_binlog     = 1                             # 每次事务提交同步 binlog 到磁盘,保证数据安全
expire_logs_days = 7                            # Binlog 保留天数,根据备份策略调整
max_binlog_size = 1G                            # 单个 Binlog 文件大小

# --- InnoDB 存储引擎 ---
default_storage_engine = InnoDB
innodb_data_file_path = ibdata1:12M:autoextend   # InnoDB 系统表空间配置
innodb_buffer_pool_size = 10G                   # **重要**: 核心参数,通常设为物理内存的 50%-70%
innodb_log_file_size    = 1G                    # **重要**: Redo Log 文件大小,影响写入性能和恢复速度
innodb_log_files_in_group = 2                   # Redo Log 文件数量
innodb_flush_log_at_trx_commit = 1              # 每次事务提交写 Redo Log 并刷盘,最高数据安全性 (类比 sync_binlog=1)
innodb_flush_method = O_DIRECT                  # 推荐,绕过文件系统缓存,减少双重缓冲
innodb_file_per_table = 1                       # 独立表空间,推荐
innodb_log_buffer_size = 16M                    # Redo Log 缓冲区大小
innodb_open_files = 4096                        # InnoDB 能打开的文件句柄数
innodb_io_capacity = 2000                       # 根据磁盘 IOPS 设置,SSD 可设更高 (如 5000+)
innodb_io_capacity_max = 4000                   # IOPS 上限

# --- 连接与内存 ---
max_connections = 500                           # 最大并发连接数,根据应用需求和服务器资源调整
max_connect_errors = 10000                      # 允许的最大连接错误次数
interactive_timeout = 600                       # 交互式连接超时时间 (秒)
wait_timeout = 600                              # 非交互式连接超时时间 (秒)
tmp_table_size = 64M                            # 内存临时表大小
max_heap_table_size = 64M                       # 用户创建的 MEMORY 表大小

# --- 安全相关 ---
# skip-name-resolve = ON                        # 可选:禁用 DNS 反向解析,加快连接速度,但 GRANT 必须用 IP
default_authentication_plugin = caching_sha2_password # MySQL 8 默认,更安全

# --- MySQL 8.0 新特性相关 (可选) ---
# innodb_dedicated_server = ON                  # 让 MySQL 自动配置 InnoDB 参数 (适用于独占服务器)
# temptable_max_ram = 1G                        # 8.0.16+ 内存临时表总大小限制

# --- 复制相关 (从库配置) ---
# read_only = ON                                # 从库建议设为只读
# super_read_only = ON                          # 更严格的只读模式
# report_host = slave_ip_address                # 向主库报告自己的 IP
# report_port = 3306                            # 向主库报告自己的端口

[mysqldump]
quick
max_allowed_packet = 64M                        # mysqldump 客户端允许的最大包大小

[mysqladmin]
socket=/var/lib/mysql/mysql.sock                # 指定 socket 文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#MySQL#数据库#安装部署
上次更新: 4/24/2025

← 第二章 环境准备 第四章 ReplicaSet高可用配置→

最近更新
01
tidb fast ddl
04-04
02
TiDB配置文件调优 原创
04-03
03
如何移除TiDB中的表分区 原创
04-03
更多文章>
Theme by Vdoing
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式