原文: developer.fedoraproject.org/tech/databa…

原文作者: Adam Samalik , FaramosCZ , Honza Horak , antoninmrkvica , ricky grassmuck

MariaDB 是 MySQL 分叉出来的独立社区维护版本,能够完美替代 MySQL 。关于 MariaDB 的详细信息可阅 上游特性介绍页面 ,关于 MariaDB 和 MySQL 的主要区别,请阅 兼容性文档

Fedora 提供的 MySQL 版本

MariaDB 是 Fedora 官方推荐的 MySQL 版本。在绝大多数的应用场景下, MariaDB 都能够完美替代 MySQL ——通常情况下,绝大多数 MySQL 文档 也适用于 MariaDB 。

如果的确需要在 fedora 上安装社区版 MySQL ,可以使用 社区版 mysql 软件包( community-mysql )

Fedora 通常只提供最新的稳定版 MariaDB ,如果需要其他版本( fedora 不对这些版本提供支持),可以到维护者提供的 COPR 仓库 去下载。关于当前版本 MariaDB 的信息,可以查阅 上游文档 。在 Fedora 中, MariaDB 的软件包名称为 mariadb (客户端工具) 和 mariadb-server (服务 daemon )

如果想要较老版本,可以安装 MariaDB 5.5 软件包合集 上游提供的软件包

Fedora 提供包含 Galera 补丁的 MariaDB ,包名为 mariadb-galera-server galera 软件包则提供了 wsrep 插件。详细信息见本文末尾的【如何在 Fedora 中安装 MariaDB Galera】。

在 Fedora 上安装 MariaDB

安装 MariaDB 客户端:

$ sudo dnf install mariadb

安装 MariaDB 服务器:

$ sudo dnf install mariadb-server

如果需要用 GUI 连接 MariaDB ,可以安装 phpMyAdmin

$ sudo dnf install phpMyAdmin

或安装带有 MariaDB JDBC 插件的 Libre Office Base :

$ sudo dnf install libreoffice-base mariadb-java-client

如果想用 ODBC 连接 MariaDB ,需要安装 unixODBCmariadb-connector-odbc 包:

$ sudo dnf install mariadb-connector-odbc

Fedora 中使用 MariaDB 的基础教程

默认情况下,MariaDB 运行在 3306 端口,并会在本地的 /var/lib/mysql/mysql.sock 创建一个本地 unix socket 。数据默认存储在 /var/lib/mysql 目录中,日志则存储在 /var/log/mariadb/ 目录中。如果要修改上述默认目录,需要注意重新配置 SELinux 上下文和 owner 。

安装刚完成时,数据目录是空白的,其将会在第一次启动 MariaDB 时进行初始化。

运行下面的命令来启动 MariaDB :

$ sudo systemctl start mariadb

将 MariaDB 设置为系统启动时自动启动:

$ sudo systemctl enable mariadb

MariaDB 的 root 用户没有默认密码,可以直接连接数据库

mysql -u root

建议运行安全安装助手来使 MariaDB 更安全:

$ sudo mysql_secure_installation

该工具会要求你交互式地回答一些问题。请在此工具中单独设置一个复杂密码,而不要直接用当前系统管理员的密码 —— MySQL 用户 root 的身份认证是独立的。

配置 MariaDB

可以通过编辑 /etc/my.cnf~/.my.cnf 以及 /etc/my.cnf.d/ 下所有 .cnf 文件来实现对 MariaDB 客户端和服务器的配置。详细的配置方法请参考 上游文档

为本地开发配置 MariaDB 服务器

当使用 MariaDB 作为存储引擎来开发应用程序时,开发者通常需要一个对特定数据库 scheme 具有完全权限的用户账号。此时需要执行下面的命令来创建这个特定账号和数据库:

$ sudo systemctl start mariadb
$ sudo systemctl enable mariadb
$ sudo mysql_secure_installation
... My Account sudo mysql -u root -p
MariaDB [(none)]> create database db1;
Query OK, 1 row affected (0.00 sec)
MariaDB [(none)]> CREATE USER 'valeria'@'localhost' IDENTIFIED BY 'secretpass';
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> GRANT ALL ON db1.* TO 'valeria'@'localhost';
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> exit

接下来就可以使用该账户通过 MariaDB 命令行工具使用数据库了:

$ mysql -u valeria -p

(如果命令中带了 -p 参数而没有输入密码,程序会要求你单独输入)

在不同的框架或库中,都可以通过刚刚设置的用户名和密码来访问数据库。

如何在开发生产环境的过程中使用 MariaDB

若要在生产环境开发时使用 MariaDB ,开发者需要在启动服务时注意控制风险,这需要:

  • 使用上文中提到过的 mysql_secure_installation
  • 除非确有需要,否则不要接受来自所有地址的连接请求
  • 使用复杂密码
  • 只为应用程序提供恰好够用的权限
  • 默认配置下, MariaDB 是不接受其他电脑的连接请求的。如果想从其他电脑连接 MariaDB ,需要进行下列设置:

    开放 3306 端口:

    firewall-cmd --permanent --zone=public --add-port=3306/tcp
    

    修改前文中提过的 mysql 配置文件,增加下面的配置项,允许接收来自所有接口的请求(或根据需要配置):

    bind-address = 0.0.0.0
    

    其他通用配置

    可以通过在 /etc/my.conf.d/ 目录下创建配置文件来修改 MariaDB 服务器的配置参数。

    下面的例子展示了 /etc/my.conf.d/myconfig.cnf 文件的内容。该文件中包含一些经常被修改的配置选项(用户可以使用任何能满足需求的变量):

    # The maximum permitted number of simultaneous client connections:
    # 同时能够接受的最大客户端连接数:
    max_connections = 20
    # The minimum length of the word to be included in a FULLTEXT index:
    # 被包含在 FULLTEXT 索引中的单词的最小长度
    ft_min_word_len = 3
    # The maximum length of the word to be included in a FULLTEXT index:
    # 被包含在 FULLTEXT 索引中的单词的最大长度
    ft_max_word_len = My Account
    # In case the native AIO is broken, it can be disabled by:
    # 在 native AIO 损坏的情况下,可以通过下面的配置来关闭 native AIO
    innodb_use_native_aio = 0
    # Log slow queries:
    # 日志慢查询:
    slow_query_log = 1
    slow_query_log_file = "/var/log/mariadb/slowquery.log"
    # Log all queries (e.g. for debugging):
    # 日志全查询:( 用于 debug 等场景 )
    general_log = 1
    general_log_file = "/var/log/mariadb/query.log"
    

    修改配置文件后,需要使用 $ sudo systemctl restart mariadb 来重启服务。

    在 Fedora 上安装 MariaDB Galera

    MariaDB Galera 集群是一个 MariaDB 的多主异步集群。

    通过下面的命令安装 MariaDB Galera server 软件包:

    $ sudo dnf install mariadb-galera-server galera
    

    MariaDB Galera 使用了多个基础的 MariaDB 软件包,并提供与原 MariaDB 相同的服务名称。因此仍可用下面的命令启动 MariaDB Galera:

    $ sudo systemctl start mariadb
    

    获取 MariaDB Docker 容器

    $ sudo docker pull fedora/mariadb
    

    通过 Fedora 提供的扩展插件来扩展 MariaDB

    MariaDB 连接存储引擎 能让 MariaDB 访问外部的本地或远程数据 (MED) 。若要安装该引擎,运行下列命令:

    $ sudo dnf install mariadb-connect-engine
    

    若要安装 Open Query GRAPH 计算引擎 ,运行:

    $ sudo dnf install mariadb-oqgraph-engine
    

    将 MariaDB 服务器作为动态链接库使用

    在 Fedora 中,MariaDB 服务器也可以以动态库的方式来使用。该库(libmysqld.so)由 mariadb-embedded 包提供,相应的头文件包则在对应的 devel 包 mariadb-embedded-devel 提供。