Ubuntu 24.04 安装 MySQL 8 完整指南:包含远程连接和密码设置

本文将详细介绍在 Ubuntu 24.04 上安装 MySQL 8 的多种方法,并重点演示如何配置 root 用户远程连接和设置安全密码。

方法比较

方法 适用场景 优点 缺点
官方APT仓库 生产环境 官方支持,稳定性好 配置稍复杂
Ubuntu仓库 快速测试 安装简单快捷 版本可能不是最新
Docker 开发/测试 隔离性好,易于管理 需要安装Docker

一、使用官方APT仓库安装(生产环境推荐)

1.1 添加MySQL官方仓库

bash 复制代码
# 更新系统
sudo apt update && sudo apt upgrade -y

# 安装依赖
sudo apt install wget gnupg -y

# 下载并安装MySQL APT配置
wget https://dev.mysql.com/get/mysql-apt-config_0.8.30-1_all.deb
sudo dpkg -i mysql-apt-config_0.8.30-1_all.deb

在配置界面中选择:

  • MySQL Server & Cluster → mysql-8.0
  • OK

1.2 安装MySQL服务器

bash 复制代码
# 更新仓库信息
sudo apt update

# 安装MySQL服务器
sudo apt install mysql-server -y

二、配置MySQL root用户和密码

2.1 初始安全配置

bash 复制代码
# 运行安全配置向导
sudo mysql_secure_installation

配置过程示例:

复制代码
# 选择验证密码策略(推荐选择中等强度)
Would you like to setup VALIDATE PASSWORD component? [Y/n] Y

# 选择密码策略级别(0=低, 1=中, 2=高)
Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 1

# 设置root密码(最少8位,包含数字、字母、特殊字符)
Please set the password for root here.
New password: YourSecurePassword123!
Re-enter new password: YourSecurePassword123!

# 是否删除匿名用户?[Y/n] Y
Remove anonymous users? (Press y|Y for Yes, any other key for No) : Y

# 是否禁止root远程登录?[Y/n] n(这里先选n,后面专门配置)
Disallow root login remotely? (Press y|Y for Yes, any other key for No) : n

# 是否删除测试数据库?[Y/n] Y
Remove test database and access to it? (Press y|Y for Yes, any other key for No) : Y

# 立即重新加载权限表?[Y/n] Y
Reload privilege tables now? (Press y|Y for Yes, any other key for No) : Y

2.2 手动设置root密码(如果安全配置未运行)

bash 复制代码
# 登录MySQL(初始可能无需密码)
sudo mysql -u root

# 在MySQL命令行中执行以下命令
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'YourSecurePassword123!';
FLUSH PRIVILEGES;
EXIT;

三、配置root用户远程连接

3.1 修改root用户身份验证和主机权限

bash 复制代码
# 登录MySQL
sudo mysql -u root -p

# 在MySQL命令行中执行以下命令
sql 复制代码
-- 查看当前root用户信息
SELECT user, host, authentication_string FROM mysql.user WHERE user = 'root';

-- 创建或修改root用户,允许从任何主机连接
CREATE USER IF NOT EXISTS 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'YourSecurePassword123!';

-- 或者修改现有root用户的host
RENAME USER 'root'@'localhost' TO 'root'@'%';

-- 授予所有权限
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;

-- 刷新权限
FLUSH PRIVILEGES;

-- 再次查看用户信息确认
SELECT user, host FROM mysql.user WHERE user = 'root';

3.2 修改MySQL配置文件允许远程连接

bash 复制代码
# 编辑MySQL配置文件
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

找到以下行并进行修改:

ini 复制代码
# 注释掉绑定地址或改为0.0.0.0
# bind-address = 127.0.0.1
bind-address = 0.0.0.0

# 确保skip-networking被注释
# skip-networking

3.3 配置防火墙(如果启用)

bash 复制代码
# 允许MySQL端口(3306)通过防火墙
sudo ufw allow 3306/tcp
sudo ufw reload

# 检查防火墙状态
sudo ufw status

3.4 重启MySQL服务

bash 复制代码
sudo systemctl restart mysql
sudo systemctl status mysql

四、测试远程连接

4.1 从本地测试

bash 复制代码
# 使用新密码登录测试
mysql -u root -p -h 127.0.0.1 -e "SELECT version(), user(), @@hostname;"

4.2 从远程机器测试

在另一台机器上执行:

bash 复制代码
# 安装MySQL客户端(如果需要)
sudo apt install mysql-client

# 测试远程连接
mysql -u root -p -h 你的服务器IP -e "SELECT version(), user();"

4.3 使用网络工具测试

bash 复制代码
# 检查端口是否开放
telnet 你的服务器IP 3306

# 或者使用nc命令
nc -zv 你的服务器IP 3306

五、使用Docker安装并配置远程访问(开发环境推荐)

5.1 创建Docker Compose文件

创建 docker-compose.yml

yaml 复制代码
version: '3.8'
services:
  mysql:
    image: mysql:8.0
    container_name: mysql8-server
    environment:
      MYSQL_ROOT_PASSWORD: YourSecurePassword123!
      MYSQL_ROOT_HOST: '%'
    ports:
      - "3306:3306"
    volumes:
      - ./data:/var/lib/mysql
      - ./conf.d:/etc/mysql/conf.d
    command: 
      - --bind-address=0.0.0.0
      - --default-authentication-plugin=mysql_native_password
    restart: unless-stopped

5.2 启动MySQL容器

bash 复制代码
# 创建目录
mkdir -p {data,conf.d,init}

# 启动服务
docker-compose up -d

# 查看日志
docker-compose logs mysql

5.3 配置容器内的MySQL远程访问

bash 复制代码
# 进入容器
docker exec -it mysql8-server mysql -u root -p

# 执行远程访问配置(同上文SQL命令)

六、安全建议和最佳实践

6.1 安全加固建议

sql 复制代码
-- 创建专用管理用户而非直接使用root
CREATE USER 'admin'@'%' IDENTIFIED BY 'StrongAdminPassword123!';
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'%' WITH GRANT OPTION;

-- 限制root只能本地访问(生产环境推荐)
RENAME USER 'root'@'%' TO 'root'@'localhost';

-- 创建应用专用用户(最小权限原则)
CREATE USER 'appuser'@'%' IDENTIFIED BY 'AppPassword123!';
GRANT SELECT, INSERT, UPDATE, DELETE ON your_database.* TO 'appuser'@'%';

6.2 防火墙高级配置

bash 复制代码
# 只允许特定IP访问MySQL
sudo ufw allow from 192.168.1.0/24 to any port 3306

# 或者只允许特定IP
sudo ufw allow from 192.168.1.100 to any port 3306

6.3 定期维护命令

bash 复制代码
# 备份所有数据库
mysqldump -u root -p --all-databases > full_backup_$(date +%Y%m%d).sql

# 优化表
mysqlcheck -u root -p --auto-repair --optimize --all-databases

# 查看连接状态
mysqladmin -u root -p processlist

七、故障排除

7.1 常见问题解决

问题1:远程连接被拒绝

bash 复制代码
# 检查MySQL绑定地址
sudo grep bind-address /etc/mysql/mysql.conf.d/mysqld.cnf

# 检查防火墙状态
sudo ufw status

# 检查MySQL用户权限
mysql -u root -p -e "SELECT user, host FROM mysql.user WHERE user='root';"

问题2:密码策略太强

sql 复制代码
-- 查看密码策略
SHOW VARIABLES LIKE 'validate_password%';

-- 临时降低策略(开发环境)
SET GLOBAL validate_password.policy = LOW;

7.2 有用的诊断命令

bash 复制代码
# 查看MySQL错误日志
sudo tail -f /var/log/mysql/error.log

# 检查MySQL服务状态
sudo systemctl status mysql

# 测试本地连接
mysql -u root -p -e "STATUS;"

# 查看网络连接
sudo netstat -tlnp | grep 3306

总结

通过本文的步骤,你应该已经成功在 Ubuntu 24.04 上安装了 MySQL 8,并配置了 root 用户的远程访问权限。关键点总结:

  1. 密码安全:使用强密码并启用密码策略
  2. 远程访问:谨慎配置,生产环境建议使用专用用户
  3. 防火墙:合理配置,限制访问来源
  4. 定期维护:备份和优化数据库

对于生产环境,建议创建专用管理用户而非直接使用 root 进行远程连接,以增强安全性。

相关推荐
好奇的菜鸟1 小时前
如何在 Ubuntu 系统上完全移除 Docker 及其所有数据
linux·ubuntu·docker
好奇的菜鸟2 小时前
WSL上的Ubuntu 24.04 (Noble Numbat) 配置阿里云镜像源,提速软件安装
linux·ubuntu·阿里云
q***96586 小时前
Java进阶-在Ubuntu上部署SpringBoot应用
java·spring boot·ubuntu
biter00887 小时前
Ubuntu 22.04 有线网络时好时坏?最终解决方案
linux·网络·ubuntu
德育处主任7 小时前
『NAS』轻松获取群晖自带的壁纸
服务器·docker
e***87707 小时前
Node.js 与 Docker 深度整合:轻松部署与管理 Node.js 应用
docker·容器·node.js
k***82518 小时前
Ubuntu介绍、与centos的区别、基于VMware安装Ubuntu Server 22.04、配置远程连接、安装jdk+Tomcat
java·ubuntu·centos
q***71019 小时前
从零到上线:Node.js 项目的完整部署流程(包含 Docker 和 CICD)
docker·容器·node.js
HIT_Weston9 小时前
44、【Ubuntu】【Gitlab】拉出内网 Web 服务:http.server 分析(一)
前端·ubuntu·gitlab