Skip to main content

安装和保护 MariaDB

本指南说明如何在 VPS 上安装和安全配置 MariaDB。

先决条件

  • SSH root 或 sudo 访问权限
  • 最新的 Debian/Ubuntu 系统

安装

  1. 安装 MariaDB:

    sudo apt update
    sudo apt install mariadb-server
  2. 保护安装:

    sudo mysql_secure_installation

    按照安全步骤操作:

    • 按 Enter 输入 root 密码(默认为空)
    • 回答安全问题:
      • 更改 root 密码?[Y/n]:Y(推荐)
      • 删除匿名用户?[Y/n]:Y
      • 禁止 root 远程登录?[Y/n]:Y
      • 删除测试数据库?[Y/n]:Y
      • 重新加载权限表?[Y/n]:Y

用户配置

  1. 连接到 MariaDB:

    sudo mysql
  2. 创建新的管理员用户(替换 '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;

安装验证

  1. 使用新用户测试连接:

    mysql -u your_user -p
  2. 检查服务状态:

    sudo systemctl status mariadb

保护 MariaDB 端口

  1. 检查当前监听端口:

    sudo netstat -tlnp | grep mysql
  2. 配置防火墙(UFW):

    # 阻止默认访问 MySQL 端口 (3306)
    sudo ufw deny 3306

    # 如果您需要允许来自特定 IP 的远程访问
    sudo ufw allow from AUTHORIZED_IP to any port 3306
  3. 修改 MariaDB 配置文件:

    sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf

    找到并修改这些行:

    # 仅限制监听 localhost
    bind-address = 127.0.0.1

    # 或指定特定 IP 地址
    # bind-address = YOUR_SERVER_IP
  4. 重启 MariaDB 以应用更改:

    sudo systemctl restart mariadb
  5. 检查授权连接:

    mysql -u root -p
    SELECT user, host FROM mysql.user;

数据库图形化管理

MariaDB 安装完成后,两个图形化工具可让您无需命令行即可管理数据库:

  • phpMyAdmin:直接安装在服务器上的 Web 界面(配合 Apache 和 PHP)。可从浏览器访问,便于日常管理。
  • MySQL Workbench:安装在您自己电脑上的桌面应用程序。它通过 SSH 隧道连接到服务器,无需开放 3306 端口——与上文的安全加固保持一致。

phpMyAdmin(通过 .tar.gz / .zip 压缩包的 Web 界面)

此方法从官方压缩包(通常比 apt 软件包更新)安装 phpMyAdmin,并由 Apache 提供服务。

  1. 安装 Apache、PHP 及所需扩展:

    sudo apt update
    sudo apt install apache2 php libapache2-mod-php php-mysqli php-mbstring php-zip php-gd php-curl php-xml
  2. 下载并解压官方压缩包。撰写本文时,最新稳定版本为 phpMyAdmin 5.2.3

    选项 A —— .tar.gz 压缩包:

    cd /tmp
    wget https://files.phpmyadmin.net/phpMyAdmin/5.2.3/phpMyAdmin-5.2.3-all-languages.tar.gz
    tar xzf phpMyAdmin-5.2.3-all-languages.tar.gz
    sudo mv phpMyAdmin-5.2.3-all-languages /usr/share/phpmyadmin

    选项 B —— .zip 压缩包:

    cd /tmp
    sudo apt install unzip
    wget https://files.phpmyadmin.net/phpMyAdmin/5.2.3/phpMyAdmin-5.2.3-all-languages.zip
    unzip phpMyAdmin-5.2.3-all-languages.zip
    sudo mv phpMyAdmin-5.2.3-all-languages /usr/share/phpmyadmin
    检查最新版本

    请查看官方下载页面获取最新版本,并调整命令中的版本号。

  3. 创建临时目录并设置权限:

    sudo mkdir -p /usr/share/phpmyadmin/tmp
    sudo chown -R www-data:www-data /usr/share/phpmyadmin
    sudo chmod 755 /usr/share/phpmyadmin/tmp
  4. 从提供的示例创建配置文件:

    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';
  5. 在 Apache 中声明 phpMyAdmin:

    sudo nano /etc/apache2/conf-available/phpmyadmin.conf

    添加以下内容:

    Alias /phpmyadmin /usr/share/phpmyadmin

    <Directory /usr/share/phpmyadmin>
    Options SymLinksIfOwnerMatch
    DirectoryIndex index.php
    Require all granted
    </Directory>

    # 禁止对敏感目录的 Web 访问
    <Directory /usr/share/phpmyadmin/tmp>
    Require all denied
    </Directory>
  6. 启用配置并重新加载 Apache:

    sudo a2enconf phpmyadmin
    sudo systemctl reload apache2
  7. 在浏览器中打开界面,然后使用先前创建的 MariaDB 用户登录:

    http://服务器_ip_或域名/phpmyadmin
保护 phpMyAdmin 的访问

phpMyAdmin 是自动化攻击的常见目标。强烈建议:

  • 启用 HTTPS(见下方提示);
  • 按 IP 限制访问或添加 Apache 认证(.htaccess);
  • 可选择将 /phpmyadmin 别名替换为不易猜测的路径。
启用 HTTPS

在生产环境中,使用 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,就像您在服务器本地一样。

  1. 在您的电脑上从官方网站下载并安装 MySQL Workbench。

  2. 在 Workbench 中,使用 Standard TCP/IP over SSH 方法创建新连接(Database ▸ Manage Connections ▸ New)并填写:

    字段
    SSH Hostname服务器_ip_地址:22(或您的 SSH 端口)
    SSH Username您的 SSH 用户
    SSH Key File / Password您的 SSH 密钥或密码
    MySQL Hostname127.0.0.1
    MySQL Server Port3306
    UsernameMariaDB 用户(例如 your_user
    Password该用户的密码
    为什么是 127.0.0.1?

    MySQL Hostname/Port 字段是从服务器角度计算的,位于 SSH 隧道的另一端。因此填写 127.0.0.1:3306,即在服务器本地监听的 MariaDB。

  3. 点击 Test Connection 进行验证,然后点击 OK 保存连接。

备选方案 —— 手动 SSH 隧道

您也可以自己打开隧道,然后将任何 MySQL 客户端指向本地的 127.0.0.1:3307

ssh -L 3307:127.0.0.1:3306 用户@服务器_ip_地址

只要 SSH 会话保持打开,本地端口 3307 就会连接到服务器的 3306 端口。

MariaDB 兼容性

MySQL Workbench 是为 MySQL 开发的。在较新的 MariaDB 版本中,可能会出现“版本不受支持”的警告:但大多数常见操作(浏览数据、执行 SQL、管理用户)仍可正常工作。

安全最佳实践

  • 使用强密码
  • 限制数据库访问
  • 执行定期备份
  • 定期更新 MariaDB
  • 将连接限制为受信任的 IP
  • 定期监控连接尝试

故障排除

  • 检查日志:sudo tail -f /var/log/mysql/error.log
  • 验证服务是否处于活动状态:sudo systemctl status mariadb
  • 确保端口已打开:sudo netstat -tulpn | grep mysql