如何在Ubuntu和CentOS上安装和配置MariaDB

让我们学习如何安装和配置MariaDB,这是一个开源的流行MySQL关系数据库管理系统(RDBMS)。

它是社区开发的,并且有商业支持选项。MariaDB旨在与MySQL保持高度兼容,但存在一些差异。

在本文中,我们将介绍如何在Ubuntu 20.x和CentOS 7.x/8.x上安装和配置MariaDB,并在最后回顾一些保护和提高性能的最佳实践。

在Ubuntu上安装MariaDB

在Ubuntu 20.x上,可以直接从默认软件源中获取MariaDB。我们将使用apt来完成此任务。

首先通过以下命令更新apt软件源数据:

$ sudo apt update

软件源数据更新后,运行以下命令:

$ sudo apt install mariadb-server

这将安装MariaDB和所需的软件包。在执行上述命令期间,根据提示选择“Y”进行确认。

Do you want to continue? [Y/n] Y

在CentOS 7.x上安装MariaDB

对于CentOS 7.x,从默认CentOS软件源中可用的MariaDB版本是5.x。我们将安装最新可用版本的MariaDB。

为此,我们需要首先配置一个附加的yum软件源。MariaDB提供了一个简单的方法来使用mariadb_repo_setup脚本。在您的CentOS 7.x系统上执行以下命令以设置软件源:

$ sudo yum install wget
$ wget https://downloads.mariadb.com/MariaDB/mariadb_repo_setup
$ chmod +x mariadb_repo_setup
$ sudo ./mariadb_repo_setup

此脚本将自动设置所需的yum软件源以安装MariaDB的最新版本。撰写本文时,最新版本为10.x。

或者,如果您想手动进行,可以通过创建一个新的repo文件来配置一个手动的yum软件源:

$ sudo vi /etc/yum.repos.d/MariaDB.repo

然后将以下详细信息添加到repo文件中并保存:

[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.5/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1

现在运行以下命令以安装MariaDB:

$ sudo yum install MariaDB-server

在安装过程中,根据提示选择“y”进行确认:

Is this ok [y/d/N]: y

这将完成MariaDB服务器和相关软件包的安装。

在CentOS 8.x上安装MariaDB

对于CentOS 8.x,默认软件源中可用的版本是10.3或更新版本。我们可以使用DNF命令直接安装MariaDB:

sudo dnf install mariadb-server

否则,可以按照前一部分针对CentOS 7.x的手动方式获取最新版本。

启动MariaDB

在Ubuntu机器上,安装完成后会立即运行MariaDB服务,而在CentOS上,我们需要手动启用和启动相关服务。

无论是Ubuntu还是CentOS,运行以下命令以启动MariaDB服务,使其在启动时启用,并进行验证:

$ sudo systemctl start mariadb.service
$ sudo systemctl enable mariadb.service
$ sudo systemctl status mariadb.service

输出:

保护MariaDB

在安装MariaDB后的第一步,我们应该通过设置根密码、禁用远程根登录、删除测试数据库和匿名用户以及重新加载权限来保护其部署。

运行以下命令来加固MariaDB:

$ sudo mysql_secure_installation

您可以按照默认提示进行建议的操作,除非您有特定的要求。

输出:

$ sudo mysql_secure_installation

注意:建议在生产环境中运行此脚本的所有部分!请仔细阅读每个步骤!

为了登录MariaDB进行安全设置,我们需要root用户的当前密码。如果您刚刚安装了MariaDB,还没有设置root密码,请直接按Enter键。

输入root的当前密码(无密码则直接按Enter键):
好的,密码验证成功,继续...

设置root密码或使用unix_socket确保没有人可以未经授权登录MariaDB的root用户。

您已经保护了root账户,所以可以放心地回答“n”。

切换到unix_socket认证[Y/n] n
... 跳过。

您已经保护了root账户,所以可以放心地回答“n”。

更改root密码?[Y/n] n
... 跳过。

默认情况下,MariaDB安装了一个匿名用户,允许任何人在没有为其创建用户账户的情况下登录MariaDB。这仅适用于测试和使安装过程更顺利。在进入生产环境之前,您应该删除它们。

删除匿名用户?[Y/n] Y
... 成功!

通常,root只允许从“localhost”连接。这样可以确保网络上的任何人都不能猜测到root密码。

禁止远程root登录?[Y/n] Y
... 成功!

默认情况下,MariaDB带有一个名为“test”的数据库,任何人都可以访问。这也只适用于测试,在进入生产环境之前应将其删除。

删除test数据库和对其的访问权限?[Y/n] Y
 - 删除test数据库...
 ... 成功!
 - 删除test数据库的权限...
 ... 成功!

重新加载权限表将确保立即生效所有已进行的更改。

现在重新加载权限表吗?[Y/n] Y
 ... 成功!

清理中...

全部完成!如果您已完成上述所有步骤,您的MariaDB安装现在应该是安全的。

感谢使用MariaDB!
$

在这里,我们将使用系统的身份验证,因此没有为MariaDB设置单独的root密码,因为它已经是安全的。如果需要,您也可以设置单独的root密码。

设置验证

要验证您的MariaDB设置,请运行以下命令(指定运行mysql_secure_installation时设置的密码,或者如果当时跳过了,使用系统的root凭据):

$ sudo mysqladmin -u root -p version
输入密码:
mysqladmin  Ver 9.1 Distrib 10.5.8-MariaDB, for Linux on x86_64
版权所有(c)2000, 2018, Oracle, MariaDB Corporation Ab等。

服务器版本                  10.5.8-MariaDB
协议版本                    10
连接                        通过UNIX套接字本地主机
UNIX套接字                  /var/lib/mysql/mysql.sock
正常运行时间:                 53分钟17秒

线程数: 2  问题数: 77  慢查询数: 0  打开数: 20  打开的表数: 14  平均每秒查询数: 0.024
$

您可以设置一个新的管理员帐户,以替代root帐户,如下所示(将password的值更改为您要为admin帐户设置的值):

$ sudo mariadb
欢迎来到MariaDB监视器。输入“;”或“ g”以结束命令。您的MariaDB连接ID是44。服务器版本:10.5.8-MariaDB MariaDB服务器…

版权所有(c)2000, 2018, Oracle, MariaDB Corporation Ab等。

键入“help;”或“ h”以获取帮助。键入“ c”以清除当前输入语句。

MariaDB [(none)]> GRANT ALL ON *.* TO 'admin'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION;
查询成功,0行受影响(0.003秒)

MariaDB [(none)]> FLUSH PRIVILEGES;
查询成功,0行受影响(0.000秒)

MariaDB [(none)]> exit
再见
$

使用新的admin用户验证访问权限(输入先前步骤中设置的password):

$ mysqladmin -u admin -p version
输入密码:
mysqladmin  Ver 9.1 Distrib 10.5.8-MariaDB,适用于 x86_64 上的 Linux
版权所有(c)2000,2018,Oracle,MariaDB Corporation Ab 及其他。

服务器版本          10.5.8-MariaDB
协议版本            10
连接                通过 UNIX 套接字连接到本地主机
UNIX 套接字         /var/lib/mysql/mysql.sock
正常运行时间:     56 分 59 秒

线程数:2  问题数:83  慢查询数:0  打开连接数:20  打开表数:14  平均每秒查询数:0.024
$

操作系统优化

在安装和保护 MariaDB 设置之后,您应该采取措施来优化您的操作系统和数据库以实现最佳性能。这种优化将根据系统配置、使用类型、用户数量和其他因素而有所不同。

从操作系统的角度来看,可以为 MariaDB 配置一些系统参数,我们将在下面讨论这些参数。

Linux 内核设置 – IO 调度器

MariaDB 推荐的 IO 调度器是 noopdeadline。使用 cat /sys/block/${DEVICE}/queue/scheduler 命令来检查。

$ sudo cat /sys/block/sda/queue/scheduler
[mq-deadline] kyber bfq none
$

可以通过执行以下命令进行临时更改,对系统性能的影响(如果有的话)将立即生效:

$ sudo echo noop > /sys/block/sda/queue/scheduler

要使其持久化,您需要在 GRUB 的配置文件中进行配置,如下所示在 /etc/default/grub 中,然后重新构建 GRUB 并重启系统。

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash elevator=noop"

资源限制 – 打开文件限制

Linux 通常限制每个进程可以打开的文件描述符数量。对于活跃的数据库系统,此限制可能很容易超过或影响性能。在许多 Linux 系统上,此限制默认为 1024。此外,还有软限制和硬限制的选项。

要增加限制,您可以在 /etc/security/limits.conf 中添加以下行:

mysql soft nofile 65535
mysql hard nofile 65535

系统重新启动后,mysql 用户将能够看到并使用新的限制。可以使用以下命令进行检查:

$ ulimit -Sn
65535
$ ulimit -Hn
65535

资源限制 – 核心文件大小

Linux 限制核心文件的大小,如前面的情况所示。同样,它具有软限制和硬限制,但默认情况下软限制设置为 0,这实际上禁用了核心文件生成。要允许核心文件生成(other configurations needed for core dump generation),我们可以在 /etc/security/limits.conf 中增加此值:

mysql soft core unlimited
mysql hard core unlimited

系统重启后,mysql 用户将能够使用 ulimit 命令查看新的值,如下所示:

$ ulimit -Sc
unlimited
$ ulimit -Hc
unlimited

配置 Swappiness

在 Linux 中,Swappiness 值确定系统将页面从内存换出到系统上配置的交换空间的可能性。通常,默认值设置为 60,可以通过以下命令进行检查:

sysctl vm.swappiness

其值可以在 0 到 100 之间,其中较低的值意味着较低的交换可能性。在仅运行 MariaDB 的数据库服务器上,我们希望将此值减小为 0,以尽量避免使用交换空间。请注意,在设置 swappiness 值为 0 时,应谨慎考虑其他系统设计因素,因为在内存使用或 I/O 负载较高的情况下,内核可能会杀死 Out Of Memory (OOM) 进程。

鉴于数据库工作负载以及MariaDB数据库推荐使用较低的swappiness设置,建议将swappiness设置为1。您可以在/etc/sysctl.conf中添加以下行以使该更改持久化:

vm.swappiness = 1

这些更改将在系统重启后生效,但您始终可以使用sysctl命令提前进行更改:

sysctl -w vm.swappiness=1

文件系统优化

对于MariaDB来说,最好的Linux文件系统通常被认为是ext4XFSBtrfs,它们都包含在主线Linux内核中,得到广泛支持。这些文件系统在大多数Linux发行版上都可用。每个文件系统都有其独特的属性和功能,可以根据要求进行适当审查后选择。

此外,您不太可能需要在数据库服务器上记录文件访问时间。我们可以禁用此功能以提高性能。您可以使用noatime选项挂载相关文件系统,或将其添加到/etc/fstab文件的挂载选项中以使其持久化。

数据库优化

根据个人需求和需求,MariaDB内部有几个可定制的可调优项。

我们将在这里讨论其中的几个。

MariaDB的大部分配置都在my.cnf文件中。

Ubuntu上,您可以在以下位置找到my.cnf

/etc/mysql/my.cnf

而在CentOS上,它位于:

/etc/my.cnf

有关配置文件中可供调整的变量的详细文档可以参考here

很多也取决于MariaDB使用的引擎类型,即MyISAMInnoDB或XtraDB。两者都有各自的优点和缺点,选择其中之一取决于数据库和应用程序的要求。

我们应将innodb_buffer_pool_size设置为内存的大约80%。这样可以确保工作集的80%在内存中。

其他一些重要的可调优参数包括:

innodb_log_file_size
innodb_flush_method
innodb_thread_sleep_delay
innodb_adaptive_max_sleep_delay
innodb_buffer_pool_instances
innodb_buffer_pool_size
innodb_max_dirty_pages_pct_lwm
innodb_read_ahead_threshold
innodb_thread_concurrency

有关调整InnoDB或XtraDB变量的更多详细信息,请参阅here。有关MariaDB的所有可用调优选项,请参阅guide

如果您感兴趣,请查看这些资源以获取更多信息:learn SQL and NoSQL

结论

MariaDB是关系型数据库管理系统的热门选择之一。与多样化的社区一起,它变得更加出色。

要进一步学习,请参考其documentation,其中包括基本SQL、链接_8、MariaDB管理、高可用性、性能调优、存储引擎、编程和定制化等主题。如果不使用集群,您可能还想考虑disable binary logging

类似文章