15个有用的MySQL/MariaDB性能调整和优化技巧

MySQL 是一款强大的开源关系型数据库管理系统,简称RDBMS。它于1995年发布(已有20年历史)。MySQL使用结构化查询语言,这可能是管理数据库内容最流行的选择。最新的MySQL版本是5.6.25,发布于2015年5月29日

关于MySQL的一个有趣事实是,其名称来源于Michael Widenius(MySQL的创始人)的女儿My。尽管关于MySQL有很多有趣的事实,本文旨在向您展示一些有用的实践,以帮助您管理MySQL服务器。

MySQL Performance Tuning

2009年4月,MySQL项目被Oracle收购。结果产生了一个名为MariaDB的MySQL社区分支。创建该分支的主要原因是为了保持项目在通用公共许可证下的自由性。

如今,MySQLMariaDB是最常用的(如果不是最常用的)用于网站应用程序如WordPressJoomlaMagento等的关系型数据库管理系统。

本文将向您展示一些基本但有用的提示,如何优化调整MySQL/MariaDB的性能。请记住,本文假定您已经安装了MySQL或MariaDB。如果您仍在犹豫如何在您的系统上安装它们,您可以按照我们的详尽指南进行操作:

  1. 在RHEL/CentOS 7上安装LAMP

在Ubuntu 15.04上设置LAMP

你需要知道的事情:

  1. MySQL/MariaDB配置文件位于/etc/my.cnf。每次修改此文件后,您需要重新启动MySQL服务以使新更改生效。
  2. 为了编写本文,使用了MySQL版本5.6作为模板。

1. 启用InnoDB文件每表

首先重要的是解释一下InnoDB是一种存储引擎。MySQL和MariaDB将InnoDB作为默认的存储引擎。过去,MySQL曾将数据库表和索引存储在系统表空间中。这种方法适用于专门用于数据库处理且存储磁盘不用于其他用途的服务器。

InnoDB提供了更灵活的方法,每个数据库信息都保存在一个.ibd数据文件中。每个.ibd文件代表一个独立的表空间。这样数据库操作,如“TRUNCATE”,可以更快地完成,并且在删除或截断数据库表时可以回收未使用的空间。

此配置的另一个好处是您可以将某些数据库表存储在单独的存储设备中。这可以极大地改善您的磁盘上的I/O负载。

innodb_file_per_table在MySQL 5.6及以上版本中默认启用。您可以在/etc/my.cnf文件中看到该指令。该指令如下所示:

innodb_file_per_table=1

2. 将MySQL数据库数据存储在单独的分区

注意:此设置仅适用于MySQL,而不适用于MariaDB。

有时,操作系统的读写可能会降低MySQL服务器的性能,特别是如果它们位于同一硬盘上。相反,我建议使用单独的硬盘(最好是SSD)来运行MySQL服务。

要完成此操作,您需要将新硬盘连接到计算机/服务器上。在本文中,我将假设该驱动器位于/dev/sdb下。

接下来的步骤是准备新驱动器:

# fdisk /dev/sdb

现在按“n”键创建新分区。然后按“p”键使新分区为主分区。之后,设置分区号从1-4。然后您将选择分区大小。在这里按回车。在下一步中,您需要配置分区的大小。

如果您希望使用整个磁盘,请再次按回车。否则,您可以手动设置新分区的大小。准备就绪后,按“w”键写入更改。现在我们需要为新分区创建文件系统。这可以很容易地完成:

# mkfs.ext4 /dev/sdb1

现在我们将在一个文件夹中挂载新分区。我已经将我的文件夹命名为“ssd”并创建在根目录中:

# mkdir /ssd/

我们准备在新文件夹中挂载我们刚刚创建的新分区:

# mount /dev/sdb1  /ssd/

您可以通过在/etc/fstab文件中添加以下行来在启动时执行挂载。

/dev/sdb1 /ssd ext3 defaults 0 0

现在您已经准备好将MySQL移动到新磁盘。首先使用以下命令停止MySQL服务:

# service mysqld stop

I would recommend you stopping Apache/nginx as well to prevent any attempts to write in the databases:

# service httpd stop
# service nginx stop

现在将整个MySQL目录复制到新驱动器:

# cp /var/lib/mysql /ssd/ -Rp

这可能需要一段时间,具体取决于您的MySQL数据库的大小。一旦此过程完成,请重命名MySQL目录:

# mv /var/lib/mysql /var/lib/mysql-backup

接下来,我们将创建一个符号链接。

# ln -s /ssd/mysql /var/lib/mysql

现在您已经准备好启动MySQL和Web服务:

# service mysqld start
# service httpd start
# service nginx start

此时,您的MySQL数据库将从新驱动器访问。

Source:
https://www.tecmint.com/mysql-mariadb-performance-tuning-and-optimization/