MariaDB创建网站数据库和专用账号

网站程序不应直接使用数据库root账户。本文在Ubuntu 24.04的MariaDB环境中创建独立数据库和本地账号,适合WordPress等应用的安装与运行准备,不包含数据备份和迁移。已有MySQL或面板管理的数据库应沿用原管理方式,不能为照教程再安装另一套数据库。

确认服务与登录方式

mariadb --version
systemctl is-active mariadb
sudo ss -lntp

若mariadb命令不存在,且已经确认这是没有MySQL、MariaDB或面板数据库的独立新环境,可以执行下列安装命令;已有数据库的服务器跳过安装,先核对业务依赖与原管理方式,不能直接替换。

sudo apt update
sudo apt install mariadb-server
systemctl is-active mariadb
mariadb --version

只有安装任务明确成功、服务显示active后才继续。Ubuntu默认MariaDB安装常允许系统管理员经本机socket登录;使用sudo mariadb失败时,应按实际认证配置处理,不绕过权限或清空root密码。

在管理会话中创建独立库与账号

先准备新的库名、账号名和独立随机长密码。以下baole_site和baole_app为示例,确认没有同名正式资源后再执行;把REPLACE_WITH_UNIQUE_RANDOM_PASSWORD换成自己的密码。SQL中的引号需要按实际字符正确转义,密码不要放进公开截图或工单。可在当前管理会话禁用客户端历史:

sudo env MYSQL_HISTFILE=/dev/null mariadb

进入MariaDB提示符后逐条执行,而不是粘到Linux Shell:

每一步单独执行,确认成功后才进入下一步。任何一步出现已存在、权限或语法错误,都先停止,不继续授权。

第一步,创建新的独立数据库:

CREATE DATABASE baole_site CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

应返回Query OK。若提示数据库已存在,停止并确认归属;不要继续使用这个名称创建账号或授权,也不使用IF NOT EXISTS掩盖冲突。创建成功后核对库名与字符集:

SHOW CREATE DATABASE baole_site;

第二步,只有确认数据库是本次新建的独立库后,才创建新的本地账号。将密码占位符替换为独立随机长密码:

CREATE USER 'baole_app'@'localhost' IDENTIFIED BY 'REPLACE_WITH_UNIQUE_RANDOM_PASSWORD';

应返回Query OK。账号已存在或认证配置有误时立即停止,不能继续对未知旧账号执行GRANT,也不使用OR REPLACE覆盖它。

第三步,前两项均明确成功后,只向本次新账号授予本次新库的权限:

GRANT ALL PRIVILEGES ON baole_site.* TO 'baole_app'@'localhost';

看到授权成功后,再单独查看实际结果并退出管理会话:

SHOW GRANTS FOR 'baole_app'@'localhost';
EXIT;

SHOW GRANTS结果可能包含认证信息或密码哈希,不向公开页面、群聊或工单展示完整输出。这给予账号该库内的权限,便于程序安装升级,仍然能修改或删除本库数据;没有授予全局*.*权限,也没有WITH GRANT OPTION。仅需查询的业务应改为SELECT等明确权限。账号或数据库已存在时报错时停止核对,不用OR REPLACE覆盖现有对象。

使用网站账号自行验证

mariadb -u baole_app -p baole_site

看到提示后输入密码,不写成-p明文密码,避免命令历史和进程参数泄露。登录后执行:

SELECT CURRENT_USER(), DATABASE();
SHOW GRANTS;
SHOW TABLES;
EXIT;

CURRENT_USER应是baole_app@localhost,DATABASE应为baole_site;新库SHOW TABLES为空是正常结果。应用中的数据库名、用户、密码、主机分别对应填写。Unix socket连接localhost与TCP连接127.0.0.1可能采用不同匹配或路径,必须按应用实际方式验证,不能因为命令行某一种连接成功就忽略程序的完整报错。

常见报错和权限边界

报错 核对内容
Access denied 实际匹配账号、连接来源、密码和授权;先看CURRENT_USER结果。
Unknown database 库名是否拼错、是否连接了另一数据库实例。
Can’t connect to local server 服务、socket路径和应用连接方式;不先开放3306到公网。
程序安装成功但升级失败 查看缺少的具体权限,再决定该库范围内增加什么;不直接授予全局管理员权限。

如果本次账号未被正式程序使用而需要撤回,先确认没有依赖,再撤回该账号授权或停用账号;不要把DROP DATABASE作为“清理失败尝试”的默认动作。对已投入使用的库进行任何删除前,都要有独立恢复方案。