如何安装、保护和性能调整 MariaDB 数据库服务器
数据库服务器是当今应用程序所必需的网络基础设施的关键组件。如果无法存储、检索、更新和删除数据(需要时),Web 和桌面应用程序的实用性和范围就会变得非常有限。
此外,了解如何安装、管理和配置数据库服务器(以使其按预期运行)是每个系统管理员必须具备的基本技能。
在本文中,我们将简要回顾如何安装和保护 MariaDB 数据库服务器,然后解释如何配置它。
安装并保护 MariaDB 服务器
在CentOS 7.x中,MariaDB 取代了 MySQL,在Ubuntu中仍然可以找到它(连同 MariaDB)。对于openSUSE也是如此。
为简洁起见,我们将在本教程中仅使用MariaDB,但请注意,除了名称和开发理念不同之外,两个关系数据库管理系统(简称RDBMS )几乎相同。
这意味着MySQL和MariaDB上的客户端命令是相同的,并且配置文件的命名和位于相同的位置。
要安装 MariaDB,请执行以下操作:
--------------- On CentOS/RHEL 7 and Fedora 23 --------------- # yum update && yum install mariadb mariadb-server # CentOS --------------- On Debian and Ubuntu --------------- $ sudo aptitude update && sudo aptitude install mariadb-client mariadb-server --------------- On openSUSE --------------- # zypper update && zypper install mariadb mariadb-tools # openSUSE
请注意,在Ubuntu中,您将被要求输入 RDBMS 根用户的密码。
安装上述软件包后,请确保数据库服务正在运行并已激活以在启动时启动(在CentOS和openSUSE中,您需要手动执行此操作,而在Ubuntu中,安装过程将已经为您处理好):
--------------- On CentOS/RHEL 7 and Fedora 23 --------------- # systemctl start mariadb && systemctl enable mariadb --------------- On openSUSE --------------- # systemctl start mysql && systemctl enable mysql
然后运行mysql_secure_installation
脚本。此过程将允许您:
- 设置/重置 RDBMS 根用户的密码
- 删除匿名登录(从而只允许具有有效帐户的用户登录 RDBMS)
- 禁用除本地主机之外的机器的 root 访问权限
- 删除测试数据库(任何人都可以访问)
- 激活与 1 至 4 相关的更改。
有关此过程的更详细描述,您可以参考在RHEL/CentOS/Fedora 和 Debian/Ubuntu 中安装 MariaDB 数据库中的安装后部分。
配置 MariaDB 服务器
默认配置选项按给定顺序从以下文件中读取:/etc/mysql/my.cnf
、/etc/my.cnf
和~/.my.cnf
。
通常,仅/etc/my.cnf
存在。我们将在此文件中设置服务器范围的设置(可以使用~/.my.cnf
每个用户的相同设置覆盖这些设置)。
我们需要注意的第一件事my.cnf
是,设置被组织成类别(或组),其中每个类别名称都用方括号括起来。
服务器系统配置在本节中给出[mysqld]
,通常您只会在下表中找到前两个设置。其余的是其他常用选项(如有指示,我们将使用我们选择的自定义值更改默认值):
设置和描述 | 默认值 |
datadir是存储数据文件的目录。 | 数据目录=/var/lib/mysql |
socket 表示用于本地客户端连接的套接字文件的名称和位置。请记住,套接字文件是用于在应用程序之间传递信息的资源。 | 套接字=/var/lib/mysql/mysql.sock |
bind_address 是数据库服务器监听 TCP/IP 连接的地址。如果您需要服务器监听多个 IP 地址,请忽略此设置(0.0.0.0 表示它将监听分配给此特定主机的所有 IP 地址)。
我们将改变这一点,以指示服务仅在其主地址(192.168.0.13)上监听: 绑定地址=192.168.0.13 |
绑定地址=0.0.0.0 |
port 表示数据库服务器将监听的端口。
我们将用 20500 替换默认值(3306)(但我们需要确保没有其他东西使用该端口): 虽然有些人会认为通过隐蔽性来实现安全性并不是好的做法,但将默认应用程序端口更改为更高的端口是一种基本的但有效的阻止端口扫描的方法。 |
端口=3306 |
innodb_buffer_pool_size 是使用 Innodb(MariaDB 中的默认设置)或 XtraDB 作为存储引擎时为频繁访问的数据和索引分配的内存缓冲池(以字节为单位)。
我们将默认值替换为 256 MB: innodb_buffer_pool_size=256M |
innodb_buffer_pool_size=134217728 |
skip_name_resolve 表示在传入连接时是否解析主机名。如果设置为 1(我们将在本指南中这样做),则仅解析 IP 地址。
除非您需要主机名来确定权限,否则建议通过将其值设置为 1 来禁用此变量(以加快连接和查询速度): skip_name_resolve=1 |
skip_name_resolve=0 |
query_cache_size 表示磁盘中查询缓存可用的大小(以字节为单位),SELECT 查询的结果存储在磁盘缓存中以供将来执行相同查询(对同一数据库并使用相同协议和相同字符集)时使用。
您应该根据 1) 重复查询的数量和 2) 这些重复查询预计返回的记录的大致数量来选择符合您需求的查询缓存大小。我们暂时将此值设置为 100 MB: 查询缓存大小=100M |
query_cache_size=0(表示默认禁用) |
max_connections 是客户端同时连接到服务器的最大数量。我们将此值设置为 30: max_connections=30每个连接将使用一个线程,因此会消耗内存。在设置 max_connections 时请考虑到这一事实。 |
最大连接数=151 |
thread_cache_size 表示客户端断开连接并释放之前使用的线程后,服务器分配的可重用线程数。在这种情况下,重用线程比实例化新线程更便宜(从性能角度而言)。
同样,这取决于您预期的连接数。我们可以安全地将此值设置为 max_connections 数量的一半: 线程缓存大小=15 |
thread_cache_size=0(默认禁用) |
在CentOS中,我们需要告诉SELinux允许MariaDB在重新启动服务之前监听非标准端口(20500 ):
# yum install policycoreutils-python # semanage port -a -t mysqld_port_t -p tcp 20500
然后重新启动 MariaDB 服务。
调整MariaDB性能
为了帮助我们根据特定需求检查和调整配置,我们可以安装mysqltuner(一个提供建议以提高数据库服务器性能和提高其稳定性的脚本):
# wget https://github.com/major/MySQLTuner-perl/tarball/master # tar xzf master
然后将目录更改为从 tarball 中提取的文件夹(具体版本可能因您的情况而异):
# cd major-MySQLTuner-perl-7dabf27
并运行它(系统将提示您输入管理 MariaDB 帐户的凭据)
# ./mysqltuner.pl
脚本的输出本身非常有趣,但让我们跳到底部,其中列出了需要调整的变量及其推荐值:
该query_cache_type
设置指示查询缓存是禁用(0)还是启用(1)。在本例中,mysqltuner建议我们禁用它。
那么为什么建议我们现在停用它呢?原因是查询缓存主要在高读取/低写入场景中有用(这不是我们的情况,因为我们刚刚安装了数据库服务器)。
警告:在更改生产服务器的配置之前,强烈建议您咨询专家数据库管理员,以确保 mysqltuner 给出的建议不会对现有设置产生负面影响。
概括
在本文中,我们解释了在安装并保护 MariaDB 数据库服务器后如何对其进行配置。上表中列出的配置变量只是您在准备使用服务器或稍后对其进行调整时可能需要考虑的几个设置。在进行更改之前,请务必参考官方 MariaDB 文档或参考我们的 MariaDB 性能调整技巧:
不要错过: 15 个有用的 MariaDB 性能调整和优化技巧
与往常一样,如果您对本文有任何问题或意见,请随时告诉我们。还有其他您想使用的服务器设置吗?欢迎使用下面的评论表与社区其他成员分享。