前言
本章,您将学习 MySQL 的安装以及与启动相关的知识。
本文档中,作者使用的操作系统为 RockyLinux 8.10
安装方式
您可以使用多种方式安装 MySQL :
- 存储库 – 方便快捷
- 源代码编译安装 – 后续我们的文档内容都围绕该方式展开
- 使用 docker 等容器技术安进行安装(不建议在生产环境下使用)
存储库
在 RockyLinux 官方的 AppStream 存储库中,您可以安装 MySQL 的模块化应用程序流:
Shell > dnf module list mysql
Rocky Linux 8 - AppStream
Name Stream Profiles Summary
mysql 8.0 [d] client, server [d] MySQL Module
Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled
# 指定模块流和模块流配置集
## 模块流配置集:规定了为特定使用场景而绑定在一起的一组软件包列表
Shell > dnf -y module install mysql:8.0/server
除了使用 RockyLinux 官方的存储库,您还可以选择 MySQL 官方的存储库:
# 先禁用 MySQL 的模块流
Shell > dnf -y module disable mysql
Shell > dnf module list mysql
Last metadata expiration check: 0:04:08 ago on Sat 26 Jul 2025 09:44:56 AM CST.
Rocky Linux 8 - AppStream
Name Stream Profiles Summary
mysql 8.0 [d][x] client, server [d] MySQL Module
Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled
# 需要先安装存储库,安装之后则会释放公钥文件以及存储库文件
Shell > wget https://dev.mysql.com/get/mysql84-community-release-el8-2.noarch.rpm
Shell > dnf install mysql84-community-release-el8-2.noarch.rpm
Shell > rpm -ql mysql84-community-release
/etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
/etc/pki/rpm-gpg/RPM-GPG-KEY-mysql-2022
/etc/pki/rpm-gpg/RPM-GPG-KEY-mysql-2023
/etc/yum.repos.d/mysql-community-debuginfo.repo
/etc/yum.repos.d/mysql-community-source.repo
/etc/yum.repos.d/mysql-community.repo
# 默认会启用这三个存储库,这些存储库与 MySQL 8.4 lts 相关
Shell > dnf repolist
repo id repo name
...
mysql-8.4-lts-community MySQL 8.4 LTS Community Server
mysql-connectors-community MySQL Connectors Community
mysql-tools-8.4-lts-community MySQL Tools 8.4 LTS Community
# 安装 8.4 LTS 版本,这将安装 MySQL 服务器的软件包以及相关的组件
Shell > dnf -y install mysql-community-server
# 若需要 MySQL 8.0 的版本,则需要启用相关的存储库(请注意!这个操作是永久启用而非临时启用)
Shell > dnf config-manager --disable mysql-8.4-lts-community mysql-tools-8.4-lts-community
Shell > dnf config-manager --enable mysql80-community
# 安装 8.0 版本,这将安装 MySQL 服务器的软件包以及相关的组件
Shell > dnf -y install mysql-community-server
启动相关
# 首次启动
Shell > systemctl start mysqld.service
MySQL 服务器首次启动后,如果服务器的数据目录为空,这将会发生:
- MySQL 服务器执行初始化
- 在数据目录中生成 SSL 证书以及密钥文件
- 启用并安装
validate_password
-
创建超级用户 root 并将用户的密码写入到错误文件中。要显示该密码,请执行以下操作:
Shell > grep "temporary password" /var/log/mysqld.log
初次使用时,您需要更改 root 的密码:
Shell > mysql -u root -p Mysql > alter user 'root'@'localhost' identified by 'MyNewPass4!';
密码策略要求:至少包含一个大写字母、一个小写字母、一个数字和一个特殊字符,并且密码总长度至少为 8 个字符
停止 MySQL 守护进程:
Shell > systemctl stop mysqld.service
源代码编译安装
准备工作:
# 准备依赖包
Shell > dnf -y install libaio libaio-devel ncurses-compat-libs ncurses ncurses-devel make cmake gcc bison git libtirpc libtirpc-devel openssl openssl-devel gcc-toolset-12-gcc gcc-toolset-12-gcc-c++ gcc-toolset-12-binutils gcc-toolset-12-annobin-annocheck gcc-toolset-12-annobin-plugin-gcc
# rpcgen 软件包依赖需要开启 devel 存储库
Shell > dnf config-manager --enable devel
Shell > dnf -y install rpcgen
Shell > dnf config-manager --disable devel
# 创建伪用户
Shell > groupadd -r mysql
Shell > useradd -r -g mysql -s /sbin/nologin mysql
Shell > id mysql
uid=994(mysql) gid=990(mysql) groups=990(mysql)
# 创建需要的目录以及递归变更目录所有者所属组
Shell > mkdir -p /usr/local/mysql8/data
Shell > chown -R mysql:mysql /usr/local/mysql8/
下载 MySQL 源代码压缩包并进行解压:
# 版本为 8.4.6
Shell > wget https://dev.mysql.com/get/Downloads/MySQL-8.4/mysql-8.4.6.tar.gz
# 解压提取
Shell > tar -vxf mysql-8.4.6.tar.gz -C /usr/local/src/
Shell > ls -lh /usr/local/src/mysql-8.4.6/
total 696K
drwxr-xr-x 7 7161 31415 4.0K Jul 10 22:52 client
drwxr-xr-x 4 7161 31415 4.0K Jul 10 22:52 cmake
-rw-r--r-- 1 7161 31415 98K Jul 10 22:20 CMakeLists.txt
drwxr-xr-x 17 7161 31415 4.0K Jul 10 22:52 components
-rw-r--r-- 1 7161 31415 11K Jul 10 22:20 config.h.cmake
-rw-r--r-- 1 7161 31415 24K Jul 10 22:20 configure.cmake
-rw-r--r-- 1 7161 31415 996 Jul 10 22:20 CONTRIBUTING.md
drwxr-xr-x 2 7161 31415 4.0K Jul 10 22:52 Docs
-rw-r--r-- 1 7161 31415 5.4K Jul 10 22:20 Doxyfile-ignored
-rw-r--r-- 1 7161 31415 121K Jul 10 22:20 Doxyfile.in
drwxr-xr-x 3 7161 31415 4.0K Jul 10 22:52 doxygen_resources
drwxr-xr-x 22 7161 31415 4.0K Jul 10 22:52 extra
drwxr-xr-x 4 7161 31415 4.0K Jul 10 22:52 include
-rw-r--r-- 1 7161 31415 333 Jul 10 22:20 INSTALL
drwxr-xr-x 3 7161 31415 4.0K Jul 10 22:52 libbinlogevents
drwxr-xr-x 4 7161 31415 4.0K Jul 10 22:52 libchangestreams
drwxr-xr-x 7 7161 31415 4.0K Jul 10 22:52 libmysql
drwxr-xr-x 3 7161 31415 4.0K Jul 10 22:52 libs
drwxr-xr-x 2 7161 31415 4.0K Jul 10 22:52 libservices
-rw-r--r-- 1 7161 31415 254K Jul 10 22:20 LICENSE
drwxr-xr-x 2 7161 31415 4.0K Jul 10 22:52 man
drwxr-xr-x 10 7161 31415 4.0K Jul 10 22:52 mysql-test
-rw-r--r-- 1 7161 31415 116 Jul 10 22:20 MYSQL_VERSION
drwxr-xr-x 2 7161 31415 4.0K Jul 10 22:52 mysys
drwxr-xr-x 10 7161 31415 4.0K Jul 10 22:52 packaging
drwxr-xr-x 24 7161 31415 4.0K Jul 10 22:52 plugin
-rw-r--r-- 1 7161 31415 666 Jul 10 22:20 README
drwxr-xr-x 6 7161 31415 4.0K Jul 10 22:52 router
-rw-r--r-- 1 7161 31415 6.2K Jul 10 22:20 run_doxygen.cmake
drwxr-xr-x 5 7161 31415 4.0K Jul 10 22:52 scripts
-rw-r--r-- 1 7161 31415 1.7K Jul 10 22:20 SECURITY.md
drwxr-xr-x 3 7161 31415 4.0K Jul 10 22:52 share
drwxr-xr-x 25 7161 31415 32K Jul 10 22:53 sql
drwxr-xr-x 3 7161 31415 4.0K Jul 10 22:52 sql-common
drwxr-xr-x 15 7161 31415 4.0K Jul 10 22:52 storage
drwxr-xr-x 3 7161 31415 4.0K Jul 10 22:52 strings
drwxr-xr-x 2 7161 31415 4.0K Jul 10 22:52 support-files
drwxr-xr-x 2 7161 31415 4.0K Jul 10 22:52 testclients
drwxr-xr-x 5 7161 31415 4.0K Jul 10 22:52 unittest
drwxr-xr-x 2 7161 31415 4.0K Jul 10 22:52 utilities
drwxr-xr-x 2 7161 31415 4.0K Jul 10 22:52 vio
常见的编译选项说明:
-DCMAKE_INSTALL_PREFIX=dir_name
– 指定安装的目录-DCMAKE_BUILD_TYPE=type
– 指定构建类型,默认 RelWithDebInfo 即可-DDEFAULT_CHARSET=charset_name
– 指定字符集,默认 utf8mb4 即可-DDEFAULT_COLLATION=collation_name
– 指定排序规则,默认 utf8mb4_0900_ai_ci 即可-DENABLED_LOCAL_INFILE=bool
– 是否启用数据的导入导出-DSYSCONFDIR=dir_name
– 存放 my.conf 的目录-DMYSQLX_UNIX_ADDR=file_name
– 指定绝对路径的 UNIX 套接字文件,默认为 /tmp/mysqlx.sock-DMYSQL_TCP_PORT=port_num
– 指定端口,默认 3306-DSYSTEMD_PID_DIR=dir_name
– 当 MySQL 由 systemd 管理时,PID 文件所在的目录名称,其默认值为 /var/run/mysqld/-DMYSQL_DATADIR=dir_name
– 指定 MySQL 的数据目录-DTMPDIR=dir_name
– 指定存放系统变量的临时目录
具体的操作如下:
Shell > cd /usr/local/src/mysql-8.4.6/ && mkdir build
Shell > cd build/
# "\" 表示命令还没有结束
Shell > cmake .. \
-DDEFAULT_CHARSET=utf8mb4 \
-DDEFAULT_COLLATION=utf8mb4_0900_ai_ci \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql8/ \
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
-DENABLED_LOCAL_INFILE=1 \
-DMYSQL_TCP_PORT=3306 \
-DMYSQL_DATADIR=/usr/local/mysql8/data/ \
&& make && make install
构建过程的输出文本类似这样的:
[ 0%] Building CXX object extra/abseil/abseil-cpp-20230802.1/absl/numeric/CMakeFiles/absl_int128.dir/int128.cc.o
[ 1%] Linking CXX shared library ../../../../../library_output_directory/libabsl_int128.so
[ 1%] Built target absl_int128
[ 1%] Building CXX object extra/abseil/abseil-cpp-20230802.1/absl/strings/CMakeFiles/absl_string_view.dir/string_view.cc.o
根据硬件性能,等待一段时间即可完成(1小时以上),释放出的文件如下所示:
Shell > ls -lh /usr/local/mysql8/
total 688K
drwxr-xr-x 2 root root 4.0K Jul 27 00:24 bin
drwxr-xr-x 2 mysql mysql 4.0K Jul 26 10:42 data
drwxr-xr-x 2 root root 4.0K Jul 27 00:24 docs
drwxr-xr-x 3 root root 4.0K Jul 27 00:23 include
drwxr-xr-x 6 root root 4.0K Jul 27 00:23 lib
-rw-r--r-- 1 root root 254K Jul 10 22:20 LICENSE
-rw-r--r-- 1 root root 114K Jul 10 22:20 LICENSE.router
-rw-r--r-- 1 root root 254K Jul 10 22:20 LICENSE-test
drwxr-xr-x 4 root root 4.0K Jul 27 00:24 man
-rw-r--r-- 1 root root 1.7K Jul 26 21:01 mysqlrouter-log-rotate
drwxr-xr-x 10 root root 4.0K Jul 27 00:24 mysql-test
-rw-r--r-- 1 root root 666 Jul 10 22:20 README
-rw-r--r-- 1 root root 679 Jul 10 22:20 README.router
-rw-r--r-- 1 root root 666 Jul 10 22:20 README-test
drwxrwxr-x 2 root root 4.0K Jul 27 00:24 run
drwxr-xr-x 28 root root 4.0K Jul 27 00:24 share
drwxr-xr-x 2 root root 4.0K Jul 27 00:24 support-files
drwxr-xr-x 3 root root 4.0K Jul 27 00:24 var
执行初始化:
Shell > chown -R mysql:mysql /usr/local/mysql8/
Shell > chmod -R 755 /usr/local/mysql8/
# 这是我们的临时密码——eD04kGLYJo<r
## 如果遇到初始化错误,请清空数据目录(我这里指的是 /usr/local/mysql8/data/ 目录)
Shell > /usr/local/mysql8/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql8/ --datadir=/usr/local/mysql8/data/
2025-07-27T04:56:20.682579Z 0 [System] [MY-015017] [Server] MySQL Server Initialization - start.
2025-07-27T04:56:20.684346Z 0 [System] [MY-013169] [Server] /usr/local/mysql8/bin/mysqld (mysqld 8.4.6) initializing of server in progress as process 1606
2025-07-27T04:56:20.696137Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2025-07-27T04:56:20.960314Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
2025-07-27T04:56:22.001144Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: eD04kGLYJo<r
2025-07-27T04:56:23.708005Z 0 [System] [MY-015018] [Server] MySQL Server Initialization - end.
启动相关
执行以下操作启动 Mysql:
# "&" 指的是将当前进程放入到后台
## 默认的错误日志 —— /usr/local/mysql8/data/HOME01.err'
Shell > /usr/local/mysql8/bin/mysqld_safe --user=mysql &
Shell > ss -tulnp
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
udp UNCONN 0 0 127.0.0.1:323 0.0.0.0:* users:(("chronyd",pid=780,fd=5))
udp UNCONN 0 0 [::1]:323 [::]:* users:(("chronyd",pid=780,fd=6))
tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=790,fd=3))
tcp LISTEN 0 70 *:33060 *:* users:(("mysqld",pid=1744,fd=18))
tcp LISTEN 0 151 *:3306 *:* users:(("mysqld",pid=1744,fd=21))
tcp LISTEN 0 128 [::]:22 [::]:* users:(("sshd",pid=790,fd=4))
修改 root 用户的密码:
Shell > /usr/local/mysql8/bin/mysql -u root --password="eD04kGLYJo<r"
Mysql > ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass4!';
Query OK, 0 rows affected (0.01 sec)
停止 MySQL :
Shell > /usr/local/mysql8/bin/mysqladmin -u root -p shutdown
Enter password: (enter root password here)
docker 版 MySQL
Shell > systemctl start docker.service
Shell > docker pull mysql:8.4.6
Shell > docker inspect mysql:8.4.6
# -p 指定端口映射,冒号左边为宿主机端口,右边为容器实例端口
# -v 指定容器数据卷,冒号左边为宿主机的路径,冒号右边为容器实例的路径
# -e 即 ENV,表示设置 MySQL 当中的环境变量
Shell > mkdir -p /docker/mysql/data/
Shell > docker run -d -p 3306:3306 --name=mysql8 --privileged=true \
-v /docker/mysql/data/:/var/lib/mysql/:rw -e MYSQL_ROOT_PASSWORD=MyNewPass4! mysql:8.4.6 \
--character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
Shell > docker ps
Shell > docker exec -it mysql8 /bin/bash
bash-4.4# mysql -u root --password='MyNewPass4!'
在 docker 版的 MySQL 中:
- /var/lib/mysql/ – MySQL 初始化成功之后的数据目录(datadir)
- /etc/my.cnf – MySQL 的配置文件
若要查看该容器实例有关日志方面的消息,请执行以下命令:
Shell > docker logs mysql8
启动相关
Shell > docker start mysql8
Shell > docker stop mysql8
Shell > docker restart mysql8
版权声明:「自由转载-保持署名-非商业性使用-禁止演绎 3.0 国际」(CC BY-NC-ND 3.0)

用一杯咖啡支持我们,我们的每一篇[文档]都经过实际操作和精心打磨,而不是简单地从网上复制粘贴。期间投入了大量心血,只为能够真正帮助到您。
暂无评论