第三章 安装部署规范原创
# 第三章 安装部署规范
本章详细规定了 MySQL 8.0 的标准化安装与部署流程,旨在确保一致性、可靠性和安全性。
# 3.1 安装方式选择
MySQL 8.0 提供多种安装方式,各有优劣:
官方 YUM/APT Repository (推荐):
- 优点: 安装、升级、卸载方便,依赖关系由包管理器自动处理。与操作系统集成度高。
- 缺点: 定制性相对较低,版本更新可能略有延迟。
- 适用场景: 大多数标准部署场景,特别是需要快速部署和简化管理的环境。
RPM/DEB 包:
- 优点: 离线安装方便,版本控制精确。
- 缺点: 需要手动处理依赖关系,管理相对复杂。
- 适用场景: 无法访问外网或需要精确控制安装版本的环境。
通用二进制包 (Generic Binaries - tar.gz):
- 优点: 灵活性最高,不依赖特定包管理器,可以安装在任意位置,方便部署多个实例。
- 缺点: 安装步骤相对繁琐,需要手动创建用户、初始化、配置服务脚本等。
- 适用场景: 需要高度定制化安装、同一主机部署多版本/实例、或操作系统没有官方源支持的情况。
源码编译:
- 优点: 完全定制化,可以启用或禁用特定功能,针对特定硬件进行优化。
- 缺点: 过程复杂耗时,需要处理编译依赖,后续维护升级困难。
- 适用场景: 特殊性能优化需求、开发或研究目的。
本 SOP 优先推荐使用官方 YUM/APT Repository 进行安装。对于需要更高灵活性的场景,可以选择通用二进制包方式。
# 3.2 标准安装步骤 (以 CentOS/RHEL YUM 源为例)
前提: 已完成第二章
配置 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
安装 MySQL Server:
# yum install mysql-community-server echo "使用 YUM 安装 MySQL 服务器: yum install mysql-community-server"
1
2这将自动安装服务器、客户端、公共库等必要组件。
后续步骤: 请参考 3.4 数据库初始化 及之后的小节。
# 3.3 标准安装步骤 (以通用二进制包为例)
前提: 已完成第二章 mysql
用户和组的创建,以及目录规划与授权。
下载并解压二进制包:
- 从 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
- 从 MySQL 官网下载适用于 Linux 通用版 (glibc 2.17 或更高) 的
创建配置文件: 参考 3.4 配置文件规范 创建
my.cnf
。创建数据目录并授权: (已在环境准备中完成)
# 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初始化数据库:
# 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 密码。
- 重要: 如果使用
配置系统服务 (可选但推荐):
- 将
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
3mysqld.service
文件并使用systemctl enable mysqld
和systemctl start mysqld
管理。 echo "请根据您的系统 (SysVinit 或 systemd) 配置 MySQL 服务脚本,以便使用 service 或 systemctl 命令管理。"
- 将
后续步骤: 请参考 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
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
上次更新: 4/24/2025