本文将详细介绍在 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 用户的远程访问权限。关键点总结:
- 密码安全:使用强密码并启用密码策略
- 远程访问:谨慎配置,生产环境建议使用专用用户
- 防火墙:合理配置,限制访问来源
- 定期维护:备份和优化数据库
对于生产环境,建议创建专用管理用户而非直接使用 root 进行远程连接,以增强安全性。