在 Archlinux 上安装使用 MariaDB
本文最后更新于 2024年6月3日 14:27
MariaDB 是一个可靠、高性能的数据库,旨在为用户提供长期免费的、向下兼容的、能直接替代 MySQL 的数据库服务。
许多 Linux 发行版和 BSD 操作系统都包含 MariaDB,并将其作为 MySQL 的默认实现。例如 Archlinux、Debian(从 Debian 9 开始)、Fedora(从 Fedora 19 开始)、Red Hat Enterprise Linux(从 RHEL 7 开始)、CentOS(从 CentOS 7 开始)、OpenBSD(从 5.7 开始)和 FreeBSD 等[1]。
可见开源社区对 MySQL 未来发展和开放性的担忧,并且 MariaDB 几乎完全兼容 MySQL,使用上没有太大区别,可以放心使用。
0. btrfs 文件系统禁用 COW
此小节为 btrfs 文件系统禁用 COW,如果你的系统分区为 ext4,可以跳过这一小节。
Btrfs(B-tree 文件系统),一种支持写入时复制(COW)的文件系统。COW 简单说就是 写入 不会就地覆盖数据;相反,数据块在被复制和修改后会 写入到新的位置,元数据也会更新以指向新的位置。
如果你的 MariaDB 数据库运行在 btrfs 系统分区之上,你应当在创建数据库之前禁用 Copy-on-Write 特性[2],否则可能会导致数据库性能问题。
不应创建数据库之后再禁用,因为这一更改只会影响新创建的文件,而不会影响现有文件。
我们创建一个空目录 /var/lib/mysql:
1 | |
这个目录就是 MariaDB 数据库的数据目录。
展示目录属性:
1 | |
输出如下:
1 | |
表示 目录没有设置任何属性
现在设置禁用目录 Copy-on-Write 特性:
1 | |
展示目录属性:
1 | |
输出如下:
1 | |
C 表示 关闭 Copy-on-Write 特性[3]。
至此,我们已经在 /var/lib/mysql 目录下禁用了 Copy-on-Write 特性。
1. 安装 MariaDB
输入以下命令来安装 MariaDB:
1 | |
2. 初始化数据库
根据安装提示,我们在使用前还需初始化数据库:
1 | |
--user=mysql 表示使用 mysql 用户来初始化数据库,--basedir=/usr 表示 MariaDB 的安装目录,--datadir=/var/lib/mysql 表示数据库的数据目录。
我们可以在输出中看到:
1 | |
翻译:
创建了两个全权限账户。
一个是root@localhost,它没有密码,但需要系统 “root” 用户才能连接。例如,使用 sudo mysql。
第二个是mysql@localhost,它也没有密码,但你必须是系统 “mysql” 用户才能连接。
连接后,如果您需要能够 以任何这些用户身份使用密码 且无需 sudo 进行连接,则可以设置密码。
3. 启动 MariaDB 服务
输入以下命令来启动 MariaDB 服务:
1 | |
确认服务是否启动成功
1 | |
如果输出中显示 Active: active (running) 就表示服务启动成功了。
4. 配置 MariaDB
根据 Archwiki 的建议:
The
mariadb-secure-installationcommand will interactively guide you through a number of recommended security measures, such as removing anonymous accounts and removing the test database:
所以我们可以运行 mariadb-secure-installation 来进行安全配置:
1 | |
1 | |
这里我们直接回车,因为我们还没有设置密码。
1 | |
这里我们选择 n,因为它说 You already have your root account protected, so you can safely answer 'n',我们已经保护了 root 账户,所以可以安全地选择 n。
1 | |
Change the root password? [Y/n] 这一步询问你是否要更改 MariaDB 的 root 用户的密码。如果你想更改密码,就输入 “Y”,然后按回车键,系统会提示你输入新的密码。如果你不想更改密码,就输入 “n”,然后按回车键,系统会跳过更改密码的步骤。
我建议你设置密码,因为后面会使用到 mariadb -u root -p 来登录数据库,如果不设置会报错,只能用 sudo mariadb 来登录。
1 | |
这里我们选择 Y,因为这是一个安全措施,我们应该删除匿名用户。
1 | |
选择 Y,因为我们不希望 root 用户远程登录。可以配置反向代理或者 SSH 隧道来访问数据库。
1 | |
这里我选择 Y,不需要 test 数据库。
1 | |
这里我们选择 Y,重新加载权限表。
1 | |
至此,我们已经完成了 MariaDB 的安全配置。
5. 使用 MariaDB
5.1 常用命令
启动 MariaDB 服务并设置服务开机自启:
1 | |
查看 MariaDB 服务状态:
1 | |
更新 MariaDB:
1 | |
启动 MariaDB 服务:
1 | |
停止 MariaDB 服务:
1 | |
重启 MariaDB 服务:
1 | |
开机启动 MariaDB 服务:
1 | |
禁用 MariaDB 服务开机自启:
1 | |
5.2 登录 MariaDB
1 | |
或者
1 | |
如果这里报错:ERROR 1698 (28000): Access denied for user 'root'@'localhost',那么你需要使用 sudo mariadb 来登录,或者重新运行 sudo mariadb-secure-installation 来设置密码。
5.3 查看数据库
1 | |
命令行会输出:
1 | |
现在,你可以开始使用 MariaDB 了。MariaDB 默认只提供命令行工具,你也可以使用 beekeeper-studio 或者 navicat 等图形化工具来管理数据库,增删改查非常方便。
5.4 数据库升级
Arch 是一个更新比较激进的发行版,我们有时候更新后会看见 MariaDB 的提示:
1 | |
这时候我们就需要运行如下命令来升级数据库:
1 | |
比如我在写这篇文章的时候,MariaDB 从 11.3.2-MariaDB 升级到了 11.4.2-MariaDB,就运行了这个命令来升级数据库。Major version upgrade detected from 11.3.2-MariaDB to 11.4.2-MariaDB. Check required!
参考文章: