为什么选择 MariaDB?
MariaDB 是 MySQL 的“亲兄弟”(由原始团队创建),完全兼容 MySQL,但在性能、安全性和开源生态上更进一步
- 线程池:高并发下比 MySQL 默认模式更省资源
- 存储引擎增强:Aria、InnoDB 持续优化
- 更多实用功能:窗口函数、并行复制、更灵活的权限管理
- 活跃社区:完全开源,无商业收购风险
无论是运行 Minecraft 群服、还是小型应用,MariaDB 都是替代 MySQL 的绝佳选择
在 Arch Linux 上安装 MariaDB
俩主力机都是Arch Linux
更新系统并安装
更新系统可参考我的(另一篇文章)
安装Mariadb
sudo pacman -S mariadb初始化数据库目录
sudo mysql_install_db --user=mysql --basedir=/usr --datadir=/var/lib/mysql启动服务并设置开机自启
sudo systemctl enable --now mariadb设置开机自启以免得我每次启动群服前都需要手动启动Mariadb
运行安全配置向导
sudo mysql_secure_installation按照提示,我依次设置了:
- 设置 root 密码
- 移除匿名用户(选
Y) - 禁止 root 远程登录(选
Y) - 删除测试数据库(选
Y) - 重新加载权限表(选
Y)
TIP每一步都有详细说明,看不懂英文的话有翻译软件或喂给AI
登录 MariaDB 控制台
mariadb -u root -p输入刚才设置的 root 密码,看到 MariaDB [(none)]> 提示符即成功
创建数据库和用户
创建一个新数据库
CREATE DATABASE mysql_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;utf8mb4:支持完整 Unicode 字符(包括表情符号)- 你可以把
mysql_db改成任意名字,比如mc-lp
创建一个专用用户
CREATE USER 'mc_user'@'localhost' IDENTIFIED BY '密码';'mc_user'@'localhost'表示该用户只能从本机连接(毕竟服务器运行在本地,数据库也一样)- 需要远程访问的话,可将
localhost换成其IP
给用户授予该数据库的所有权限
GRANT ALL PRIVILEGES ON mysql_db.* TO 'app_user'@'localhost';FLUSH PRIVILEGES;IMPORTANT这里只授予了
mysql_db库的权限,用户无法操作其他数据库。
验证用户权限
SHOW GRANTS FOR 'app_user'@'localhost';你会看到类似 GRANT ALL PRIVILEGES ON mysql_db.* TO ... 的输出。
Mariadb刷新权限状态与分号
刷新权限:FLUSH PRIVILEGES
FLUSH PRIVILEGES;这条命令的作用是重新加载权限表,让所有更改立即生效,作为日常操作习惯,一般会在 GRANT 之后加上它,以确保没啥小问题:
GRANT ALL ON mysql_db.* TO 'user'@'localhost';FLUSH PRIVILEGES;TIP在 MariaDB 10.x 及以上版本,
GRANT等语句会自动触发权限刷新,通常不需要额外执行FLUSH PRIVILEGES。但在操作时加上它也不是坏事,完成更改后还是刷新一下比较好
2. 分号 ;
在 MariaDB 控制台(或mysql 命令行客户端)中,分号 ; 表示一条 SQL 语句的结束符。你可以分多行写,直到输入分号后按回车,系统才会执行该语句
如果没有分号,MariaDB 会认为你还在继续输入,不会执行
emm,好几次都直接回车忘了写分号了😅
NOTE如果忘记写分号,命令行会一直显示
->提示你继续输入,输入分号后按回车即可执行
mariadb对命令的大小写不敏感,但对用户名和库表名是敏感的🤓😅
删除数据库与用户
CAUTION删除操作不可逆,请在执行前确认数据已备份或不再需要
删除操作
删除一个数据库
DROP DATABASE mysql_db;执行后该数据库及内部所有表、数据将被永久删除
删除一个用户
DROP USER 'mysql_user'@'localhost';查看现有用户/数据库
用户
SELECT User, Host FROM mysql.user;数据库
show databases;可以确认你要删除的用户/数据库是否存在
接入MariaDB
以 Minecraft LuckPerms 插件为例
LuckPerms 是一个流行的权限管理插件,支持 MariaDB 存储权限数据,我的群服会用到权限同步(
还得是数据库方便,传统的手动一个一个改还是太累了)
在plugins/LuckPerms/config.yml 中
一般用vim编辑该文件:
既然有GUI了,我用kite文本编辑器也行,但Vim好用啊
vim plugins/LuckPerms/config.yml找到 storage-method 和 data 段,修改为:
storage-method: mariadb
data: address: localhost:3306 database: lp-sql # 数据库名 username: mcserver # 用户名 password: ************* # 密码 pool-size: 10 # 连接池注释上说一般不改TIP保存并退出(Vim):
ESC后,写入****即可
像kite一样的GUI文本编辑器就Ctrl+S或有个保存的小图标
然后重启服务器就行
服务日志应该有:
[LuckPerms] Successfully connected to MariaDB database.然后就没啥事了
子服和主服的配置一样
迁移与备份
迁移数据库
经历:有换过新电脑,把旧服务器的 LuckPerms 权限数据完整迁移到新服务器上,导出再导入
在旧电脑上导出数据库
mariadb-dump -u root -p mysql_db > lp_backup.sqllp_backup.sql传到新电脑后,在新电脑上导入备份文件即可
mysql -u root -p mysql_db < lp_backup.sql输入 root 密码,没有报错提示即成功
验证数据,最后再看一下表里有没有数据就行
备份与恢复
备份整个数据库
mariadb-dump -u root -p mysql_db > backup_$(date +%Y%m%d).sql恢复数据库(前提是数据库已存在)
mysql -u root -p mysql_db < backup_20260506.sqlWARNING恢复会覆盖现有数据,请确保是你想要的操作
简单管理命令
忘了或懒得手动敲了的话,可以复制🤓
查看所有数据库
SHOW DATABASES;查看所有用户
SELECT User, Host FROM mysql.user;切换到某个数据库
USE mysql_db;查看当前数据库的所有表
SHOW TABLES;查看当前连接的用户
SELECT USER();常见问题
| 错误提示 | 可能原因 | 解决方法 |
|---|---|---|
Access denied for user | 密码错误或用户不存在 | 检查用户名、密码、主机(localhost) |
Can't connect to MySQL server on 'localhost' | MariaDB 服务未启动 | sudo systemctl start mariadb |
Unknown database 'xxx' | 数据库未创建 | 先用 CREATE DATABASE xxx; 创建 |
ERROR 2002 (HY000): Can't connect... | 服务未运行或 socket 路径错误 | sudo systemctl status mariadb 查看状态 |
导入备份时提示 Unknown collation | 新旧 MySQL/MariaDB 版本不兼容 | 编辑 sql 文件,将 utf8mb4_0900_ai_ci 等新排序规则改为 utf8mb4_unicode_ci |
大部分问题可以去官方文档,写的很详细
其它
好像没写mariadb的配置文件优化,但是一般不改也很够用了
MariaDB 不仅适用于 Minecraft 服务器,也适用于任何需要关系型数据库的场景
参考延伸:
如果这篇文章对你有帮助,欢迎分享给更多人!
部分信息可能已经过时
