概述
MySQL 被 Oracle 收购之后,社区转向了 MariaDB——这是由 MySQL 创始人亲手打造的分支,完全兼容 MySQL 协议,性能毫不逊色,而且开源协议更友好。
很多开发者习惯用 MySQL,但 MariaDB 在 VPS 上安装更简单:apt 源里直接就有,不需要加第三方 PPA,升级路径也平滑。这篇教程带你从零装好 MariaDB,配置远程访问,顺手把安全加固做了。
全程大概 10 分钟,装完就能用。
准备工作
你需要:
- 一台 Ubuntu 20.04+ 或 Debian 11+ 的 VPS
- root 或 sudo 权限
- 至少 1GB 内存(跑 MariaDB 最低要求)
- 至少 5GB 可用磁盘空间
安装步骤
第一步:安装 MariaDB
Ubuntu 和 Debian 的默认源里就有 MariaDB,直接装:
sudo apt update
sudo apt install -y mariadb-server mariadb-client
装完服务会自动启动。检查一下状态:
sudo systemctl status mariadb
输出应该显示 active (running)。
第二步:运行安全脚本
MariaDB 装完后,root 用户默认没有密码,外部也可以直接连。运行安全脚本一键修复:
sudo mysql_secure_installation
会依次问几个问题:
- 切换 root 密码? 选 Y,设一个强密码(建议 12 位以上,含大小写和数字)
- 删除匿名账户? 选 Y
- 禁止 root 远程登录? 选 Y(后面我们会单独创建远程用户)
- 删除 test 数据库? 选 Y
- 重新加载权限表? 选 Y
第三步:创建远程访问用户
默认禁止 root 远程登录,但很多工具(phpMyAdmin、DBeaver、Navicat)需要从外面连数据库。我们创建一个专用账户:
sudo mysql -u root -p
输入刚才设的 root 密码进入 MariaDB 命令行,然后执行:
CREATE USER 'devuser'@'%' IDENTIFIED BY 'YourStrongPassword123!';
GRANT ALL PRIVILEGES ON *.* TO 'devuser'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
EXIT;
把 YourStrongPassword123! 换成你自己的强密码。'devuser'@'%' 表示这个用户可以从任意 IP 连接。
安全提醒:生产环境不要开
%,改成具体 IP 更安全,比如'devuser'@'192.168.1.100'。
第四步:配置防火墙
如果你的 VPS 开了 ufw 防火墙,需要放行 3306 端口:
sudo ufw allow 3306/tcp
sudo ufw status
如果没有用 ufw,可以跳过这步。
第五步:配置远程监听(可选)
默认情况下 MariaDB 只监听本地 127.0.0.1。如果你需要从其他机器连进来,需要改配置:
sudo sed -i 's/127.0.0.1/0.0.0.0/' /etc/mysql/mariadb.conf.d/50-server.cnf
sudo systemctl restart mariadb
验证监听是否生效:
sudo netstat -tlnp | grep 3306
应该看到 0.0.0.0:3306,而不是 127.0.0.1:3306。
第六步:创建你的第一个数据库
sudo mysql -u root -p -e "CREATE DATABASE myapp DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
utf8mb4 是推荐编码,支持 emoji 和几乎所有字符。
验证安装
# 检查服务状态
sudo systemctl is-active mariadb
# 应该输出: active
# 检查版本
mariadb --version
# 应该输出类似: mariadb Ver 15.1 Distrib 10.11.x
# 本地登录测试
sudo mysql -u root -p -e "SHOW DATABASES;"
# 远程连接测试(从另一台机器)
mysql -h YOUR_VPS_IP -P 3306 -u devuser -p
常见问题
Q: 装完 mysql 命令打不开?
MariaDB 用 mariadb 代替了 mysql,但大多数情况 mysql 也能用。如果提示找不到,装客户端:
sudo apt install -y mariadb-client
Q: 远程连不上,提示 “Host is not allowed to connect”?
检查两件事:
- 防火墙是否放行了 3306 端口
- 用户权限是否给了
%:
sudo mysql -u root -p -e "SELECT user, host FROM mysql.user WHERE user='devuser';"
如果 host 不是 %,重新授权:
DROP USER 'devuser'@'%';
CREATE USER 'devuser'@'%' IDENTIFIED BY 'YourPassword';
GRANT ALL PRIVILEGES ON *.* TO 'devuser'@'%';
FLUSH PRIVILEGES;
Q: 忘记密码怎么办?
重置 root 密码:
sudo systemctl stop mariadb
sudo mariadbd --skip-grant-tables &
sudo mariadb -u root
进入后执行:
FLUSH PRIVILEGES;
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPassword123!';
EXIT;
然后 sudo pkill mariadbd 杀掉进程,正常重启:sudo systemctl start mariadb
Q: MariaDB 和 MySQL 能共存吗?
能,但端口要分开。MariaDB 默认 3306,MySQL 改到 3307 即可。不过一般不建议同时装两个,容易搞混。
Q: 怎么备份数据库?
用 mysqldump:
sudo mysqldump -u root -p --all-databases > /root/db-backup-$(date +%Y%m%d).sql
压缩一下更省空间:
sudo mysqldump -u root -p --all-databases | gzip > /root/db-backup-$(date +%Y%m%d).sql.gz
后续建议
装好 MariaDB 之后,可以考虑:
- 安装 phpMyAdmin 做图形化管理:
sudo apt install -y phpmyadmin - 配置自动备份脚本,每天定时dump
- 如果内存紧张,可以调整 innodb_buffer_pool_size 降低内存占用
MariaDB 比 MySQL 轻量,VPS 上跑起来很顺手。配好远程访问,连上 DBeaver 就开始折腾你的项目吧。
你的数据库准备好了吗?