5.1.1 配置服务器

MySQL 服务器mysqld具有许多命令选项和系统变量,可以在启动时进行设置以配置其操作。要确定服务器使用的默认命令选项和系统变量值,请执行以下命令:

shell> mysqld --verbose --help

该命令将生成所有mysqld选项和可配置系统变量的列 table。它的输出包括默认选项和变量值,如下所示:

abort-slave-event-count           0
allow-suspicious-udfs             FALSE
archive                           ON
auto-increment-increment          1
auto-increment-offset             1
autocommit                        TRUE
automatic-sp-privileges           TRUE
avoid-temporal-upgrade            FALSE
back-log                          80
basedir                           /home/jon/bin/mysql-5.7/
...
tmpdir                            /tmp
transaction-alloc-block-size      8192
transaction-isolation             REPEATABLE-READ
transaction-prealloc-size         4096
transaction-read-only             FALSE
transaction-write-set-extraction  OFF
updatable-views-with-limit        YES
validate-user-plugins             TRUE
verbose                           TRUE
wait-timeout                      28800

要在服务器运行时查看服务器实际使用的当前系统变量值,请连接至该服务器并执行以下语句:

mysql> SHOW VARIABLES;

要查看正在运行的服务器的一些统计信息和状态指示符,请执行以下语句:

mysql> SHOW STATUS;

也可以使用mysqladmin命令获得系统变量和状态信息:

shell> mysqladmin variables
shell> mysqladmin extended-status

有关所有命令选项,系统变量和状态变量的完整说明,请参见以下部分:

可从性能模式中获得更多详细的监视信息。参见第 25 章,MySQL 性能模式。另外,MySQL sys模式是一组对象,可方便地访问由 Performance Schema 收集的数据。参见第 26 章,MySQL sys 模式

MySQL 使用可扩展性很高的算法,因此您通常可以用很少的内存来运行。但是,通常可以通过为 MySQL 提供更多内存来获得更好的性能。

调整 MySQL 服务器时,要配置的两个最重要的变量是key_buffer_sizetable_open_cache。在尝试更改任何其他变量之前,您首先应该确信自己已经适当设置了这些设置。

以下示例说明了用于不同运行时配置的一些典型变量值。

  • 如果您至少有 1-2GB 的内存和许多 table,并且希望在中等数量的 Client 端上获得最佳性能,请使用以下方法:
shell> mysqld_safe --key_buffer_size=384M --table_open_cache=4000 \
           --sort_buffer_size=4M --read_buffer_size=1M &
  • 如果您只有 256MB 的内存并且只有几个 table,但是您仍然要进行很多排序,则可以使用以下方法:
shell> mysqld_safe --key_buffer_size=64M --sort_buffer_size=1M

如果同时连接数量很多,除非mysqld已配置为每个连接使用很少的内存,否则可能会发生交换问题。如果您有足够的内存用于所有连接,则mysqld的性能会更好。

  • 几乎没有内存,却有大量连接,请使用以下命令:
shell> mysqld_safe --key_buffer_size=512K --sort_buffer_size=100K \
           --read_buffer_size=100K &

甚至这样:

shell> mysqld_safe --key_buffer_size=512K --sort_buffer_size=16K \
           --table_open_cache=32 --read_buffer_size=8K \
           --net_buffer_length=1K &

如果要对比可用内存大得多的 table 执行GROUP BYORDER BY操作,请增加read_rnd_buffer_size的值以加快排序操作后的行读取速度。

如果您在命令行上为mysqldmysqld_safe指定一个选项,则该选项仅对服务器的调用有效。要在服务器每次运行时使用该选件,请将其放在选件文件中。参见第 4.2.2.2 节“使用选项文件”