文档说明

本文针对 Ubuntu 20.04/22.04/24.04 系统,从「MySQL 8 官方源安装」「服务基础管理」「登录配置」「端口管理」「远程访问配置」到「安全加固」进行全流程拆解,每个知识点配套带详细注释的代码示例,适配初学者学习和实操需求。

一、核心知识点 1:MySQL 8 基于官方 APT 源的安装

知识点说明

Ubuntu 官方软件源中的 MySQL 版本可能非 8.x,且更新不及时,因此优先使用 MySQL 官方 APT 源安装,保证版本最新且稳定。核心步骤为「更新系统依赖 → 下载官方源配置包 → 配置源版本 → 安装服务 → 验证安装」。

代码示例(带注释)

# 1. 更新系统包列表并升级已安装包,避免依赖冲突
sudo apt update && sudo apt upgrade -y

# 2. 安装wget工具(用于下载官方源配置包,若已安装可跳过)
sudo apt install wget -y

# 3. 下载MySQL官方APT源配置包(适配所有Ubuntu版本)
wget https://dev.mysql.com/get/mysql-apt-config_0.8.26-1_all.deb

# 4. 安装配置包(安装时会弹出交互菜单,选择MySQL 8.0后确认)
sudo dpkg -i mysql-apt-config_0.8.26-1_all.deb

# 5. 刷新包列表,让系统识别新添加的MySQL源
sudo apt update

# 6. 安装MySQL 8服务器(安装中会提示设置root密码,务必设置强密码)
sudo apt install mysql-server -y

# 7. 验证安装:检查MySQL服务状态(active(running)表示正常)
sudo systemctl status mysql

# 8. 验证MySQL版本(输出包含8.0.x即为成功)
mysql -V

二、核心知识点 2:MySQL 服务基础管理

知识点说明

MySQL 服务的启动、停止、重启、状态查看、开机自启配置是日常运维的基础,Ubuntu 系统通过 systemctl 命令管理系统服务,需熟练掌握核心操作。

代码示例(带注释)

# 1. 启动MySQL服务(安装后默认自动启动,异常时手动启动)
sudo systemctl start mysql

# 2. 停止MySQL服务(修改配置后需停止再重启)
sudo systemctl stop mysql

# 3. 重启MySQL服务(配置修改后生效必备)
sudo systemctl restart mysql

# 4. 查看MySQL服务状态(核心:确认是否running)
sudo systemctl status mysql

# 5. 设置MySQL开机自启(推荐,避免服务器重启后服务中断)
sudo systemctl enable mysql

# 6. 关闭MySQL开机自启(仅测试环境临时使用)
sudo systemctl disable mysql

三、核心知识点 3:MySQL 登录方式与密码配置(适配 8.x 认证规则)

知识点说明

MySQL 8 对本地 root 用户默认采用 auth_socket 插件认证(免密,仅允许 sudo 登录),需手动修改为密码认证;若忘记密码,可通过跳过权限表的方式重置。核心要点:MySQL 8 推荐使用 caching_sha2_password 认证插件(替代 5.7 的 mysql_native_password)。

代码示例(带注释)

示例 1:本地免密登录(默认方式)

# 仅允许sudo权限登录,无需输入密码,直接进入MySQL命令行
sudo mysql -u root

示例 2:修改 root 为密码登录(初学者常用)

# 1. 先通过sudo免密登录MySQL
sudo mysql -u root

# 2. 在MySQL命令行执行:修改root认证插件为密码认证(替换为自己的强密码)
ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'YourStrongPassword123!';
# 刷新权限,使配置立即生效
FLUSH PRIVILEGES;
# 退出MySQL命令行
exit;

# 3. 密码登录测试(执行后输入密码即可)
mysql -u root -p

示例 3:忘记 root 密码重置(应急操作)

# 1. 停止MySQL服务
sudo systemctl stop mysql

# 2. 跳过权限表启动MySQL(&表示后台运行,避免终端卡死)
sudo mysqld_safe --skip-grant-tables --skip-networking &

# 3. 免密登录MySQL
mysql -u root

# 4. 在MySQL命令行重置密码(适配8.x插件)
USE mysql; # 切换到mysql系统数据库
ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'NewStrongPassword456!';
FLUSH PRIVILEGES; # 刷新权限
exit; # 退出

# 5. 重启MySQL服务,恢复正常模式
sudo systemctl restart mysql

# 6. 用新密码登录验证
mysql -u root -p

四、核心知识点 4:MySQL 端口查看与自定义配置

知识点说明

MySQL 默认端口为 3306,可通过「配置文件」「MySQL 命令行」「系统监听工具」三种方式查看端口;修改端口可降低被扫描风险,需修改配置文件并重启服务。

代码示例(带注释)

示例 1:三种方式查看端口

# 方式1:查看配置文件中的端口(注释表示使用默认3306)
sudo grep -n 'port' /etc/mysql/mysql.conf.d/mysqld.cnf

# 方式2:登录MySQL命令行查看生效端口
sudo mysql -u root # 免密登录
SHOW VARIABLES LIKE 'port'; # 执行后Value列显示当前端口
exit;

# 方式3:查看系统实际监听的端口(ss为Ubuntu新版推荐工具)
sudo ss -tulpn | grep mysql
# 输出示例:0.0.0.0:3306 表示监听所有IP的3306端口

示例 2:自定义 MySQL 端口(如改为 33060)

# 1. 编辑MySQL配置文件
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

# 2. 在[mysqld]模块下新增/修改端口配置(取消注释并修改)
# 手动添加:port = 33060
# 保存退出:Ctrl+O → 回车 → Ctrl+X

# 3. 重启MySQL服务使配置生效
sudo systemctl restart mysql

# 4. 验证新端口(查看系统监听状态)
sudo ss -tulpn | grep mysql # 应显示0.0.0.0:33060

# 5. 开放防火墙新端口(若启用UFW)
sudo ufw allow 33060/tcp
sudo ufw reload

# 6. 用新端口登录测试
mysql -u root -p -P 33060 # -P指定端口(大写P)

五、核心知识点 5:MySQL 允许所有 IP 远程访问(核心配置)

知识点说明

MySQL 默认仅监听本地 IP(127.0.0.1),需完成「修改监听地址 → 授权远程用户 → 开放防火墙/安全组」三步才能允许所有 IP 访问;生产环境建议限制指定 IP,仅测试环境用「%」表示所有 IP。

代码示例(带注释)

示例 1:完整配置所有 IP 远程访问

# 步骤1:修改MySQL监听地址(允许所有IP)
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
# 找到bind-address = 127.0.0.1,改为:bind-address = 0.0.0.0
# 保存退出:Ctrl+O → 回车 → Ctrl+X

# 步骤2:授权用户远程访问(以root为例,生产环境建议新建专用用户)
sudo mysql -u root # 本地登录MySQL
# 授权root从所有IP访问所有数据库(替换为自己的密码)
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED WITH caching_sha2_password BY 'YourStrongPassword123!';
FLUSH PRIVILEGES; # 刷新权限
exit;

# 步骤3:重启MySQL服务
sudo systemctl restart mysql

# 步骤4:开放Ubuntu防火墙3306端口(若启用UFW)
sudo ufw allow 3306/tcp # 开放3306端口
sudo ufw reload # 重载规则
sudo ufw status # 验证:显示3306/tcp ALLOW Anywhere

# 步骤5:云服务器额外操作(必做)
# 登录云服务器控制台(阿里云/腾讯云等),在「安全组」中新增入站规则:
# 协议:TCP,端口:3306,来源:0.0.0.0/0(测试)/指定IP(生产)

# 步骤6:远程连接测试(从其他机器执行)
mysql -h 服务器公网IP -u root -p # 输入密码即可登录

示例 2:生产环境推荐 - 授权指定 IP 访问(替代所有 IP)

sudo mysql -u root
# 仅允许192.168.1.100这个IP访问(替换为业务服务器IP)
GRANT SELECT, INSERT, UPDATE ON test_db.* TO 'remote_user'@'192.168.1.100' IDENTIFIED WITH caching_sha2_password BY 'StrongPassword789!';
FLUSH PRIVILEGES;
exit;

六、核心知识点 6:MySQL 安全加固(初学者必做)

知识点说明

MySQL 安装后默认配置存在安全风险,需通过官方安全脚本加固,同时遵循「权限最小化」「禁用root远程」「强密码」等原则,降低被攻击风险。

代码示例(带注释)

示例 1:执行官方安全加固脚本

sudo mysql_secure_installation
# 按提示操作(注释为推荐选择):
# 1. Enter password for root: 输入root密码
# 2. Validate password component? [Y/n] Y # 启用密码强度验证
# 3. Change the password for root? [Y/n] N # 若已设置强密码则选N
# 4. Remove anonymous users? [Y/n] Y # 移除匿名用户(避免未授权访问)
# 5. Disallow root login remotely? [Y/n] Y # 禁用root远程(生产必选)
# 6. Remove test database and access to it? [Y/n] Y # 删除测试数据库
# 7. Reload privilege tables now? [Y/n] Y # 刷新权限

示例 2:生产环境 - 新建低权限远程用户(替代root)

sudo mysql -u root
# 1. 新建用户(仅允许192.168.1.0/24网段访问)
CREATE USER 'app_user'@'192.168.1.%' IDENTIFIED WITH caching_sha2_password BY 'AppPassword123!';
# 2. 仅授权访问指定数据库(test_db)的增删改查权限
GRANT SELECT, INSERT, UPDATE, DELETE ON test_db.* TO 'app_user'@'192.168.1.%';
# 3. 禁止用户授权给其他用户(权限最小化)
REVOKE GRANT OPTION ON test_db.* FROM 'app_user'@'192.168.1.%';
# 4. 刷新权限
FLUSH PRIVILEGES;
exit;

# 远程连接测试(仅能访问test_db,无管理员权限)
mysql -h 服务器IP -u app_user -p

总结

本文覆盖 Ubuntu 系统下 MySQL 8 的「安装 → 基础管理 → 登录配置 → 端口管理 → 远程访问 → 安全加固」全流程核心知识点,初学者需按步骤实操,重点注意 MySQL 8 的认证插件差异、远程访问的三层配置(监听地址+用户授权+防火墙),以及生产环境的安全最佳实践(权限最小化、限制IP、禁用root远程)。