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

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

它是社区开发的,可以选择商业支持。 MariaDB 旨在保持与 MySQL 的高度兼容,尽管存在一些偏差。

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

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

输出:

$ sudo systemctl start mariadb.service
$ sudo systemctl enable mariadb.service
Created symlink from /etc/systemd/system/multi-user.target.wants/mariadb.service to /usr/lib/systemd/system/mariadb.service.
$ sudo systemctl status mariadb.service
● mariadb.service - MariaDB 10.5.8 database server
   Loaded: loaded (/usr/lib/systemd/system/mariadb.service; enabled; vendor preset: disabled)
  Drop-In: /etc/systemd/system/mariadb.service.d
           └─migrated-from-my.cnf-settings.conf
   Active: active (running) since Thu 2020-12-31 13:20:04 IST; 13s ago
     Docs: man:mariadbd(8)
           https://mariadb.com/kb/en/library/systemd/
 Main PID: 13521 (mariadbd)
   Status: "Taking your SQL requests now..."
   CGroup: /system.slice/mariadb.service
           └─13521 /usr/sbin/mariadbd

Dec 31 13:20:04 centos7vm mariadbd[13521]: 2020-12-31 13:20:04 0 [Note] InnoDB: 10.5.8 started; log sequence number 45118; transaction id 20
Dec 31 13:20:04 centos7vm mariadbd[13521]: 2020-12-31 13:20:04 0 [Note] Plugin 'FEEDBACK' is disabled.
Dec 31 13:20:04 centos7vm mariadbd[13521]: 2020-12-31 13:20:04 0 [Note] InnoDB: Loading buffer pool(s) from /var/lib/mysql/ib_buffer_pool
Dec 31 13:20:04 centos7vm mariadbd[13521]: 2020-12-31 13:20:04 0 [Note] InnoDB: Buffer pool(s) load completed at 201231 13:20:04
Dec 31 13:20:04 centos7vm mariadbd[13521]: 2020-12-31 13:20:04 0 [Note] Server socket created on IP: '::'.
Dec 31 13:20:04 centos7vm mariadbd[13521]: 2020-12-31 13:20:04 0 [Note] Reading of all Master_info entries succeeded
Dec 31 13:20:04 centos7vm mariadbd[13521]: 2020-12-31 13:20:04 0 [Note] Added new Master_info '' to hash table
Dec 31 13:20:04 centos7vm mariadbd[13521]: 2020-12-31 13:20:04 0 [Note] /usr/sbin/mariadbd: ready for connections.
Dec 31 13:20:04 centos7vm mariadbd[13521]: Version: '10.5.8-MariaDB'  socket: '/var/lib/mysql/mysql.sock'  port: 3306  MariaDB Server
Dec 31 13:20:04 centos7vm systemd[1]: Started MariaDB 10.5.8 database server.
$

保护 MariaDB

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

  如何拍出好的 RAW 照片

运行以下命令来强化 MariaDB:

$ sudo mysql_secure_installation

除非您有特定的偏离要求,否则您可以按照默认提示操作建议的操作。

输出:

$ sudo mysql_secure_installation

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
haven't set the root password yet, you should just press enter here.

Enter current password for root (enter for none):
OK, successfully used password, moving on...

Setting the root password or using the unix_socket ensures that nobody
can log into the MariaDB root user without the proper authorisation.

You already have your root account protected, so you can safely answer 'n'.

Switch to unix_socket authentication [Y/n] n
 ... skipping.

You already have your root account protected, so you can safely answer 'n'.

Change the root password? [Y/n] n
 ... skipping.

By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] Y
 ... Success!

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] Y
 ... Success!

By default, MariaDB comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] Y
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] Y
 ... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!
$

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

  如何修复 VLC 转换器无音频错误

设置验证

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

$ sudo mysqladmin -u root -p version
Enter password:
mysqladmin  Ver 9.1 Distrib 10.5.8-MariaDB, for Linux on x86_64
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Server version          10.5.8-MariaDB
Protocol version        10
Connection              Localhost via UNIX socket
UNIX socket             /var/lib/mysql/mysql.sock
Uptime:                 53 min 17 sec

Threads: 2  Questions: 77  Slow queries: 0  Opens: 20  Open tables: 14  Queries per second avg: 0.024
$

您可以设置一个新的管理员帐户来代替 root,如下所示(将密码的值更改为您打算为管理员帐户设置的密码):

$ sudo mariadb
Welcome to the MariaDB monitor.  Commands end with ; or g.
Your MariaDB connection id is 44
Server version: 10.5.8-MariaDB MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.

MariaDB [(none)]> GRANT ALL ON *.* TO 'admin'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION;
Query OK, 0 rows affected (0.003 sec)

MariaDB [(none)]> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.000 sec)

MariaDB [(none)]> exit
Bye
$

使用新的管理员用户验证访问权限(输入上一步中设置的密码):

$ mysqladmin -u admin -p version
Enter password:
mysqladmin  Ver 9.1 Distrib 10.5.8-MariaDB, for Linux on x86_64
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Server version          10.5.8-MariaDB
Protocol version        10
Connection              Localhost via UNIX socket
UNIX socket             /var/lib/mysql/mysql.sock
Uptime:                 56 min 59 sec

Threads: 2  Questions: 83  Slow queries: 0  Opens: 20  Open tables: 14  Queries per second avg: 0.024
$

操作系统优化

安装并保护您的 MariaDB 设置后,您应该采取措施调整您的操作系统和数据库以获得最佳性能。 此调整将根据您的系统配置、使用类型、用户数量和许多其他因素而有所不同。

  13 个最佳音乐可视化工具,以获得更好的参与度

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

Linux 内核设置 – IO 调度程序

MariaDB 的推荐 IO 调度程序是 noop 和截止日期。 检查使用 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,这有效地禁用了核心文件的生成。 允许核心文件生成(核心转储生成所需的其他配置),我们可以在 /etc/security/limits.conf 中增加这个值:

mysql soft core unlimited
mysql hard core unlimited

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

$ ulimit -Sc
unlimited
$ ulimit -Hc
unlimited

配置交换性

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

sysctl vm.swappiness

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

由于建议为数据库工作负载和 MariaDB 数据库设置低交换性设置,因此建议将交换性设置为 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

关于配置文件中哪些变量可用于调优的详细文档可以参考 这里.

很大程度上还取决于 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 变量的更多详细信息 这里. 参考这个 指导 MariaDB 的所有可用调优选项。

如果您有兴趣,请查看这些资源以学习 SQL 和 NoSQL。

结论

MariaDB 是关系 DBMS 的流行选择之一。 与多元化社区一起开源进一步增加了它。

要进一步了解,请参阅其 文件 其中包括基本 SQL、迁移、MariaDB 管理、高可用性、性能调优、存储引擎、编程和定制等主题。 如果不使用集群,您可能还想禁用二进制日志记录。