- 1 在 Ubuntu 上最快安装 MariaDB 的方法(支持 20.04 / 22.04 / 24.04)
- 2 为您的 Ubuntu 版本选择合适的 MariaDB 版本
- 3 如果需要最新版本(添加官方 MariaDB 仓库)
- 4 如何检查当前已安装的 MariaDB 版本
- 5 MariaDB 初始安全设置完整指南(mysql_secure_installation)
- 6 为什么无法以 root 登录(访问被拒绝错误)
- 7 如何将 root 改为密码认证(仅在必要时)
- 8 如何检查当前的认证方式
- 9 常见错误及解决方案
- 10 将字符编码设置为 utf8mb4(防止乱码)
- 11 创建数据库时指定 utf8mb4(推荐)
- 12 创建应用用户并授予权限
- 13 创建远程访问用户(仅在需要时)
- 14 如何检查当前用户和权限
- 15 常见权限错误及解决方案
- 16 如何在 MariaDB 中允许远程连接(外部访问失败时的修复)
- 17 无法进行外部连接时的检查清单
- 18 重要安全注意事项
- 19 MariaDB 启动失败时的故障排除(错误)
- 20 拒绝访问错误原因汇总
- 21 基础性能提升(适用于初学者)
- 22 常见问题 (FAQ)
- 23 结论:在 Ubuntu 上安全使用 MariaDB
在 Ubuntu 上最快安装 MariaDB 的方法(支持 20.04 / 22.04 / 24.04)
如果您想立即在 Ubuntu 上使用 MariaDB,只需按照以下步骤完成安装和启动验证。除非有特定原因,否则从 Ubuntu 默认仓库安装是最安全、最稳定的选择。
① 更新软件包信息
sudo apt update
sudo apt upgrade -y
② 安装 MariaDB
sudo apt install -y mariadb-server mariadb-client
安装过程中无需特殊配置。完成后,MariaDB 服务会自动启动。
③ 验证 MariaDB 是否正在运行
sudo systemctl status mariadb
如果显示 active (running),则 MariaDB 正常运行。
④ 启用自动启动(通常不需要,但建议确认)
sudo systemctl enable mariadb
⑤ 连接 MariaDB 并验证操作
sudo mysql
如果看到以下提示,则安装成功:
MariaDB [(none)]>
要退出,请输入 exit;。
安装后必须进行的安全初始化
安装后,MariaDB 只应用了最小的安全设置。务必运行以下命令:
sudo mysql_secure_installation
通常,推荐以下答案:
- 删除匿名用户 → Y
- 禁止 root 远程登录 → Y
- 删除测试数据库 → Y
- 重新加载权限表 → Y
至此,Ubuntu 上的安全 MariaDB 环境已完成配置。
Ubuntu 版本对应的 MariaDB 版本
- Ubuntu 20.04 → MariaDB 10.3 系列
- Ubuntu 22.04 → MariaDB 10.6 系列
- Ubuntu 24.04 → MariaDB 10.11 系列(LTS)
对于大多数用户来说,Ubuntu 默认版本已足够。只有在需要最新功能时才考虑使用官方仓库。
安装失败或服务未启动时的快速检查
- 使用
sudo systemctl status mariadb检查错误 - 使用
sudo journalctl -xe查看详细日志 - 使用
df -h检查磁盘空间
大多数情况下,问题要么是磁盘空间不足,要么是配置文件拼写错误。
为您的 Ubuntu 版本选择合适的 MariaDB 版本
在 Ubuntu 上使用 MariaDB 时,大多数情况下最安全的选择是 默认仓库版本。安全更新和依赖兼容性会自动维护,非常适合初学者和中级用户。
Ubuntu 默认仓库版本(推荐)
- Ubuntu 20.04 → MariaDB 10.3 系列
- Ubuntu 22.04 → MariaDB 10.6 系列
- Ubuntu 24.04 → MariaDB 10.11 系列(LTS)
除非有特定需求,否则这些版本在生产环境中完全实用。
如果需要最新版本(添加官方 MariaDB 仓库)
如果需要最新功能,可以添加官方 MariaDB 仓库。由于 apt-key 已弃用,这里使用 signed-by 方法。
① 保存 GPG 密钥
sudo mkdir -p /etc/apt/keyrings
sudo curl -fsSL https://mariadb.org/mariadb_release_signing_key.asc \
| sudo gpg --dearmor -o /etc/apt/keyrings/mariadb.gpg
② 检查您的 Ubuntu 代号
lsb_release -cs
示例:
- 20.04 →
focal - 22.04 →
jammy - 24.04 →
noble
③ 添加官方仓库(示例:10.11 系列)
echo "deb [signed-by=/etc/apt/keyrings/mariadb.gpg] \
https://mirror.mariadb.org/repo/10.11/ubuntu \
$(lsb_release -cs) main" \
| sudo tee /etc/apt/sources.list.d/mariadb.list
④ 更新软件包并安装
sudo apt update
sudo apt install mariadb-server mariadb-client
使用官方仓库时的注意事项
- 可以使用比 Ubuntu 默认版本更新的功能
- 将来可能会出现依赖冲突的风险
- 生产服务器需要进行充分的测试
在生产环境中,需要明确是优先考虑稳定性还是最新功能。
如何检查当前已安装的 MariaDB 版本
mysql --version
示例:
mysql Ver 15.1 Distrib 10.6.16-MariaDB
通过明确确认版本,故障排除和迁移工作会变得更加容易。
MariaDB 初始安全设置完整指南(mysql_secure_installation)
在安装 MariaDB 后,默认只应用了最小的安全设置。要安全运行,请务必执行以下命令:
sudo mysql_secure_installation
执行后会出现多个提示。大多数情况下,推荐使用以下答案。
推荐答案
- Enter current password for root: → 按回车键(首次运行时未设置)
- Switch to unix_socket authentication? → Y(在 Ubuntu 上推荐)
- Change the root password? → N(如果使用 unix_socket 认证)
- Remove anonymous users? → Y
- Disallow root login remotely? → Y
- Remove test database and access to it? → Y
- Reload privilege tables now? → Y
这完成了基本的安全配置。
为什么无法以 root 登录(访问被拒绝错误)
在 Ubuntu 上,root 用户默认使用 unix_socket 认证。因此,标准的基于密码的登录将无法工作。
示例症状
mysql -u root -p
→ Access denied for user 'root'@'localhost'
正确的登录方式(Ubuntu 默认)
sudo mysql
这是最安全且推荐的方式。
如何将 root 改为密码认证(仅在必要时)
仅当必须从外部工具或应用程序以 root 身份连接时才更改认证方式。
① 连接到 MariaDB
sudo mysql
② 更改认证插件
ALTER USER 'root'@'localhost'
IDENTIFIED WITH mysql_native_password
BY 'StrongPasswordHere';
FLUSH PRIVILEGES;
③ 确认更改
SELECT user, host, plugin FROM mysql.user;
如果显示 mysql_native_password,则更改成功。
如何检查当前的认证方式
sudo mysql -e "SELECT user, host, plugin FROM mysql.user;"
主要的认证方式:
- unix_socket → Ubuntu 默认,安全
- mysql_native_password → 基于密码的认证
除非有特定原因,否则保持 root 使用 unix_socket 认证是最安全的做法。
常见错误及解决方案
错误 1698 (28000):Access denied for user ‘root’@’localhost’
- 原因:尝试基于密码的登录
- 解决方案:使用
sudo mysql登录
未找到 mysql_secure_installation
- 使用
which mysql_secure_installation检查 - 如果未安装,运行
sudo apt install mariadb-server
将字符编码设置为 utf8mb4(防止乱码)
为了在 MariaDB 中安全处理多语言文本和表情符号,建议使用 utf8mb4。如果未设置此编码,可能会遇到字符编码问题或数据丢失。
① 编辑配置文件
sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf
在 [mysqld] 部分添加或修改以下行:
[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci
② 重启 MariaDB
sudo systemctl restart mariadb
③ 验证设置
sudo mysql -e "SHOW VARIABLES LIKE 'character_set%';"
如果显示 utf8mb4,则配置成功。
创建数据库时指定 utf8mb4(推荐)
如果希望无论全局设置如何都显式定义字符集,请在创建数据库时指定。
CREATE DATABASE sample_db
CHARACTER SET utf8mb4
COLLATE utf8mb4_general_ci;
此数据库中创建的所有表都将继承 utf8mb4。
创建应用用户并授予权限
在生产环境中,切勿使用 root 用户进行应用连接。请创建专用用户,仅授予最小必要的权限。
① 登录 MariaDB
sudo mysql
② 创建用户(本地连接)
CREATE USER 'app_user'@'localhost'
IDENTIFIED BY 'StrongPasswordHere';
③ 授予数据库权限
GRANT ALL PRIVILEGES
ON sample_db.*
TO 'app_user'@'localhost';
FLUSH PRIVILEGES;
创建远程访问用户(仅在需要时)
仅在需要从外部服务器或云环境连接时才进行此配置。
CREATE USER 'app_user'@'%'
IDENTIFIED BY 'StrongPasswordHere';
GRANT ALL PRIVILEGES
ON sample_db.*
TO 'app_user'@'%';
FLUSH PRIVILEGES;
注意: “%” 通配符允许来自任何主机的连接。在生产环境中,指定特定 IP 地址更安全。
如何检查当前用户和权限
SELECT user, host FROM mysql.user;
SHOW GRANTS FOR 'app_user'@'localhost';
常见权限错误及解决方案
用户 ‘app_user’ 被拒绝访问
- 主机指定错误(localhost 与 % 的区别)
- 未执行 FLUSH PRIVILEGES
- 连接时数据库名称错误
未知数据库
- 数据库名称拼写错误
- 未对目标数据库授予权限
如何在 MariaDB 中允许远程连接(外部访问失败时的修复)
默认情况下,MariaDB 只允许 本地连接。如果需要从外部服务器或云环境连接,请配置以下设置。
① 更改 bind-address
编辑配置文件:
sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf
找到以下行:
bind-address = 127.0.0.1
要允许外部连接,请将其更改为:
bind-address = 0.0.0.0
保存后,重启 MariaDB:
sudo systemctl restart mariadb
② 在防火墙中打开 3306 端口
如果在 Ubuntu 上使用 UFW:
sudo ufw allow 3306
sudo ufw reload
为提升安全性,请指定源 IP 地址:
sudo ufw allow from 192.168.1.10 to any port 3306
③ 创建远程访问用户
CREATE USER 'app_user'@'%'
IDENTIFIED BY 'StrongPasswordHere';
GRANT ALL PRIVILEGES
ON sample_db.*
TO 'app_user'@'%';
FLUSH PRIVILEGES;
为了更好的安全性:
CREATE USER 'app_user'@'192.168.1.10'
IDENTIFIED BY 'StrongPasswordHere';
无法进行外部连接时的检查清单
1. MariaDB 是否正在运行?
sudo systemctl status mariadb
2. 3306 端口是否在监听?
sudo ss -tulnp | grep 3306
如果显示 0.0.0.0:3306,则表示已在所有接口上正确监听。
3. 使用云环境时(AWS / GCP / VPS)
- 确认安全组已打开 3306 端口
- 确认没有外部防火墙阻止连接
4. 错误信息导致的原因
无法连接到 MySQL 服务器
- 端口关闭
- bind-address 未更改
- 防火墙阻止了连接
用户被拒绝访问
- 用户主机指定错误
- 密码错误
- 权限未授予
连接超时
- 云端安全设置
- 网络路由问题
重要安全注意事项
- 在生产环境中避免使用 “%”
- 尽可能使用 VPN 访问
- 考虑启用 SSL/TLS 连接
- 切勿允许远程 root 登录
MariaDB 启动失败时的故障排除(错误)
① 检查服务状态
sudo systemctl status mariadb
② 检查详细日志
sudo journalctl -xe
sudo cat /var/log/mysql/error.log
③ 常见原因
- 配置文件语法错误
- 磁盘空间不足
- 端口冲突(MySQL 已在运行)
④ 检查磁盘空间
df -h
拒绝访问错误原因汇总
- 密码错误
- 主机指定错误(localhost 与 % 的区别)
- 未执行 FLUSH PRIVILEGES
- 尝试使用标准方式登录 root(需要
sudo mysql)
基础性能提升(适用于初学者)
不需要高级调优,但至少请确认以下设置。
① 启用慢查询日志
将以下内容添加到 50-server.cnf:
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 2
重启 MariaDB:
sudo systemctl restart mariadb
② 检查索引使用情况
慢查询可能缺少适当的索引。
EXPLAIN SELECT * FROM sample_table WHERE column_name = 'value';
③ 检查服务器资源
top
htop
如果内存不足,请考虑升级服务器套餐。
常见问题 (FAQ)
如何在 Ubuntu 22.04 上锁定 MariaDB 版本?
使用 apt-mark hold mariadb-server。
如果忘记 root 密码,如何重置?
您可以通过以安全模式启动并重新配置密码来重置。请参阅我们的专门指南获取详细步骤。
如何更改 MariaDB 端口号?
将 50-server.cnf 修改为类似 port = 3307 的设置,然后重启服务。
结论:在 Ubuntu 上安全使用 MariaDB
- 使用默认仓库的版本是最安全的选择
- 始终运行 mysql_secure_installation
- 永不在应用程序连接中使用 root
- 仅在必要时启用远程访问
- 故障排除时,检查日志是首要任务
遵循这些步骤,您可以在 Ubuntu 上构建安全且可投入生产的 MariaDB 环境。


