数据库基础02- 数据库安装与配置
数据库安装与配置:MariaDB/MySQL 部署实战
目录
- 安装前的准备与选型
- RHEL / Rocky 系安装
- Debian / Ubuntu 系安装
- 服务与客户端:mariadb / mysql / mysqld
- 初始安全配置与 root 认证差异
- 配置文件路径(两系差异)
- 数据目录与日志
- 防火墙放行(两系差异)
- SELinux 与 AppArmor 的影响
- 验证安装
- 总结
- 参考资料
安装前的准备与选型
0.1 装什么:直接 MariaDB 即可
不追求 MySQL 官方版时,直接用发行版自带的 MariaDB。它就在官方仓库里,命令简单,SQL 用法与 MySQL 完全一致。下文均以 MariaDB 为例。
0.2 装在哪里、需要什么
- 安装只发生在数据库服务器这一台机器上;
- 需要 root 或 sudo 权限;
- 先确认系统能访问软件源(
dnf/apt); - 数据库默认只监听本机(127.0.0.1),外部访问需额外放行(见第 7 章)。
0.3 关于版本
Rocky 9 / RHEL 9 官方仓库的 MariaDB 版本约 10.5.x,Debian 12 约 10.11.x,都是稳定的 LTS 系。对学习和绝大多数业务足够。只有需要比发行版更新的版本时,才需要添加 MariaDB 官方仓库(用 mariadb_repo_setup 脚本),本文不展开(用默认仓库即可)。
一、RHEL / Rocky 系安装
RHEL 系(含 Rocky、AlmaLinux)用 dnf,MariaDB 就在官方 appstream 仓库里,直接装:
# 刷新软件源缓存
$ sudo dnf update
# 安装 MariaDB 服务端与客户端
$ sudo dnf install mariadb-server mariadb
# 启动服务并设为开机自启
$ sudo systemctl enable --now mariadb
# 查看运行状态(能看到 active (running) 即成功)
$ systemctl status mariadb
若想装 MySQL 官方版而不是 MariaDB,需要先添加 MySQL 官方 Yum 仓库(dnf config-manager --add-repo 或安装 mysql80-community-release rpm)再 dnf install mysql-community-server,步骤更多。多数业务直接 MariaDB 即可。
二、Debian / Ubuntu 系安装
Debian 系用 apt,同样官方仓库自带 MariaDB:
# 先更新软件源列表(Debian 系装包前习惯 apt update)
$ sudo apt update
# 安装 MariaDB 服务端与客户端
$ sudo apt install mariadb-server mariadb-client
# 启动服务并设为开机自启
$ sudo systemctl enable --now mariadb
# 查看运行状态
$ systemctl status mariadb
两系安装差异小结:RHEL 系用 dnf install mariadb-server mariadb,Debian 系用 apt install mariadb-server mariadb-client;Debian 系装包前 apt update,RHEL 系用 dnf update。装完的服务名两系都叫 mariadb。另外,MySQL 官方版在 Debian 12 已不再随发行版提供(需自行加 MySQL 官方 apt 仓库),且 mariadb-server 与 mysql-server 不能同时安装(同占 3306、同名服务),只能二选一。
三、服务与客户端:mariadb / mysql / mysqld
刚接触容易混淆这几个名字,这里讲清:
| 名字 | 是什么 | 说明 |
|---|---|---|
mariadb |
systemd 服务名 | 两系统一的服务单元名(systemctl start mariadb) |
mariadbd / mysqld |
服务端守护进程二进制 | MariaDB 是 mariadbd,MySQL 是 mysqld |
mariadb / mysql |
命令行客户端 | 新版本统一叫 mariadb,mysql 是它的符号链接,两者都能用 |
mysqldump / mariadb-dump |
备份工具 | mariadb-dump 是 mysqldump 的别名 |
mariadb-secure-installation |
安全配置脚本 | mysql_secure_installation 是它的符号链接(见第 4 章) |
简单记:服务名看 mariadb,客户端命令 mysql 或 mariadb 都行,备份用 mysqldump。---
四、初始安全配置与 root 认证差异
4.1 跑安全配置脚本
装好后 root 默认可能无密码或认证方式受限,需要跑安全配置脚本加固:
# 官方工具:新版本叫 mariadb-secure-installation
# (mysql_secure_installation 是它的符号链接,两者都可用)
$ sudo mariadb-secure-installation
脚本会一步步问:是否设置 root 密码、是否删除匿名用户、是否禁止 root 远程登录、是否删除测试库、是否刷新权限表。生产环境这几项都应选择「是」。
4.2 root 默认认证方式(两系不同)
这是最容易困惑的一点,两系默认不同:
| 发行版 | root 默认认证 | 登录方式 |
|---|---|---|
| Debian / Ubuntu | unix_socket 认证(无密码) | sudo mysql 直接用系统 root 进,无需密码 |
| RHEL / Rocky | mysql_native_password,空密码 | 首次需 mariadb-secure-installation 设密码,用 mysql -u root -p 进 |
unix_socket 认证的含义:只要你是系统里的 root(或 sudo 用户),就能通过本机 socket 直接登录数据库 root,不需要数据库密码;非 root 用户无法用数据库 root 登录。这是 Debian 系默认的安全设计。
# Debian/Ubuntu:root 走 unix_socket,用系统 root 直接进
$ sudo mysql
# RHEL/Rocky:root 配了密码,用密码进
$ mysql -u root -p
五、配置文件路径(两系差异)
MariaDB 用分层配置文件,两系的目录结构不同:
# RHEL / Rocky 系
/etc/my.cnf # 主配置文件
/etc/my.cnf.d/ # 追加配置目录(含 mariadb-server.cnf 等)
# Debian / Ubuntu 系
/etc/mysql/ # 配置文件根目录
/etc/mysql/mariadb.cnf # 主配置(用 !includedir 引入下面的目录)
/etc/mysql/mariadb.conf.d/ # MariaDB 专属追加配置(含 50-server.cnf 等)
/etc/mysql/conf.d/ # 通用追加配置目录
想改配置(如监听地址、字符集、缓冲大小),在对应追加目录里新建一个 .cnf 文件即可。例如 RHEL 系在 /etc/my.cnf.d/ 下建 server.cnf,Debian 系在 /etc/mysql/mariadb.conf.d/ 下建 server.cnf:
[mysqld]
port = 3306
character-set-server = utf8mb4
bind-address = 127.0.0.1 # 只监听本机;如需对外访问改为 0.0.0.0 或具体 IP
改完重启服务生效:sudo systemctl restart mariadb。验证配置生效:mysql -u root -p -e "SHOW VARIABLES LIKE 'character_set_server';"。
bind-address 的安全含义:默认只监听 127.0.0.1(仅本机能连)。要让别的机器连,需改成 0.0.0.0 并配合防火墙与账号 host 限制,且确认有强密码后再对外开放。
六、数据目录与日志
数据与日志位置两系基本一致(都遵循打包惯例):
| 项 | RHEL / Rocky | Debian / Ubuntu |
|---|---|---|
| 数据目录 datadir | /var/lib/mysql |
/var/lib/mysql |
| socket 文件 | /var/lib/mysql/mysql.sock |
/run/mysqld/mysqld.sock |
| 错误/通用日志 | 常配到 /var/log/mariadb/mariadb.log |
/var/log/mysql/error.log |
| 运行时目录属主 | mysql:mysql |
mysql:mysql |
关于日志再补充两点:
- 未显式配置时,MariaDB 会把错误日志写到 datadir 下以主机名命名的
.err文件(如/var/lib/mysql/主机名.err);发行版打包通常会用配置把log_error指向日志目录(RHEL 常为/var/log/mariadb/mariadb.log,Debian 为/var/log/mysql/error.log); datadir是数据文件所在地,备份、扩容、迁移都要关注它;socket 文件用于本机客户端与服务通信(比 TCP 快,也是 unix_socket 认证的通道)。
七、防火墙放行(两系差异)
数据库默认只监听本机,需要对外提供服务时才放行 3306 端口。两系防火墙工具不同:
# RHEL / Rocky 系(firewalld)
$ sudo firewall-cmd --permanent --add-service=mysql
$ sudo firewall-cmd --reload
$ sudo firewall-cmd --list-services # 确认 mysql 已放行
# Debian / Ubuntu 系(ufw)
$ sudo ufw allow mysql # 或 ufw allow 3306/tcp
$ sudo ufw status
对应前面「防火墙」文档:RHEL 系用 firewall-cmd,Debian 系用 ufw。只对确实需要暴露的场景放行,否则保持默认本机监听更安全。
八、SELinux 与 AppArmor 的影响
两系的强制访问控制机制不同,也可能拦住数据库:
- RHEL/Rocky 用 SELinux:默认策略已允许 MariaDB 正常读写
/var/lib/mysql、监听 3306 端口(端口类型mysqld_port_t)。但当其他服务(如 httpd/nginx)要连本地数据库时,需开启布尔开关:
# 允许 Apache/PHP(httpd) 连接本地数据库(LAMP 常见)
$ sudo setsebool -P httpd_can_network_connect_db 1
若改用非默认端口(如 3307),还需用 semanage 把新端口归入 mysqld 的 SELinux 类型:
$ sudo semanage port -a -t mysqld_port_t -p tcp 3307
- Debian/Ubuntu 用 AppArmor:默认的 MariaDB AppArmor 配置会限制数据目录与 socket 的路径(
/etc/apparmor.d/usr.sbin.mariadbd)。若把 datadir 移到自定义路径,需同步修改该文件并systemctl reload apparmor,否则服务会因「权限被拒」起不来。
一句话:报「权限被拒」又查不出文件权限问题时,考虑是不是 SELinux/AppArmor 在拦——这在两系分别对应不同的排查思路。
九、验证安装
# 服务状态
$ systemctl status mariadb
# 服务端版本
$ mariadbd --version # 或 mysqld --version
# 客户端能否连上(会提示输入密码)
$ mysql -u root -p -e "SELECT VERSION();"
# 查看监听端口
$ ss -tlnp | grep 3306
能返回版本号、看到 3306 在监听,说明安装配置成功,下一步即可建库建表。
十、总结
- 安装:RHEL 系
dnf install mariadb-server mariadb,Debian 系apt install mariadb-server mariadb-client;服务名两系都是mariadb,systemctl enable --now mariadb启动并自启; - 初始安全:跑
mariadb-secure-installation;Debian 系 root 默认 unix_socket(sudo mysql无密码进),RHEL 系默认空密码、需设; - 配置:RHEL 读
/etc/my.cnf+/etc/my.cnf.d/,Debian 读/etc/mysql/+mariadb.conf.d/;socket 路径两系不同;datadir 都是/var/lib/mysql; - 防火墙/安全:RHEL 用
firewall-cmd放行 3306、SELinux 需httpd_can_network_connect_db;Debian 用ufw、AppArmor 限制路径;
用 SQL 建库建表、增删改查的内容在《数据库 SQL 基础》中展开。
参考资料
- MariaDB 官方知识库(使用 dnf 安装):https://mariadb.com/kb/en/installing-mariadb-with-dnf/
- MariaDB 官方知识库(使用 apt 安装 .deb 文件):https://mariadb.com/kb/en/installing-mariadb-deb-files/
- MariaDB 官方(安装服务端快速指南):https://mariadb.com/docs/server/mariadb-quickstart-guides/installing-mariadb-server-guide.md
- MariaDB 官方(systemd 服务管理):https://mariadb.com/docs/server/server-management/starting-and-stopping-mariadb/systemd
- MariaDB 官方(mariadb-secure-installation):https://mariadb.com/docs/server/clients-and-utilities/deployment-tools/mariadb-secure-installation
- MariaDB 官方(unix_socket 认证插件):https://mariadb.com/docs/server/reference/plugins/authentication-plugins/authentication-plugin-unix-socket
- MariaDB 官方(SELinux):https://mariadb.com/docs/server/security/securing-mariadb/selinux
- Rocky Linux 官方文档(MariaDB 数据库服务器):https://docs.rockylinux.org/9/guides/database/database_mariadb-server/
- Red Hat 官方文档(SELinux 与 MariaDB 布尔开关):https://docs.redhat.com/en/documentation/Red_Hat_Enterprise_Linux/7/html/selinux_users_and_administrators_guide/sect-managing_confined_services-mariadb-booleans
- Debian 官方维基(MySQL/MariaDB):https://wiki.debian.org/MySql
- MySQL 官方手册(安装):https://dev.mysql.com/doc/refman/8.0/en/installing.html
