介绍
在本实验中,你将学习 MySQL 服务器配置和性能调优的基础知识。你将从检查当前的服务器设置开始,然后修改一个关键的性能参数 innodb_buffer_pool_size,以了解更改如何生效。
本实验将指导你编辑 MySQL 配置文件,重启服务器以应用更改,并验证新设置是否生效。最后,你将学习一种使用 MySQL 内置的 profiler 分析查询性能的基本方法。这将为你优化数据库以适应不同工作负载奠定基础。
在本实验中,你将学习 MySQL 服务器配置和性能调优的基础知识。你将从检查当前的服务器设置开始,然后修改一个关键的性能参数 innodb_buffer_pool_size,以了解更改如何生效。
本实验将指导你编辑 MySQL 配置文件,重启服务器以应用更改,并验证新设置是否生效。最后,你将学习一种使用 MySQL 内置的 profiler 分析查询性能的基本方法。这将为你优化数据库以适应不同工作负载奠定基础。
在进行任何更改之前,了解你的 MySQL 服务器的当前配置至关重要。在此步骤中,你将连接到 MySQL 并检查一个关键性能变量 innodb_buffer_pool_size 的值。
首先,从你的桌面打开终端。
以 root 用户连接到 MySQL 服务器。在此实验环境中,你可以使用 sudo 连接而无需密码。
sudo mysql -u root
连接成功后,你将看到 MySQL 提示符 (mysql>)。
系统变量控制着 MySQL 服务器的行为。innodb_buffer_pool_size 变量决定了为缓存 InnoDB 表的数据和索引分配的内存量。一个大小合适的缓冲池对于良好的性能至关重要。
使用 SHOW VARIABLES 命令并配合 LIKE 子句来查找此变量的当前值。
SHOW VARIABLES LIKE 'innodb_buffer_pool_size';
你将看到类似以下的输出,显示默认值(以字节为单位)。请记下这个值,因为你将在下一步中更改它。
+--------------------------+-----------+
| Variable_name | Value |
+--------------------------+-----------+
| innodb_buffer_pool_size | 134217728 |
+--------------------------+-----------+
1 row in set (0.01 sec)
现在你已经检查了当前配置,可以退出 MySQL shell 了。
exit
MySQL 设置可以临时更改以用于当前会话,也可以永久保存在配置文件中。要使更改在服务器重启后仍然生效,你必须编辑配置文件。在此步骤中,你将修改 /etc/mysql/my.cnf 以增加 innodb_buffer_pool_size。
使用 nano 文本编辑器和 sudo 权限打开 MySQL 配置文件。
sudo nano /etc/mysql/my.cnf
向下滚动找到 [mysqld] 部分。此部分包含特定于 MySQL 服务器守护进程的设置。在 [mysqld] 标题下添加以下行,将缓冲池大小设置为 256 兆字节。
innodb_buffer_pool_size=256M
你的 [mysqld] 部分现在应该看起来像这样:
[mysqld]
innodb_strict_mode=OFF
init_connect='SET NAMES utf8'
character-set-server = utf8
collation-server=utf8_general_ci
innodb_buffer_pool_size=256M
现在,保存文件并退出 nano。按 Ctrl+X,输入 Y 确认更改,然后按 Enter 将更改写入文件。
配置文件中的更改只有在 MySQL 服务器重启后才会生效。使用 service 命令重启它。
sudo service mysql restart
你现在已经永久更新了配置。在下一步中,你将验证更改是否生效。
修改配置文件并重启服务器后,你必须验证新设置是否已正确应用。在此步骤中,你将重新连接到 MySQL 并再次检查 innodb_buffer_pool_size 变量。
连接到 MySQL 服务器。
sudo mysql -u root
现在,再次运行 SHOW VARIABLES 命令以查看新值。
SHOW VARIABLES LIKE 'innodb_buffer_pool_size';
输出现在应该显示新的值(以字节为单位)。MySQL 会自动将 256M(256 兆字节)转换为 268435456 字节。
+--------------------------+-----------+
| Variable_name | Value |
+--------------------------+-----------+
| innodb_buffer_pool_size | 268435456 |
+--------------------------+-----------+
1 row in set (0.00 sec)
将此值与你在步骤 1 中记下的值进行比较,可以确认你的配置更改已成功并且当前已激活。
你现在可以退出 MySQL shell 了。
exit
调整服务器变量是为了提高查询性能。虽然深入分析很复杂,但你可以使用 MySQL 内置的查询分析器(query profiler)来获得查询执行时间的基本测量。在此步骤中,你将创建一个测试表,插入数据,并分析一个简单查询。
首先,连接到 MySQL 服务器。
sudo mysql -u root
创建一个名为 testdb 的新数据库并切换到该数据库。
CREATE DATABASE IF NOT EXISTS testdb;
USE testdb;
接下来,创建一个名为 employees 的表来存储示例数据。
CREATE TABLE employees (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100),
department VARCHAR(50),
salary INT
);
向 employees 表中插入几条记录。
INSERT INTO employees (name, department, salary) VALUES
('Alice', 'Sales', 60000),
('Bob', 'Engineering', 80000),
('Charlie', 'Sales', 65000),
('David', 'Marketing', 55000);
现在,为你的会话启用查询分析器。这将记录后续查询的性能数据。
SET profiling = 1
执行一个你想分析的查询。例如,查找“Sales”部门的所有员工。
SELECT * FROM employees WHERE department = 'Sales';
要查看性能结果,请使用 SHOW PROFILES 命令。这将列出你启用分析器后运行的查询及其持续时间。
SHOW PROFILES;
输出将类似于此,显示每个查询的持续时间(以秒为单位)。
+----------+------------+-------------------------------------------------------+
| Query_ID | Duration | Query |
+----------+------------+-------------------------------------------------------+
| 1 | 0.00038500 | SELECT * FROM employees WHERE department = 'Sales' |
+----------+------------+-------------------------------------------------------+
1 row in set, 1 warning (0.00 sec)
此 Duration 列为你提供了查询性能的基准。在实际场景中,你将使用此工具在更大的数据集上比较配置更改前后的查询速度。
你已成功使用分析器分析了一个查询。你现在可以退出 MySQL shell 了。
exit;
在本实验中,你学习了配置和调优 MySQL 服务器的基本流程。你练习了如何通过检查 innodb_buffer_pool_size 等系统变量来查看当前的服务器配置。
你获得了实际操作经验,学会了修改 MySQL 配置文件 (my.cnf) 以进行永久性更改,重启服务器以应用更改,并验证新设置是否生效。最后,你了解了一种基本的性能分析技术,即使用 MySQL 内置的查询分析器(query profiler)来测量查询持续时间。
这些基本技能对于任何负责维护健康且高性能的 MySQL 数据库的开发者或管理员来说都至关重要。