MySQL配置文件my.cnf在Linux下的详解

本文还有配套的精品资源,点击获取 menu-r.4af5f7ec.gif

简介:MySQL是广泛使用的开源数据库,其在Linux系统中的配置文件 my.cnf 是关键所在。该文件位于特定位置,并由多个配置节组成,包括 [mysqld] [mysqldump] [client] 等。配置项如 datadir socket user 等对于优化性能、安全和资源使用至关重要。本文深入解析了 my.cnf 的结构、主要配置项及其应用,为数据库管理员提供了性能调优和安全配置的详细指导。
linux下mysql配置文件my.cnf详解.pdf

1. MySQL数据库管理系统简介

MySQL是一种流行的开源关系型数据库管理系统(RDBMS),它基于客户端-服务器模型。它由瑞典MySQL AB公司开发,并在2008年被Sun Microsystems公司收购,Sun后来又被甲骨文公司(Oracle Corporation)收购。MySQL的名称来自其创始人迈克尔·维德纽斯(Michael Widenius)的女儿“Mysql”。

MySQL广泛用于网络应用,支持大型的数据库系统,它可以处理拥有上千万条记录的大型数据库。它使用结构化查询语言(SQL)进行数据库管理,这是用于存取数据的最常用语言。

MySQL的核心特性:

  • 高性能 :MySQL的存储引擎架构提供了高性能和数据类型灵活性。
  • 高可靠性 :MySQL提供了强大的数据保护和错误恢复机制。
  • 易用性和可移植性 :它具有简单的安装和配置过程,以及良好的跨平台支持。
  • 强大的数据处理能力 :支持复杂的事务处理、存储过程和触发器。
  • 可扩展性和灵活性 :允许存储不同类型的数据,如数字、文本、图片、声音等。

安装MySQL

在Linux系统上安装MySQL数据库通常可以通过包管理器完成,以下是基于Debian/Ubuntu系统的安装示例:

sudo apt-get update
sudo apt-get install mysql-server

在Windows上,MySQL提供了安装向导,可以直接从官方网站下载并跟随向导进行安装。

安装完成后,可以通过以下命令启动MySQL服务:

sudo systemctl start mysql

在Linux上,MySQL默认的root用户密码可以通过查看日志文件获得:

sudo grep 'temporary password' /var/log/mysqld.log

接着,使用该密码登录MySQL命令行界面:

mysql -u root -p

登录成功后,建议立即更换root用户的密码,并执行安全性升级。

随着数据量的增长和业务需求的变化,对MySQL的性能调优和安全性管理变得至关重要。后续章节中,我们将深入探讨MySQL的配置文件 my.cnf ,如何在Linux环境下进行配置优化和安全加固,以及如何利用配置节提高MySQL的稳定性和效率。

2. Linux下MySQL配置文件my.cnf概述

MySQL是一个广泛使用的开源关系数据库管理系统,而 my.cnf 是MySQL在Linux平台下的主要配置文件。它允许数据库管理员通过定义各种参数来调整MySQL服务器的行为。配置文件的合理设置对确保MySQL的高性能和稳定性至关重要。

2.1 my.cnf文件的作用和重要性

2.1.1 my.cnf在MySQL中的角色

MySQL的配置文件 my.cnf 对于数据库的安装、运行以及优化起到关键作用。它作为MySQL软件的配置中心,包含了启动参数、系统变量、以及影响性能的指令。 my.cnf 中的配置项可以控制诸如缓冲池大小、连接数、查询缓存大小等多个方面,从而使得数据库能够按照特定环境和需求进行调整。合理的配置能够提高数据库的运行效率,避免资源浪费,并在特定情况下提升系统的安全性和稳定性。

2.1.2 my.cnf对于MySQL性能的影响

在部署MySQL服务器时,如果没有进行合理的配置,数据库可能会出现性能问题,如内存耗尽、响应缓慢、连接超时等。通过仔细配置 my.cnf 中的各项参数,可以有效提高MySQL的性能。例如,通过调整 innodb_buffer_pool_size 参数可以增加InnoDB存储引擎的缓冲池大小,这个参数对于提升数据库的读写性能至关重要。另外,通过设置合适的连接数 max_connections 可以防止因过多并发连接而耗尽MySQL可用的连接资源。因此,理解和掌握 my.cnf 的配置对任何希望优化MySQL性能的数据库管理员来说都至关重要。

2.2 my.cnf的版本和兼容性

2.2.1 不同版本MySQL的my.cnf差异

随着MySQL版本的更新,其配置文件 my.cnf 的结构和可用的配置项可能会发生变化。例如,在MySQL 5.7版本中使用的配置项,在MySQL 8.0中可能会被新的配置项替代或者废弃。这要求数据库管理员在升级MySQL版本时,需要仔细检查并更新 my.cnf 文件以匹配新版本的配置要求。这样做不仅可以避免配置错误,还能确保新版本的MySQL特性得到充分利用。

2.2.2 兼容性问题的解决方法

遇到不同MySQL版本的配置文件兼容性问题时,数据库管理员可以采取以下几种方法来解决:
- 逐步迁移 :逐步迁移配置项,而非一次性更新整个 my.cnf 文件。
- 查阅官方文档 :通常每个MySQL版本的发行说明都会包含关于配置文件变更的信息,查阅官方文档可以了解具体的变更细节。
- 使用配置工具 :例如MySQL提供的 mysql_tuner.pl 脚本,可以帮助管理员检查当前配置并提出优化建议。
- 创建多个配置文件 :在不同版本的MySQL中,可以创建多个配置文件,并在MySQL启动时指定正确的文件,以确保兼容性。

通过上述方法,数据库管理员可以在保持系统稳定运行的同时,解决不同MySQL版本带来的配置兼容性问题。

3. my.cnf文件位置与配置节解析

3.1 my.cnf文件的默认位置和搜索顺序

3.1.1 确定my.cnf文件位置的方法

MySQL的配置文件 my.cnf my.ini 是控制MySQL服务运行参数的重要文件。在Linux环境下,MySQL服务器通常会寻找特定的路径来定位这个配置文件。确定配置文件位置的常用方法包括:

  • 使用 mysqld --help 命令查看配置文件路径:
    执行此命令,通常会输出MySQL服务器的版本信息以及它寻找配置文件的路径列表。例如:
    shell mysqld --help | grep 'Default options are read from'
    输出可能会显示类似这样的信息:
    Default options are read from the following files in the given order: /etc/mysql/my.cnf /etc/my.cnf /usr/etc/my.cnf ~/.my.cnf

  • 查看环境变量 MYSQL_TCP_PORT MYSQL_UNIX_PORT
    这些环境变量可能包含指向配置文件的链接或路径。

  • 使用 mysql --help 命令查看客户端配置文件路径:
    类似地,这将显示客户端配置文件 my.cnf my.ini 的位置。

  • 查看 /etc/mysql/conf.d /etc/mysql/mysql.conf.d 目录:
    一些Linux发行版将MySQL的配置文件分散到这些目录中的 .cnf .ini 文件里。

3.1.2 配置文件的搜索顺序

MySQL服务器启动时会按照一个预设的顺序搜索配置文件,确保正确配置以启动MySQL服务。搜索顺序如下:

  1. /etc/mysql/my.cnf :系统级配置文件,适用于所有MySQL实例。
  2. /etc/my.cnf :默认情况下,此文件可能不存在,但可作为用户自定义的全局配置。
  3. /usr/etc/my.cnf :一些系统将配置文件放置在这个路径下。
  4. ~/.my.cnf :用户级配置文件,只对特定用户有效。

MySQL客户端也有类似的搜索顺序来找到配置文件。需要注意的是,MySQL会按顺序读取这些文件,并且后面的文件可以覆盖前面文件中的配置项。

3.2 配置节的基本概念

3.2.1 什么是配置节

配置节在MySQL配置文件中用于对特定组件或行为进行详细设置。每个配置节包含一组特定的参数和值,它们影响着MySQL的不同方面,例如:

[mysqld]
port = 3306
user = mysql

[mysqldump]
quick
max_allowed_packet = 16M

[client]
port = 3306

在上述示例中, [mysqld] [mysqldump] [client] 就是配置节名称,它们定义了MySQL服务器、备份工具和客户端的配置参数。

3.2.2 如何创建和管理配置节

配置节的创建和管理取决于MySQL的版本和所使用的操作系统。通常,配置节的创建和管理过程如下:

  1. 打开或创建MySQL配置文件:
    根据确定的配置文件位置,找到 my.cnf my.ini 文件,使用文本编辑器打开它。

  2. 添加或修改配置节:
    在配置文件中添加新的配置节或修改现有配置节。例如,如果你想为MySQL服务器设置字符集,可以添加如下配置节:
    ini [mysqld] character-set-server=utf8

  3. 保存配置文件并验证:
    保存更改后,确保配置文件的语法是正确的。在Linux中,可以使用 mysql_t 工具来检查 my.cnf 文件是否语法正确:
    shell mysql_t --validate-config --_defaults-extra-file=/path/to/my.cnf
    没有错误提示即表示语法正确。

  4. 重启MySQL服务:
    应用更改后,需要重启MySQL服务使配置生效:
    shell systemctl restart mysql

  5. 测试配置更改:
    通过登录MySQL服务器,检查参数是否生效来测试配置更改。

通过上述步骤,可以创建和管理MySQL配置文件中的各个配置节,以达到优化和调整数据库行为的目的。

4. [mysqld]节配置详解

4.1 [mysqld]节的作用和基本配置

4.1.1 [mysqld]节的定义和作用

在MySQL的配置文件my.cnf中,[mysqld]节是服务器端程序mysqld的配置区域,它用于定义和调整MySQL服务器的行为和性能。这个节对于MySQL服务器来说是至关重要的,因为它是MySQL实例启动时读取的配置信息的主要来源。

[mysqld]节中的配置项会直接影响数据库服务器的运行方式,包括内存分配、连接设置、查询缓存大小以及安全设置等。合理地配置[mysqld]节能够提高数据库的性能、稳定性和安全性。配置项的具体作用范围从启动选项到优化参数,几乎涉及到了MySQL服务器运行的各个方面。

4.1.2 常用的[mysqld]节配置项

以下列举了一些常用的[mysqld]配置项及其说明:

  • user : 运行MySQL服务的用户。
  • port : MySQL服务监听的端口,默认为3306。
  • socket : MySQL服务使用的套接字文件。
  • datadir : 数据库文件存放的目录。
  • innodb_buffer_pool_size : InnoDB存储引擎用来缓存数据和索引的内存区域大小。
  • max_connections : MySQL允许的最大并发连接数。
  • query_cache_size : 查询缓存的大小。
  • thread_cache_size : 服务器可以保留的线程缓存数量。
[mysqld]
user = mysql
port = 3306
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql
innodb_buffer_pool_size = 128M
max_connections = 151
query_cache_size = 64M
thread_cache_size = 16

在配置时,需要注意各个参数之间的依赖关系和可能的冲突,比如合理设置 max_connections 时要考虑系统资源和 thread_cache_size 的配置。

4.2 [mysqld]节的高级配置

4.2.1 服务器性能相关配置

针对服务器性能的优化是[mysqld]节配置中最为重要的一部分。性能相关的配置项包括但不限于:

  • innodb_flush_method : InnoDB刷写磁盘的方法,常见的选项有 O_DIRECT fsync
  • innodb_log_file_size : InnoDB事务日志文件的大小。
  • join_buffer_size : 联合查询时分配的缓冲区大小。
  • sort_buffer_size : SQL排序时使用的缓冲区大小。
  • table_open_cache : MySQL打开表的缓存数量。
[mysqld]
innodb_flush_method = O_DIRECT
innodb_log_file_size = 128M
join_buffer_size = 2M
sort_buffer_size = 2M
table_open_cache = 2000

合理地调整这些参数可以提高数据库的读写速度、减少磁盘I/O操作,并且还可以提升并发处理能力。

4.2.2 存储引擎和字符集配置

存储引擎和字符集的配置影响数据的存储方式和编码转换。关键的配置项包括:

  • default_storage_engine : 默认的表存储引擎,如InnoDB、MyISAM等。
  • character_set_server : 服务器端使用的字符集。
  • collation_server : 服务器端默认的校对规则。
  • innodb_file_per_table : 是否为每个InnoDB表创建一个单独的文件。
[mysqld]
default_storage_engine = InnoDB
character_set_server = utf8mb4
collation_server = utf8mb4_unicode_ci
innodb_file_per_table = 1

针对不同的业务场景,选择合适的存储引擎和字符集是至关重要的。比如, utf8mb4 字符集支持更多的Unicode字符,适合需要存储特殊字符的数据。

通过高级配置,可以确保MySQL数据库在不同的工作负载下都能保持良好的性能和稳定性。同时,合理配置存储引擎和字符集可以保证数据的正确存储和有效检索。下一章节我们将继续探讨[mysqldump]节的配置详解。

5. [mysqldump]节配置详解

5.1 [mysqldump]节的作用和基本配置

5.1.1 [mysqldump]节的定义和作用

[mysqldump]配置节在my.cnf文件中用于自定义mysqldump工具的行为。mysqldump是一个常用的数据库备份工具,可用于导出数据库的结构和数据到一个SQL脚本文件中。[mysqldump]节允许数据库管理员对备份过程进行调整,以适应不同的备份需求。

5.1.2 常用的[mysqldump]节配置项

  • quick :当启用此选项时,mysqldump会在备份数据时使用更快的锁定方法。它适用于只读数据库备份,可以减少备份过程中对数据库性能的影响。
  • single-transaction :该选项使得mysqldump使用一致性读取,从而允许备份过程中不加锁。它适用于InnoDB存储引擎的表,并且需要在事务隔离级别为REPEATABLE READ时才能正常工作。
  • max_allowed_packet :限制了服务器和客户端之间通信时允许的最大数据包大小,这包括查询和数据行。当处理大型的二进制数据时,可能需要增加此值以避免溢出错误。
  • lock-all-tables :在备份开始时加锁所有数据库中的所有表。当备份多个数据库时,此选项特别有用。
[mysqldump]
quick
single-transaction
max_allowed_packet=1024M

在上述示例配置中, quick single-transaction 选项被启用,以提高备份效率和降低锁定时间。 max_allowed_packet 被设置为1024M,以允许大数据量的传输。这些调整能够帮助管理员进行更为高效和安全的数据库备份操作。

5.2 [mysqldump]节的高级配置

5.2.1 数据备份和恢复相关配置

  • add-drop-database :在创建数据库备份脚本时,自动添加 DROP DATABASE 语句。这对于在恢复数据前清理旧数据库很有帮助。
  • add-drop-table :在创建表备份时,自动添加 DROP TABLE 语句。这是为了防止在恢复过程中出现“表已存在”的错误。
  • complete-insert :使用完整的INSERT语句进行备份。这样的备份文件能够包含更多的列信息,有助于在不同版本的MySQL间迁移数据。
  • master-data :在备份文件中包含二进制日志信息,这对于主从复制配置中的数据备份非常有用。
[mysqldump]
add-drop-database
add-drop-table
complete-insert
master-data=2

在该示例中, add-drop-database add-drop-table 被启用,使得备份文件在恢复前可以自动清理旧数据库和表。 complete-insert 选项确保了备份脚本在恢复时可以更加灵活。 master-data=2 表示在备份文件中记录二进制日志文件名和位置,这对于复制架构中的数据备份尤为关键。

5.2.2 性能优化相关的配置项

  • default-character-set :指定备份文件使用的默认字符集。这对于保持数据的一致性和正确性至关重要,尤其是在涉及多字节字符集时。
  • compress :在客户端和服务器之间启用压缩。在低带宽环境下,压缩可以显著减少数据传输时间和网络负载。
  • net_buffer_length :设置用于网络传输的缓冲区大小。较小的缓冲区可以减少内存使用,较大的缓冲区可以加快备份过程。
[mysqldump]
default-character-set=utf8mb4
compress
net_buffer_length=256k

在此配置段中, default-character-set=utf8mb4 确保备份文件在支持最多Unicode字符的同时, compress 选项启用数据压缩以节约带宽。 net_buffer_length=256k 则平衡了内存使用和传输效率,适应了不同的网络环境和备份大小。

通过以上针对[mysqldump]节的配置项进行细致的解读和实际应用的结合,管理员可以根据自身的环境和需求,合理配置mysqldump工具,达到提升备份效率、增强数据恢复成功率和优化整体数据库性能的目的。

6. [client]节配置详解

6.1 [client]节的作用和基本配置

6.1.1 [client]节的定义和作用

在MySQL的配置文件my.cnf中, [client] 节是专门用来配置客户端行为的区域。它主要影响如何连接到MySQL服务器,以及客户端的交互方式。配置在这个节中的参数一般适用于所有MySQL客户端工具,例如mysql命令行工具、图形界面客户端(如phpMyAdmin)等。虽然 [client] 节并不是所有配置文件的必须部分,但它提供的配置项能够帮助用户更高效、更安全地使用MySQL客户端。

6.1.2 常用的[client]节配置项

  • user : 这个参数用来指定默认的MySQL用户,当从命令行使用无用户名参数时,MySQL客户端会默认使用这个用户去连接MySQL服务器。
  • password : 设置客户端连接时的密码。为了安全性考虑,在配置文件中直接明文指定密码并不是推荐的做法,而是推荐在运行时动态输入或使用环境变量。
  • port : 指定客户端连接MySQL服务器所使用的端口,默认通常是3306。
  • socket : 指定MySQL服务器的Unix socket文件路径,这通常用在本地连接,相对于使用网络端口的方式,使用socket可以更快地建立连接。
  • host : 指定MySQL服务器的主机名或IP地址。默认情况下,客户端尝试连接本地主机。

以下是一个简单的 [client] 节示例:

[client]
user=myuser
password=mypassword
port=3306
socket=/var/run/mysqld/mysqld.sock

在使用时,你需要将 myuser mypassword 替换成实际的用户名和密码。由于安全性原因,一般推荐不在配置文件中设置 password ,而是在使用客户端工具时交互式地输入密码。

6.2 [client]节的高级配置

6.2.1 客户端连接相关配置

在MySQL中,客户端连接相关的配置项可以用来优化连接过程和调整连接行为。例如, connect-timeout 参数可以用来设置连接服务器时的超时时间。

[client]
connect-timeout=10

这个配置项设置了MySQL客户端在放弃连接尝试之前应该等待的时间(以秒为单位)。此例中为10秒。在客户端或网络不稳定的情况下,适当的超时时间能够提高用户体验,避免长时间等待连接失败。

6.2.2 客户端性能优化配置

客户端性能优化可以通过调整一些特定的参数来实现,比如 default-character-set 参数可以指定客户端使用的默认字符集。

[client]
default-character-set=utf8mb4

在上面的例子中,我们将客户端默认字符集设置为 utf8mb4 ,这是MySQL中支持最全面的字符集,可以存储包括四字节的表情符号在内的所有Unicode字符。

此外,还可以通过 local-infile 参数控制是否启用 LOAD DATA LOCAL 语句:

[client]
local-infile=0

当设置为0时,会禁用 LOAD DATA LOCAL ,这可以防止执行不安全的本地文件读取操作,增强安全性。

表格展示

参数名 说明 推荐值
user 默认的MySQL用户 与服务器匹配的用户名
port 客户端连接MySQL服务器所使用的端口 3306(默认)
socket MySQL服务器的socket文件路径 对应服务器socket路径
connect-timeout 客户端连接服务器的超时时间 10秒
default-character-set 客户端默认字符集 utf8mb4
local-infile 是否启用LOAD DATA LOCAL语句 0(禁用)

以上表格展示了客户端相关配置参数的含义及推荐值,可以按照实际的使用情况来调整这些值。

Mermaid流程图展示

graph TD
    A([client配置节]) --> B(user用户)
    A --> C(port端口)
    A --> D(socket路径)
    A --> E(连接超时)
    A --> F(字符集设置)
    A --> G(LOAD DATA LOCAL设置)

Mermaid流程图展示了一个简化的视图,说明了客户端配置节中可能包含的参数以及它们之间的逻辑关系。每个参数都可以根据实际需求进行配置,以达到最佳的使用效果。

7. 其他配置项解析及性能优化与安全性配置

在深入探讨MySQL的配置优化与安全性设置之前,我们需要了解除了 [mysqld] [mysqldump] [client] 之外的其他重要配置项,这些配置项对数据库的整体性能和安全性同样有着不可或缺的作用。

7.1 其他重要配置项解析

7.1.1 配置项分类和功能

MySQL的配置文件 my.cnf 中的配置项繁多,可以大致分为以下几类:

  • 连接与安全性设置 :如 bind-address user 等,用于控制MySQL服务的连接方式和权限控制。
  • 性能调整参数 :如 innodb_buffer_pool_size query_cache_size 等,直接影响MySQL的运行效率。
  • 日志管理 :如 log_error slow_query_log 等,这些配置用于调试、监控和审计数据库的运行状态。
  • 存储引擎选项 :例如 default-storage-engine ,用于指定默认的存储引擎。

7.1.2 常见配置项实例解析

以下是一些常见的其他配置项实例及其功能说明:

[mysqld]
# 设置MySQL监听的端口,默认为3306
port = 3306

# 设置MySQL连接的最大数量
max_connections = 151

# 指定错误日志文件的存储位置
log_error = /var/log/mysql/error.log

[mysql]
# 设置默认的客户端字符集
default-character-set=utf8

[client]
# 设置连接数据库时使用的端口
port = 3306

7.2 性能优化与安全性配置

在实现性能优化和确保数据库安全性方面,我们可以从多个角度来配置和调整MySQL服务。

7.2.1 性能优化策略

为了提升MySQL的性能,可以采取以下策略:

  • 调整InnoDB缓冲池大小 :通过增加 innodb_buffer_pool_size 来缓存数据和索引,减少磁盘I/O操作。
  • 启用查询缓存 :通过配置 query_cache_size query_cache_type ,可以提高重复查询的响应速度。
  • 优化索引和查询 :合理使用索引能够显著提高查询效率,对于复杂查询应进行优化。

7.2.2 安全性配置建议

数据库的安全性是不容忽视的一环,以下是一些建议:

  • 加强密码安全 :设置强密码,并使用 validate_password 插件来进行密码策略的管理。
  • 限制访问权限 :通过精确的权限控制,确保只有授权用户可以访问数据库。
  • 启用防火墙和安全协议 :例如使用 mysql防火墙 TLS/SSL 加密连接,来保证数据传输的安全。

在对MySQL进行性能优化和安全性配置时,应根据实际的应用场景和服务器能力来调整配置值,避免盲目增加资源消耗和引入不必要的安全隐患。务必在修改配置之前备份原有的配置文件,以防止配置不当导致服务不可用。

flowchart LR
    A[开始配置优化] --> B[性能优化]
    B --> C[调整缓冲池大小]
    B --> D[启用查询缓存]
    B --> E[优化索引和查询]
    A --> F[安全性配置]
    F --> G[加强密码安全]
    F --> H[限制访问权限]
    F --> I[启用防火墙和安全协议]
    C --> J[检查服务性能]
    J --> K[配置效果评估]
    G --> L[定期审计]
    I --> M[验证连接安全]
    L --> K
    M --> K

通过以上步骤,我们可以确保MySQL数据库在保证高效运行的同时,也具备了足够的安全防护措施。在实际操作中,需要对每一个配置项进行详细的理解和测试,以便找到最佳的配置组合。

本文还有配套的精品资源,点击获取 menu-r.4af5f7ec.gif

简介:MySQL是广泛使用的开源数据库,其在Linux系统中的配置文件 my.cnf 是关键所在。该文件位于特定位置,并由多个配置节组成,包括 [mysqld] [mysqldump] [client] 等。配置项如 datadir socket user 等对于优化性能、安全和资源使用至关重要。本文深入解析了 my.cnf 的结构、主要配置项及其应用,为数据库管理员提供了性能调优和安全配置的详细指导。


本文还有配套的精品资源,点击获取
menu-r.4af5f7ec.gif

[client] port = 3306 socket=/home/mysql/data/mysql.sock [mysqld] lower_case_table_names=1 user = mysql #--- 表示MySQL的管理用户 port = 3306 #--- 端口 #basedir=/usr/local/mysql socket=/home/mysql/data/mysql.sock #-- 启动的sock文件 datadir=/home/mysql/data log-bin=/home/mysql/mysql-bin log-error=/home/mysql/log/mysqld.log pid-file =/home/mysql/mysqld.pid bind-address = 0.0.0.0 server-id = 1 #表示是本机的序号为1,一般来讲就是master的意思 skip-grant-tables skip-name-resolve # 禁止MySQL对外部连接进行DNS解析,使用这一选项可以消除MySQL进行DNS解析的时间。但需要注意,如果开启该选项, # 则所有远程主机连接授权都要使用IP地址方式,否则MySQL将无法正常处理连接请求 #skip-networking back_log = 600 # MySQL能有的连接数量。当主要MySQL线程在一个很短时间内得到非常多的连接请求,这就起作用, # 然后主线程花些时间(尽管很短)检查连接并且启动一个新线程。back_log值指出在MySQL暂时停止回答新请求之前的短时间内多少个请求可以被存在堆栈中。 # 如果期望在一个短时间内有很多连接,你需要增加它。也就是说,如果MySQL的连接数据达到max_connections时,新来的请求将会被存在堆栈中, # 以等待某一连接释放资源,该堆栈的数量即back_log,如果等待连接的数量超过back_log,将不被授予连接资源。 # 另外,这值(back_log)限于您的操作系统对到来的TCP/IP连接的侦听队列的大小。 # 你的操作系统在这个队列大小上有它自己的限制(可以检查你的OS文档找出这个变量的最大值),试图设定back_log高于你的操作系统的限制将是无效的。 max_connections = 500 # MySQL的最大连接数,如果服务器的并发连接请求量比较大,建议调高此值,以增加并行连接数量,当然这建立在机器能支撑的情况下,因为如果连接数越多,介于MySQL会为每个连接提供连接缓冲区,就会开销越多的内存,所以要适当调整该值,不能盲目提高设值。可以过'conn%'通配符查看当前状态的连接数量,以定夺该值的大小。 max_connect_errors = 6000 # 对于同一主机,如果有超出该参数值个数的中断错误连接,则该主机将被禁止连接。如需对该主机进行解禁,执行:FLUSH HOST。 open_files_limit = 65535 # MySQL打开的文件描述符限制,默认最小1024;当open_files_limit没有被配置的时候,比较max_connections*5和ulimit -n的值,哪个大用哪个, # 当open_file_limit被配置的时候,比较open_files_limit和max_connections*5的值,哪个大用哪个. table_open_cache = 128 # MySQL每打开一个表,都会读入一些数据到table_open_cache缓存中,当MySQL在这个缓存中找不到相应信息时,才会去磁盘上读取。默认值64 # 假定系统有200个并发连接,则需将此参数设置为200*N(N为每个连接所需的文件描述符数目); # 当把table_open_cache设置为很大时,如果系统处理不了那么多文件描述符,那么就会出现客户端失效,连接不上 max_allowed_packet = 1000000000 # 接受的数据包大小;增加该变量的值十分安全,这是因为仅当需要时才会分配额外内存。例如,仅当你发出长查询或MySQLd必须返回大的结果行时MySQLd才会分配更多内存。 # 该变量之所以取较小默认值是一种预防措施,以捕获客户端和服务器之间的错误信息包,并确保不会因偶然使用大的信息包而导致内存溢出。 binlog_cache_size = 1M # 一个事务,在没有提交的时候,产生的日志,记录到Cache中;等到事务提交需要提交的时候,则把日志持久化到磁盘。默认binlog_cache_size大小32K max_heap_table_size = 67108864 # 定义了用户可以创建的内存表(memory table)的大小。这个值用来计算内存表的最大行数值。这个变量支持动态改变 tmp_table_size = 67108864 # MySQL的heap(堆积)表缓冲大小。所有联合在一个DML指令内完成,并且大多数联合甚至可以不用临时表即可以完成。 # 大多数临时表是基于内存的(HEAP)表。具有大的记录长度的临时表 (所有列的长度的和)或包含BLOB列的表存储在硬盘上。 # 如果某个内部heap(堆积)表大小超过tmp_table_size,MySQL可以根据需要自动将内存中的heap表改为基于硬盘的MyISAM表。还可以通过设置tmp_table_size选项来增加临时表的大小。也就是说,如果调高该值,MySQL同时将增加heap表的大小,可达到提高联接查询速度的效果 read_buffer_size = 4194304 # MySQL读入缓冲区大小。对表进行顺序扫描的请求将分配一个读入缓冲区,MySQL会为它分配一段内存缓冲区。read_buffer_size变量控制这一缓冲区的大小。 # 如果对表的顺序扫描请求非常频繁,并且你认为频繁扫描进行得太慢,可以通过增加该变量值以及内存缓冲区大小提高其性能 read_rnd_buffer_size = 4194304 # MySQL的随机读缓冲区大小。当按任意顺序读取行时(例如,按照排序顺序),将分配一个随机读缓存区。进行排序查询时, # MySQL会首先扫描一遍该缓冲,以避免磁盘搜索,提高查询速度,如果需要排序大量数据,可适当调高该值。但MySQL会为每个客户连接发放该缓冲空间,所以应尽量适当设置该值,以避免内存开销过大 sort_buffer_size = 4194304 # MySQL执行排序使用的缓冲大小。如果想要增加ORDER BY的速度,首先看是否可以让MySQL使用索引而不是额外的排序阶段。 # 如果不能,可以尝试增加sort_buffer_size变量的大小 join_buffer_size = 8388608 # 联合查询操作所能使用的缓冲区大小,和sort_buffer_size一样,该参数对应的分配内存也是每连接独享 thread_cache_size = 8 # 这个值(默认8)表示可以重新利用保存在缓存中线程的数量,当断开连接时如果缓存中还有空间,那么客户端的线程将被放到缓存中, # 如果线程重新被请求,那么请求将从缓存中读取,如果缓存中是空的或者是新的请求,那么这个线程将被重新创建,如果有很多新的线程, # 增加这个值可以改善系统性能.通过比较Connections和Threads_created状态的变量,可以看到这个变量的作用。(–>表示要调整的值) # 根据物理内存设置规则如下: # 1G —> 8 # 2G —> 16 # 3G —> 32 # 大于3G —> 64 #query_cache_size = 8M #MySQL的查询缓冲大小(从4.0.1开始,MySQL提供了查询缓冲机制)使用查询缓冲,MySQL将SELECT语句和查询结果存放在缓冲区中, # 今后对于同样的SELECT语句(区分大小写),将直接从缓冲区中读取结果。根据MySQL用户手册,使用查询缓冲最多可以达到238%的效率。 # 通过检查状态值'Qcache_%',可以知道query_cache_size设置是否合理:如果Qcache_lowmem_prunes的值非常大,则表明经常出现缓冲不够的情况, # 如果Qcache_hits的值也非常大,则表明查询缓冲使用非常频繁,此时需要增加缓冲大小;如果Qcache_hits的值不大,则表明你的查询重复率很低, # 这种情况下使用查询缓冲反而会影响效率,那么可以考虑不用查询缓冲。此外,在SELECT语句中加入SQL_NO_CACHE可以明确表示不使用查询缓冲 #query_cache_limit = 2M #指定单个查询能够使用的缓冲区大小,默认1M key_buffer_size = 1048576 #指定用于索引的缓冲区大小,增加它可得到更好处理的索引(对所有读和多重写),到你能负担得起那样多。如果你使它太大, # 系统将开始换页并且真的变慢了。对于内存在4GB左右的服务器该参数可设置为384M或512M。通过检查状态值Key_read_requests和Key_reads, # 可以知道key_buffer_size设置是否合理。比例key_reads/key_read_requests应该尽可能的低, # 至少是1:100,1:1000更好(上述状态值可以使用SHOW STATUS LIKE 'key_read%'获得)。注意:该参数值设置的过大反而会是服务器整体效率降低 ft_min_word_len = 4 # 分词词汇最小长度,默认4 transaction_isolation = REPEATABLE-READ # MySQL支持4种事务隔离级别,他们分别是: # READ-UNCOMMITTED, READ-COMMITTED, REPEATABLE-READ, SERIALIZABLE. # 如没有指定,MySQL默认采用的是REPEATABLE-READ,ORACLE默认的是READ-COMMITTED log_bin = mysql-bin binlog_format = mixed expire_logs_days = 30 #超过30天的binlog删除 slow_query_log = 1 long_query_time = 1 #慢查询时间 超过1秒则为慢查询 slow_query_log_file = /home/mysql/data/mysql-slow.log performance_schema = 0 explicit_defaults_for_timestamp #lower_case_table_names = 1 #不区分大小写 skip-external-locking #MySQL选项以避免外部锁定。该选项默认开启 default-storage-engine = InnoDB #默认存储引擎 innodb_file_per_table = 1 # InnoDB为独立表空间模式,每个数据库的每个表都会生成一个数据空间 # 独立表空间优点: # 1.每个表都有自已独立的表空间。 # 2.每个表的数据和索引都会存在自已的表空间中。 # 3.可以实现单表在不同的数据库中移动。 # 4.空间可以回收(除drop table操作处,表空不能自已回收) # 缺点: # 单表增加过大,如超过100G # 结论: # 共享表空间在Insert操作上少有优势。其它都没独立表空间表现好。当启用独立表空间时,请合理调整:innodb_open_files innodb_open_files = 500 # 限制Innodb能打开的表的数据,如果库里的表特别多的情况,请增加这个。这个值默认是300 innodb_buffer_pool_size = 1048576 # InnoDB使用一个缓冲池来保存索引和原始数据, 不像MyISAM. # 这里你设置越大,你在存取表里面数据时所需要的磁盘I/O越少. # 在一个独立使用的数据库服务器上,你可以设置这个变量到服务器物理内存大小的80% # 不要设置过大,否则,由于物理内存的竞争可能导致操作系统的换页颠簸. # 注意在32位系统上你每个进程可能被限制在 2-3.5G 用户层面内存限制, # 所以不要设置的太高. innodb_write_io_threads = 4 innodb_read_io_threads = 4 # innodb使用后台线程处理数据页上的读写 I/O(输入输出)请求,根据你的 CPU 核数来更改,默认是4 # 注:这两个参数不支持动态改变,需要把该参数加入到my.cnf里,修改完后重启MySQL服务,允许值的范围从 1-64 innodb_thread_concurrency = 0 # 默认设置为 0,表示不限制并发数,这里推荐设置为0,更好去发挥CPU多核处理能力,提高并发量 innodb_purge_threads = 1 # InnoDB中的清除操作是一类定期回收无用数据的操作。在之前的几个版本中,清除操作是主线程的一部分,这意味着运行时它可能会堵塞其它的数据库操作。 # 从MySQL5.5.X版本开始,该操作运行于独立的线程中,并支持更多的并发数。用户可通过设置innodb_purge_threads配置参数来选择清除操作是否使用单 # 独线程,默认情况下参数设置为0(不使用单独线程),设置为 1 时表示使用单独的清除线程。建议为1 innodb_flush_log_at_trx_commit = 2 # 0:如果innodb_flush_log_at_trx_commit的值为0,log buffer每秒就会被刷写日志文件到磁盘,提交事务的时候不做任何操作(执行是由mysql的master thread线程来执行的。 # 主线程中每秒会将重做日志缓冲写入磁盘的重做日志文件(REDO LOG)中。不论事务是否已经提交)默认的日志文件是ib_logfile0,ib_logfile1 # 1:当设为默认值1的时候,每次提交事务的时候,都会将log buffer刷写到日志。 # 2:如果设为2,每次提交事务都会写日志,但并不会执行刷的操作。每秒定时会刷到日志文件。要注意的是,并不能保证100%每秒一定都会刷到磁盘,这要取决于进程的调度。 # 每次事务提交的时候将数据写入事务日志,而这里的写入仅是调用了文件系统的写入操作,而文件系统是有 缓存的,所以这个写入并不能保证数据已经写入到物理磁盘 # 默认值1是为了保证完整的ACID。当然,你可以将这个配置项设为1以外的值来换取更高的性能,但是在系统崩溃的时候,你将会丢失1秒的数据。 # 设为0的话,mysqld进程崩溃的时候,就会丢失最后1秒的事务。设为2,只有在操作系统崩溃或者断电的时候才会丢失最后1秒的数据。InnoDB在做恢复的时候会忽略这个值。 # 总结 # 设为1当然是最安全的,但性能页是最差的(相对其他两个参数而言,但不是不能接受)。如果对数据一致性和完整性要求不高,完全可以设为2,如果只最求性能,例如高并发写的日志服务器,设为0来获得更高性能 innodb-buffer-pool-size = 128M innodb_log_buffer_size = 4194304 # 此参数确定些日志文件所用的内存大小,以M为单位。缓冲区更大能提高性能,但意外的故障将会丢失数据。MySQL开发人员建议设置为1-8M之间 innodb_log_file_size = 268435456 # 此参数确定数据日志文件的大小,更大的设置可以提高性能,但也会增加恢复故障数据库所需的时间 innodb_log_files_in_group = 3 # 为提高性能,MySQL可以以循环方式将日志文件写到多个文件。推荐设置为3 innodb_max_dirty_pages_pct = 90 # innodb主线程刷新缓存池中的数据,使脏数据比例小于90% innodb_lock_wait_timeout = 120 # InnoDB事务在被回滚之前可以等待一个锁定的超时秒数。InnoDB在它自己的锁定表中自动检测事务死锁并且回滚事务。InnoDB用LOCK TABLES语句注意到锁定设置。默认值是50秒 bulk_insert_buffer_size = 1024M # 批量插入缓存大小, 这个参数是针对MyISAM存储引擎来说的。适用于在一次性插入100-1000+条记录时, 提高效率。默认值是8M。可以针对数据量的大小,翻倍增加。 myisam_sort_buffer_size = 1024M # MyISAM设置恢复表之时使用的缓冲区的尺寸,当在REPAIR TABLE或用CREATE INDEX创建索引或ALTER TABLE过程中排序 MyISAM索引分配的缓冲区 myisam_max_sort_file_size = 10G # 如果临时文件会变得超过索引,不要使用快速排序索引方法来创建一个索引。注释:这个参数以字节的形式给出 myisam_repair_threads = 1 # 如果该值大于1,在Repair by sorting过程中并行创建MyISAM表索引(每个索引在自己的线程内) interactive_timeout = 28800 # 服务器关闭交互式连接前等待活动的秒数。交互式客户端定义为在mysql_real_connect()中使用CLIENT_INTERACTIVE选项的客户端。默认值:28800秒(8小时) wait_timeout = 28800 # 服务器关闭非交互连接之前等待活动的秒数。在线程启动时,根据全局wait_timeout值或全局interactive_timeout值初始化会话wait_timeout值, # 取决于客户端类型(由mysql_real_connect()的连接选项CLIENT_INTERACTIVE定义)。参数默认值:28800秒(8小时) # MySQL服务器所支持的最大连接数是有上限的,因为每个连接的建立都会消耗内存,因此我们希望客户端在连接到MySQL Server处理完相应的操作后, # 应该断开连接并释放占用的内存。如果你的MySQL Server有大量的闲置连接,他们不仅会白白消耗内存,而且如果连接一直在累加而不断开, # 最终肯定会达到MySQL Server的连接上限数,这会报'too many connections'的错误。对于wait_timeout的值设定,应该根据系统的运行情况来判断。 # 在系统运行一段时间后,可以通过show processlist命令查看当前系统的连接状态,如果发现有大量的sleep状态的连接进程,则说明该参数设置的过大, # 可以进行适当的调整小些。要同时设置interactive_timeout和wait_timeout才会生效。 [mysqldump] quick max_allowed_packet = 16M #服务器发送和接受的最大包长度 [myisamchk] key_buffer_size = 8M sort_buffer_size = 8M read_buffer = 4M write_buffer = 4M
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值