MySQL 和 MariaDB 是 Linux 服务器上最常用的关系型数据库,几乎所有 LAMP/LEMP 建站方案都少不了它们。本文以 Debian/Ubuntu 为主,逐步演示安装、安全初始化、创建数据库和用户,以及字符集配置,帮助你在搬瓦工 VPS 上快速搭建可用的数据库环境。

本文要点

  • 选择 MySQL 还是 MariaDB?两者的区别与建议
  • 安装后必须运行的 mysql_secure_installation 安全向导
  • 创建独立数据库与用户,最小化权限原则
  • 正确配置 UTF-8 字符集,避免乱码
  • CentOS/AlmaLinux 安装差异对照

MySQL 与 MariaDB 的选择

MySQL 和 MariaDB 在语法与协议上高度兼容,绝大多数应用(WordPress、Discuz、Laravel 等)对两者均无感知。主要区别如下:

对比项MySQLMariaDB
维护方OracleMariaDB 基金会(开源社区)
Debian/Ubuntu 默认需手动添加源系统源内直接可用
性能优秀与 MySQL 接近,部分场景更好
建议场景需要 MySQL 官方功能通用建站首选

新手建议

Debian/Ubuntu 默认源里的 MariaDB 安装最简单,与 MySQL 高度兼容,建站首选。如果你的应用明确要求 MySQL 官方版本,再从 MySQL 官方源安装。

安装 MariaDB(Debian/Ubuntu)

# 更新软件源
apt update

# 安装 MariaDB
apt install -y mariadb-server mariadb-client

# 启动并设置开机自启
systemctl enable --now mariadb

# 验证服务状态
systemctl status mariadb

安装 MySQL 官方版(Debian/Ubuntu)

若需要 MySQL 官方版本,可从官方 APT 仓库安装:

# 下载并安装 MySQL 官方 APT 配置包(以 Ubuntu 22.04 为例)
wget https://dev.mysql.com/get/mysql-apt-config_0.8.30-1_all.deb
dpkg -i mysql-apt-config_0.8.30-1_all.deb
apt update
apt install -y mysql-server

# 启动服务
systemctl enable --now mysql

CentOS / AlmaLinux / Rocky Linux 安装

# CentOS/RHEL 系安装 MariaDB
dnf install -y mariadb-server
systemctl enable --now mariadb

运行安全初始化向导

安装后必须执行 mysql_secure_installation,它会引导你完成以下操作:

  1. 设置(或修改)root 密码
  2. 删除匿名用户
  3. 禁止 root 用户远程登录
  4. 删除测试数据库
  5. 刷新权限表
mysql_secure_installation

不要跳过这一步

刚安装的 MariaDB/MySQL 在某些系统上 root 无密码可直接进入。运行安全向导是最快速地关闭常见安全漏洞的方式,生产环境必做。

创建数据库与用户

以 root 登录后,为每个应用创建独立的数据库和用户,遵循最小权限原则:

# 登录 MySQL/MariaDB
mysql -u root -p

-- 创建数据库(UTF-8 字符集)
CREATE DATABASE myapp CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- 创建用户(仅允许本地连接)
CREATE USER 'myapp_user'@'localhost' IDENTIFIED BY '强密码';

-- 授予该用户对应数据库的权限
GRANT ALL PRIVILEGES ON myapp.* TO 'myapp_user'@'localhost';

-- 刷新权限
FLUSH PRIVILEGES;

-- 验证用户存在
SELECT User, Host FROM mysql.user WHERE User='myapp_user';

配置字符集(避免中文乱码)

编辑 MariaDB 配置文件确保全局使用 UTF-8:

# 编辑配置文件
nano /etc/mysql/mariadb.conf.d/50-server.cnf

# 在 [mysqld] 段添加以下内容:
character-set-server  = utf8mb4
collation-server      = utf8mb4_unicode_ci

# 同时在 [client] 段添加:
default-character-set = utf8mb4

# 重启服务使配置生效
systemctl restart mariadb

验证字符集

mysql -u root -p -e "SHOW VARIABLES LIKE 'character_set%';"

常用管理命令速查

操作命令
查看所有数据库SHOW DATABASES;
查看当前用户SELECT USER();
查看所有用户SELECT User,Host FROM mysql.user;
删除数据库DROP DATABASE dbname;
备份数据库mysqldump -u root -p dbname > backup.sql
恢复数据库mysql -u root -p dbname < backup.sql

定期备份

数据库是网站最核心的资产。建议结合 crontab 和 mysqldump 做自动备份,并把备份文件同步到搬瓦工以外的存储位置。

小结

  • 新手建站选 MariaDB,从系统源安装最简便
  • 安装后立即运行 mysql_secure_installation 完成安全初始化
  • 每个应用单独建库建用户,权限最小化
  • 全局配置 utf8mb4 字符集,从根源避免中文乱码
  • 养成定期 mysqldump 备份的习惯

常见问题

MySQL 和 MariaDB 可以混用吗?

两者协议高度兼容,同一应用程序通常可以无缝切换。但不建议在同一系统同时运行两个实例,容易造成端口冲突与管理混乱。

mysql_secure_installation 的 root 密码和系统 root 密码一样吗?

不一样。这里的 root 是数据库的超级管理员账户,与 Linux 系统的 root 用户完全独立,建议设置不同的密码。

忘记了数据库 root 密码怎么办?

可以用 --skip-grant-tables 模式启动 MariaDB 后重置密码,具体步骤:先停止服务,以 --skip-grant-tables 重启,登入后执行 ALTER USER 重设密码,再正常重启。

如何查看 MariaDB 的版本?

登录后执行 SELECT VERSION(); 即可,或在终端执行 mysql --version。