MariaDB
MariaDB 是 MySQL 关系数据库管理系统的一个社区开发的 fork 分支,旨在根据 GNU GPL 保持自由开源。 值得注意的是,它由 MySQL 的原始开发者领导,他们由于担心 Oracle 的收购而 fork 了它。
安装
Alpine Linux 仓库不再包含实际的 MySQL 二进制文件,安装 mysql-*
软件包将改为安装 MariaDB。
安装 mariadb
将创建用户 mysql
。当数据库初始化时,将向数据库添加两个用户:root
和 mysql
。 默认情况下,只有当您以相应的系统用户身份登录时,这些用户才能访问。
apk add mariadb mariadb-client
安装上述软件包将向系统添加 MariaDB 的主要组件:mariadb-cient
和 mariadb-server
。 下表描述了其他可用的软件包,并按生产服务器的相关性顺序列出。
MySQL 名称 软件包 | 自 Alpine 版本 | 简要用途 | 相关软件包 |
---|---|---|---|
mysql | v2 | 安装 mariadb 的过渡软件包 | mariadb |
mysql-client | v2 | 安装 mariadb 客户端工具的过渡软件包 | mariadb-client |
mariadb | v2 | server 等同于 mysql-server | mariadb-common |
mariadb-client | v2 | 连接命令行和工具 | mariadb-common |
mariadb-doc | v3.0 | mariadb 的手册页 | man man-pages |
mariadb-connector-odbc | edge | 编码或进行操作系统级别的连接,无需安装库即可连接到任何数据库 | . |
mariadb-connector-c | v3.8 | C 源代码上的编码连接 | mariadb-connector-c-dev |
mariadb-backup | v3.8 | 用于物理在线备份的工具,不再广泛使用 | . |
mariadb-server-utils | v3.8 | 不广泛使用的服务器命令,过去包含在 MariaDB 软件包中 | . |
mariadb-dev | v3.1 | MariaDB 的开发文件 | . |
mariadb-test | v3.3 | 来自 MariaDB 工具的测试套件 | . |
mariadb-mytop | v3.9 | 数据性能监控 | . |
mariadb-plugin-rocksdb | v3.9 | 用于数据的纯键值事件关系 | . |
mariadb-static | v3.8 | 用于构建中静态非依赖链接的静态库 | . |
mariadb-embedded | v3.9 | 与 C 客户端具有相同接口的 libmysqld | mariadb-embedded-dev |
mariadb-embedded-dev | v3.9 | 使用正常的 mysql.h 并与 libmysqld 而不是 libmysqlclient 链接 | mariadb-dev |
mariadb-openrc | v3.8 | 单独的脚本,过去嵌入在服务器软件包中 | . |
初始化
Alpine 仓库中 MariaDB 的版本行为类似于 MySQL tarball。 不包含图形工具。
位于 /var/lib/mysql 的 datadir 必须由 mysql 用户和组拥有。 可以通过编辑 /etc/init.d 中的 mariadb
服务文件来更改 datadir 的位置。 新位置还需要通过在 mariadb 配置文件中的 [mysqld]
部分中添加 datadir=<YOUR_DATADIR>
来设置。
mariadb 的正常初始化可以按如下方式完成
- 启动主服务。 此时将不会设置 root 密码。
rc-service mariadb start
- 通过运行
mysql_secure_installation
来保护数据库安全 - 设置权限以管理其他用户和数据库,请参阅:配置
- 将 MariaDb 添加到 OpenRC。
rc-update add mariadb default
配置
为了帮助数据库引擎的基本配置,MariaDB 提供了 mariadb-secure-installation。
运行此脚本的许多原因不再必要,因为自 MariaDB 10.4 以来,MariaDB 默认使用 Unix 套接字身份验证。
此脚本将引导您完成保护数据库安全的基本步骤。 选项解释如下。
- 输入 root 用户的当前密码(如果没有密码,请按 Enter 键): 如果您之前设置了 root 密码,请在此处提供密码并按 Enter 键。 如果没有,只需按 Enter 键。
- 切换到 unix_socket 身份验证 [Y/n] 设置 root 密码或使用 Unix_socket 确保只有管理员可以登录引擎数据库。 对于非生产服务器,只需按“n”即可设置 root 密码,这将给您响应
... skipping.
- 更改 root 密码? [Y/n] 在这里您可以更改 root 密码,或者在需要时设置一个密码。 按“Y”并输入新密码。
- 删除匿名用户? [Y/n] 删除为使用套接字身份验证登录而创建的匿名用户。 除非您确定需要这样做,否则请回答“Y”以删除它们。
- 禁止 root 用户远程登录? [Y/n] 通常,为了防止通过网络进行密码嗅探尝试,应仅允许 root 用户从“localhost”连接。 回答“Y”。
- 删除测试数据库并禁止对其的访问? [Y/n] 默认情况下,MariaDB 附带一个名为“test”的数据库,任何人都可以访问。 如果不需要,请回答“Y”。
- 现在重新加载权限表? [Y/n] 重新加载权限表将确保到目前为止所做的所有更改立即生效。 回答“Y”。
脚本退出后,使用 rc-service mariadb restart
重新启动服务
要在每次启动时启动数据库守护程序,请运行 rc-update add mariadb default
配置文件和自定义
MariaDB 的配置设置现在组织在单独的文件中,而不是存储在 my.cnf 中。 主要配置是通过将文件添加到 /etc/my.cnf.d/ 完成的。 用户特定的配置文件存储在 ~/.my.cnf 中。 用户特定的配置文件在系统范围的配置之后加载。 下面列出了各种配置文件的位置。
配置文件 | Alpine 版本 | 要配置的内容 |
---|---|---|
/etc/mysql/my.cnf | v2 到 v3.8 | 所有指令,全局配置文件 |
/etc/my.cnf.d/mariadb-server.cnf | 自 3.9 起 | 第一个全局配置文件,主要指令 |
$HOME/.my.cnf | 所有版本 | 仅用户名配置指令 |
如前所述,此页面描述了 MariaDB 的基本用法。 对于专业用途,也应参考 MySQL。
- 以下命令将配置服务器以接受所有传入连接。 这应该仅在开发时完成,或者如果数据库未暴露于 Internet 或敏感网络。
sed -i "s|.*bind-address\s*=.*|bind-address=0.0.0.0|g" /etc/mysql/my.cnf sed -i "s|.*bind-address\s*=.*|bind-address=0.0.0.0|g" /etc/my.cnf.d/mariadb-server.cnf
- 对于简单的安装,禁用主机名搜索可以提高性能,但仅对本地服务器有用。
sed -i "s|.*skip-networking.*|skip-networking|g" /etc/mysql/my.cnf sed -i "s|.*skip-networking.*|skip-networking|g" /etc/my.cnf.d/mariadb-server.cnf
更新或从升级版本迁移
在 Alpine Linux 版本之间升级时,MariaDB 也可能有主要版本更改,应升级数据库以匹配。 此过程的推荐步骤在下面详细介绍。
- 虽然可能不再是严格必要的,但在升级数据库版本之前备份数据库很有用。
- 更新 Alpine Linux 和 MariaDB/MySQL 软件包。
- 通过运行
apk add mariadb-server-utils
安装 mariadb-server-utils。 - 运行
mysql_upgrade -u root -p
脚本,并提供 root 数据库用户的密码。 - 通过运行
rc-service mariadb restart
重新启动服务。
如果 mysql_upgrade
因为 MySQL 无法启动而失败,请尝试使用 mysqld_safe --datadir=/var/lib/mysql/
在安全模式下运行 MySQL,然后再次运行 mysql_upgrade -u root -p
。
创建用户
您可能想要创建一个具有远程访问数据库权限的用户。
打开 mariadb 客户端:mariadb
添加具有关联主机和密码的用户: CREATE OR REPLACE USER admin@'%' IDENTIFIED BY 'ASecurePassword';
注意:@'%' 允许来自任何主机的连接
这不足以允许远程访问。 请参阅 配置 MariaDB 以进行远程客户端访问。