MySQL基础02 — 安装与启动相关

前言

本章,您将学习 MySQL 的安装以及与启动相关的知识。

本文档中,作者使用的操作系统为 RockyLinux 8.10

安装方式

您可以使用多种方式安装 MySQL :

  1. 存储库 – 方便快捷
  2. 源代码编译安装 – 后续我们的文档内容都围绕该方式展开
  3. 使用 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
Avatar photo

关于 陸風睿

GNU/Linux 从业者、开源爱好者、技术钻研者,撰写文档既是兴趣也是工作内容之一。Q - "281957576";WeChat - "jiulongxiaotianci",Github - https://github.com/jimcat8
用一杯咖啡支持我们,我们的每一篇[文档]都经过实际操作和精心打磨,而不是简单地从网上复制粘贴。期间投入了大量心血,只为能够真正帮助到您。
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇