如何在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 调度器是 noop
和 deadline
。使用 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文件系统通常被认为是ext4
、XFS
和Btrfs
,它们都包含在主线Linux内核中,得到广泛支持。这些文件系统在大多数Linux发行版上都可用。每个文件系统都有其独特的属性和功能,可以根据要求进行适当审查后选择。
此外,您不太可能需要在数据库服务器上记录文件访问时间。我们可以禁用此功能以提高性能。您可以使用noatime
选项挂载相关文件系统,或将其添加到/etc/fstab
文件的挂载选项中以使其持久化。
数据库优化
根据个人需求和需求,MariaDB内部有几个可定制的可调优项。
我们将在这里讨论其中的几个。
MariaDB的大部分配置都在my.cnf
文件中。
在Ubuntu上,您可以在以下位置找到my.cnf
:
/etc/mysql/my.cnf
而在CentOS上,它位于:
/etc/my.cnf
有关配置文件中可供调整的变量的详细文档可以参考here。
很多也取决于MariaDB使用的引擎类型,即MyISAM
和InnoDB或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。