安装和保护 MariaDB
本指南说明如何在 VPS 上安装和安全配置 MariaDB。
先决条件
- SSH root 或 sudo 访问权限
- 最新的 Debian/Ubuntu 系统
安装
-
安装 MariaDB:
sudo apt updatesudo apt install mariadb-server -
保护安装:
sudo mysql_secure_installation按照安全步骤操作:
- 按 Enter 输入 root 密码(默认为空)
- 回答安全问题:
- 更改 root 密码?[Y/n]:
Y(推荐) - 删除匿名用户?[Y/n]:
Y - 禁止 root 远程登录?[Y/n]:
Y - 删除测试数据库?[Y/n]:
Y - 重新加载权限表?[Y/n]:
Y
- 更改 root 密码?[Y/n]:
用户配置
-
连接到 MariaDB:
sudo mysql -
创建新的管理员用户(替换 'your_user' 和 'your_password'):
CREATE USER 'your_user'@'localhost' IDENTIFIED BY 'your_password';GRANT ALL PRIVILEGES ON *.* TO 'your_user'@'localhost' WITH GRANT OPTION;FLUSH PRIVILEGES;EXIT;
安装验证
-
使用新用户测试连接:
mysql -u your_user -p -
检查服务状态:
sudo systemctl status mariadb
保护 MariaDB 端口
-
检查当前监听端口:
sudo netstat -tlnp | grep mysql -
配置防火墙(UFW):
# 阻止默认访问 MySQL 端口 (3306)sudo ufw deny 3306# 如果您需要允许来自特定 IP 的远程访问sudo ufw allow from AUTHORIZED_IP to any port 3306 -
修改 MariaDB 配置文件:
sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf找 到并修改这些行:
# 仅限制监听 localhostbind-address = 127.0.0.1# 或指定特定 IP 地址# bind-address = YOUR_SERVER_IP -
重启 MariaDB 以应用更改:
sudo systemctl restart mariadb -
检查授权连接:
mysql -u root -pSELECT user, host FROM mysql.user;
数据库图形化管理
MariaDB 安装完成后,两个图形化工具可让您无需命令行即可管理数据库:
- phpMyAdmin:直接安装在服务器上的 Web 界面(配合 Apache 和 PHP)。可从浏览器访问,便于日常管理。
- MySQL Workbench:安装在您自己电脑上的桌面应用程序。它通过 SSH 隧道连接到服务器,无需开放 3306 端口——与上文的安全加固保持一致。
phpMyAdmin(通过 .tar.gz / .zip 压缩包的 Web 界面)
此方法从官方压缩包(通常比 apt 软件包更新)安装 phpMyAdmin,并由 Apache 提供服务。
-
安装 Apache、PHP 及所需扩展:
sudo apt updatesudo apt install apache2 php libapache2-mod-php php-mysqli php-mbstring php-zip php-gd php-curl php-xml -
下载并解压官方压缩包。撰写本文时,最新稳定版本为 phpMyAdmin 5.2.3。
选项 A —— .tar.gz 压缩包:
cd /tmpwget https://files.phpmyadmin.net/phpMyAdmin/5.2.3/phpMyAdmin-5.2.3-all-languages.tar.gztar xzf phpMyAdmin-5.2.3-all-languages.tar.gzsudo mv phpMyAdmin-5.2.3-all-languages /usr/share/phpmyadmin选项 B —— .zip 压缩包:
cd /tmpsudo apt install unzipwget https://files.phpmyadmin.net/phpMyAdmin/5.2.3/phpMyAdmin-5.2.3-all-languages.zipunzip phpMyAdmin-5.2.3-all-languages.zipsudo mv phpMyAdmin-5.2.3-all-languages /usr/share/phpmyadmin检查最新版本请查看官方下载页面获取最新版本,并调整命令中的版本号。
-
创建临时目录并设置权限:
sudo mkdir -p /usr/share/phpmyadmin/tmpsudo chown -R www-data:www-data /usr/share/phpmyadminsudo chmod 755 /usr/share/phpmyadmin/tmp -
从提供的示例创建配置文件:
sudo cp /usr/share/phpmyadmin/config.sample.inc.php /usr/share/phpmyadmin/config.inc.php生成一个密钥字符串(32 个字符)用于 cookie 加密:
openssl rand -base64 24编辑配置文件:
sudo nano /usr/share/phpmyadmin/config.inc.php填入密钥字符串和临时目录:
$cfg['blowfish_secret'] = '在此粘贴生成的字符串';$cfg['TempDir'] = '/usr/share/phpmyadmin/tmp'; -
在 Apache 中声明 phpMyAdmin:
sudo nano /etc/apache2/conf-available/phpmyadmin.conf添加以下内容:
Alias /phpmyadmin /usr/share/phpmyadmin<Directory /usr/share/phpmyadmin>Options SymLinksIfOwnerMatchDirectoryIndex index.phpRequire all granted</Directory># 禁止对敏感目录的 Web 访问<Directory /usr/share/phpmyadmin/tmp>Require all denied</Directory> -
启用配置并重新加载 Apache:
sudo a2enconf phpmyadminsudo systemctl reload apache2 -
在浏览器中打开界面,然后使用先前创建的 MariaDB 用户登录:
http://服务器_ip_或域名/phpmyadmin
phpMyAdmin 是自动化攻击的常见目标。强烈建议:
- 启用 HTTPS(见下方提示);
- 按 IP 限制访问或添加 Apache 认证(
.htaccess); - 可选择将
/phpmyadmin别名替换为不易猜测的路径。
在生产环境中,使用 Let's Encrypt SSL 证书保护访问:
sudo apt install -y certbot python3-certbot-apache
sudo certbot --apache -d 您的域名.com
证书需要一个指向服务器 IP 的域名——请参阅我们的创建 A 记录指南。
MySQL Workbench(通过 SSH 隧道的桌面客户端)
MySQL Workbench 安装在您自己的电脑上(Windows、macOS 或 Linux),并通过 SSH 隧道连接到服务器。服务器上的 3306 端口保持关闭,MariaDB 仍仅在 127.0.0.1 上监听:连接经由 SSH,就像您在服务器本地一样。
-
在您的电脑上从官方网站下载并安装 MySQL Workbench。
-
在 Workbench 中,使用 Standard TCP/IP over SSH 方法创建新连接(Database ▸ Manage Connections ▸ New)并填写:
字段 值 SSH Hostname 服务器_ip_地址:22(或您的 SSH 端口)SSH Username 您的 SSH 用户 SSH Key File / Password 您的 SSH 密钥或密码 MySQL Hostname 127.0.0.1MySQL Server Port 3306Username MariaDB 用户(例如 your_user)Password 该用户的密码 为什么是 127.0.0.1?MySQL Hostname/Port 字段是从服务器角度计算的,位于 SSH 隧道的另一端。因此填写
127.0.0.1:3306,即在服务器本地监听的 MariaDB。 -
点击 Test Connection 进行验证,然后点击 OK 保存连接。
您也可以自己打开隧道,然后将任何 MySQL 客户端指向本地的 127.0.0.1:3307:
ssh -L 3307:127.0.0.1:3306 用户@服务器_ip_地址
只要 SSH 会话保持打开,本地端口 3307 就会连接到服务器的 3306 端口。
MySQL Workbench 是为 MySQL 开发的。在较新的 MariaDB 版本中,可能会出现“版本不受支持”的警告:但大多数常见操作(浏览数据、执行 SQL、管理用户)仍可正常工作。
安全最佳实践
- 使用强密码
- 限制数据库访问
- 执行定期备份
- 定期更新 MariaDB
- 将连接限制为受信任的 IP
- 定期监控连接尝试
故障排除
- 检查日志:
sudo tail -f /var/log/mysql/error.log - 验证服务是否处于活动状态:
sudo systemctl status mariadb - 确保端口已打开:
sudo netstat -tulpn | grep mysql