外观
数据库安装与基础配置文档:安装、初始化、账号与权限设置
约 956 字
数据库安装权限
本说明覆盖数据库从安装到可被应用连接的全过程:装包并做安全初始化,按最小权限拆分账号,最后调整基础参数并完成连接测试。完成后应用使用独立账号连接本地库,root 不用于业务连接。
一、适用范围
- 适用:Debian 12、Ubuntu 22.04 上部署 MariaDB 10.11,MySQL 8 的差异在文中标注;单机部署,应用与数据库同机或同内网;需要为每个应用分配独立账号。
- 不适用:主从复制、集群与读写分离拓扑;云托管数据库实例,其参数与账号已由控制台托管;需要列级权限或行级安全的复杂授权模型。
二、准备工作
| 项目 | 要求 | 检查方法 |
|---|---|---|
| 系统版本 | Debian 12 或 Ubuntu 22.04 | cat /etc/os-release 中 VERSION_ID |
| 内存 | ≥ 2 GB,留出 1 GB 给数据库 | free -m 查看 available |
| 磁盘 | /var/lib/mysql 所在分区剩余 ≥ 10 GB | df -h /var/lib/mysql |
| 端口 | 3306 未被占用 | ss -lntp 中无 3306 监听 |
| 应用信息 | 已确定库名、用户名与来源主机 | 从应用配置文件中读取 |
| 备份 | 已有可用的 mysqldump 备份流程 | 参见「自动备份方案说明」 |
注意事项:
- 生产库的 root 密码与业务账号密码分开管理,业务账号不得具备 GRANT、FILE、SUPER 权限。
- 修改
/etc/mysql/mariadb.conf.d/50-server.cnf后必须重启 mysqld,reload 不会重读 innodb 相关参数。
三、操作步骤
本节拆成三个子步骤,建议按顺序执行;每一步完成后先确认结果,再进入下一步。
3.1 安装与初始化
安装服务端并完成安全初始化,消除匿名账号与远程 root。详见 3.1 安装与初始化。
3.2 账号与权限设置
按应用与只读两种用途建号,只授予所需库的 DML 权限。详见 3.2 账号与权限设置。
3.3 基础参数与连接测试
调整字符集、连接数与缓冲池,并用应用账号验证读写。详见 3.3 基础参数与连接测试。
四、验证方法
- 执行
systemctl is-active mariadb返回 active;mysqladmin --defaults-file=/etc/axis/db.cnf ping返回mysqld is alive。 - 执行
mariadb -e "SELECT VERSION(), @@character_set_server, @@max_connections;",预期版本 10.11.x、字符集 utf8mb4、连接数与配置一致。 - 用应用账号执行
mysql -h 127.0.0.1 -u axis_app -p axis -e "SELECT 1;",预期返回 1 且无权限错误。 - 用应用账号尝试
DROP DATABASE axis;,预期被拒绝并显示 Access denied,证明权限收敛生效。
五、常见问题
| 现象 | 可能原因 | 处理方式 |
|---|---|---|
| Can't connect to MySQL server | bind-address 为 127.0.0.1,而应用连的是公网地址 | 改为内网地址并放通 3306,或让应用改连回环地址 |
| Access denied for user | 账号的 host 部分与来源不匹配 | 按 'user'@'127.0.0.1' 建号,或补充对应 host |
| 中文写入变问号 | 库或连接字符集不是 utf8mb4 | 建库指定 utf8mb4,连接串显式声明 charset |
| Job for mariadb failed | 配置语法错误或数据目录权限异常 | journalctl -u mariadb -n 50 定位,mariadbd --validate-config 校验 |
| 磁盘占用持续增长 | binlog 或慢日志未清理 | 设置 expire_logs_days,并配置日志轮转 |
六、回滚与注意事项
- 回滚:卸载前先导出全量数据;配置从
/etc/mysql的备份目录还原后重启服务;卸载命令为apt -y purge mariadb-server。 - 注意:
mysql_secure_installation与mariadb-secure-installation名称随版本不同,执行前用command -v确认。 - 注意:授权语句中的 host 决定来源限制,
'%'等同于对全网开放,仅在隔离网络中短期使用。