共计 11763 个字符,预计需要花费 30 分钟才能阅读完成。
本篇内容介绍了“MySQL 中 my.cnf 文件的选项设置”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让丸趣 TV 小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
mysqld 服务器维护两种变量。全局变量影响服务器的全局操作。会话变量影响具体客户端连接相关操作。
可以在选项文件或命令行中设置全局变量。
用 Set 命令设置会话变量,当然它也可以设置全局变量。
就像 oracle 里面的初始化参数文件一样。下面是一些常用的选项说明,MySQL 的管方文档上也有。
[@more@]
如
mysql SET GLOBAL sort_buffer_size = 10 * 1024 * 1024;
mysql SET SESSION sort_buffer_size = 10 * 1024 * 1024;
如果你想用 SET 语句限制系统变量可设的最大值,可以在服务器启动时通过 –maximum-var_name 形式的选项来指定。
例如,要想防止 query_cache_size 的值运行时超过 32MB,使用选项 –maximum-query_cache_size=32M。
mysqld_safe 选项
–basedir=path
MySQL 安装目录的路径。
–core-file-size
mysqld 能够创建的内核文件的大小。选项值传递给 ulimit -c。
–datadir=path
数据目录的路径。
–defaults-file=path
读取的代替通用选项文件的选项文件名。如果给出,必须首选该选项。
–log-error=path
将错误日志写入给定的文件。
-nice=priority
使用 nice 程序根据给定值来设置服务器的调度优先级。
–open-files-limit=count
mysqld 能够打开的文件的数量。选项值传递给 ulimit -n。请注意你需要用 root 启动 mysqld_safe 来保证正确工作!
–pid-file=path
进程 ID 文件的路径。
–port=port_num
用来帧听 TCP/IP 连接的端口号。端口号必须为 1024 或更大值,除非 MySQL 以 root 系统用户运行。
每个 mysqld 的 Unix 套接字文件和 TCP/IP 端口号必须不同。
–ledir=path
包含 mysqld 程序的目录的路径。使用该选项来显式表示服务器位置。
–no-defaults
不要读任何选项文件。如果给出,必须首选该选项。
–skip-character-set-client-handshake
忽略客户端发送的字符集信息,使用服务器的默认字符集。
–socket=path
用于本地连接的 Unix 套接字文件。
每个 mysqld 的 Unix 套接字文件和 TCP/IP 端口号必须不同。
–timezone=zone
为给定的选项值设置 TZ 时区环境变量。
–user={user_name | user_id}
以用户名 user_name 或数字用户 ID user_id 运行 mysqld 服务器。
该 用户 指系统登录账户,而不是 授权表中的 MySQL 用户。
mysqld 命令行选项
mysqld 从[mysqld] 和[server]组读取选项
–ansi
使用标准(ANSI)SQL 语法代替 MySQL 语法。
–basedir=path, -b path
MySQL 安装目录的路径。通常所有路径根据该路径来解析。
–bootstrap
mysql_install_db 脚本使用该选项来创建 MySQL 授权表,不需要启动 MySQL 服务器
–console
将错误日志消息写入 stderr 和 stdout,即使指定了 –log-error。
–character_sets_dir=path
字符集安装的目录。
–chroot=path
通过 chroot()系统调用在启动过程中将 mysqld 服务器放入一个封闭环境中。这是推荐的一个安全措施。请注意使用该选项可以 限制 LOAD DATA INFILE 和 SELECT … INTO OUTFILE。
–character_set_server=charset
使用 charset 作为 默认服务器字符集。
–core_file
如果 mysqld 终止,写内核文件。
–datadir=path, -h path
数据目录的路径。
–default_table_type=type
设置表的默认类型。
–debug[=debug_options], -# [debug_options]
如果 MySQL 配置了 –with-debug,你可以使用该选项来获得一个跟踪文件,跟踪 mysqld 正进行的操作。debug_options 字符串通常为 d:t:o,file_name。
–default_time_zone=type
设置默认服务器时区。该选项设置全局 time_zone 系统变量。默认时区与系统时区相同(用 system_time_zone 系统变量值给定)
–delay_key_write[= OFF | ON | ALL]
如何使用 DELAYED KEYS 选项。键写入延迟会造成再次写 MyISAM 表时键缓冲区不能被清空。该选项只适用 MyISAM 表。
OFF DELAY_KEY_WRITE 被忽略。
ON MySQL 在 CREATE TABLE 中用 DELAY_KEY_WRITE 选项。这是 默认值。
ALL 用启用 DELAY_KEY_WRITE 选项创建表的相同方法对所有新打开表的进行处理。
如果启用了 DELAY_KEY_WRITE,说明使用该项的表的键缓冲区在每次更新索引时不被清空,只有关闭表时才清空。
但如果你使用该特性,你应用 –myisam_recover 选项启动服务器,为所有 MyISAM 表添加自动检查。
–external_locking
用系统锁定。请注意如果你在 lockd 不能完全工作的系统上使用该选项(例如在 Linux 中),mysqld 容易死锁。
如果你在许多 MySQL 进程中使用该选项来更新 MyISAM 表,你必须确保满足下述条件:
使用正被另一个进程更新的表的查询的缓存不可使用。
不应在共享表中使用 –delay-key-write=ALL 或 DELAY_KEY_WRITE=1。
最简单的方法是结合使用 –external-locking 和 –delay-key-write=OFF –query-cache-size=0。
(默认不能实现,因为在许多设置中,结合使用上述选项很有用)。
–flush
执行 SQL 语句后向硬盘上清空更改。一般情况执行 SQL 语句后 MySQL 向硬盘写入所有更改,让操作系统处理与硬盘的同步。
–init_file=file
启动时从该文件读 SQL 语句。每个语句必须在同一行中并且不应包括注释。
–language=lang_name, -L lang_name
用给定语言给出客户端错误消息。默认情况下,mysqld 用英语给出错误消息。
–large_pages
一些硬件 / 操作系统架构支持大于 默认值 (通常 4 KB) 的内存页。实际支持取决于使用的硬件和 OS。
大量访问内存的应用程序通过 使用较大的页,降低了 Translation Lookaside Buffer (TLB)损失,可以改善性能。
默认情况下该选项被禁用。
—log[=file], -l [file]
如果你想要知道 mysqld 内部发生了什么,你应该用 –log[=file_name]或 -l [file_name]选项启动它。如果没有给定 file_name 的值,默认名是 host_name.log。所有连接和语句被记录到日志文件。当你怀疑在客户端发生了错误并想确切地知道该客户端发送给 mysqld 的语句时,该日志可能非常有用。
mysqld 按照它接收的顺序记录语句到查询日志。这可能与执行的顺序不同。
–log_bin=[file]
二进制日志文件。将更改数据的所有查询记入该文件。用于备份和复制。
建议指定一个文件名, 否则 MySQL 使用 host_name-bin 作为日志文件基本名。
运行服务器时若启用二进制日志则性能大约慢 1%。
–binlog_do_db=db_name
告诉主服务器,如果当前的数据库 (即 USE 选定的数据库) 是 db_name,应将更新记录到二进制日志中。
–binlog_ignore_db=db_name
告诉主服务器,如果当前的数据库 (即 USE 选定的数据库) 是 db_name,不应将更新保存到二进制日志中。
–log_error[=file]
该文件的日志错误和启动消息.
如果你不指定文件名,MySQL 使用 host_name.err 作为文件名。如果文件名没有扩展名,则加上.err 扩展名。
–log_isam[=file]
将所有 MyISAM 更改记入该文件
–log_slow_queries[=file]
将所有执行时间超过 long_query_time 秒的查询记入该文件。
–log_warnings, -W
将警告例如 Aborted connection… 打印到错误日志。建议启用该选项,默认也是启用的。
–memlock
将 mysqld 进程锁定在内存中。请注意使用该选项时需要以 root 运行服务器,但从安全考虑并不是一个好注意。
–myisam_recover [=option[,option…]]]
存储引擎 MyISAM 设置为恢复模式。该选项值是 DEFAULT、BACKUP、FORCE 或 QUICK 值的任何组合。
如果你指定多个值,用逗号间隔开。
使用如果该选项,当 mysqld 打开 MyISAM 表时,检查是否表标记为崩溃或没有正确关闭。
如果是这种情况,mysqld 则检查 表。如果表被破坏,mysqld 试图维护它。
DEFAULT 与没有使用 –myisam-recover 选项相同。
BACKUP 如果在恢复过程中,数据文件被更改了,将 tbl_name.MYD 文件备份为 tbl_name-datetime.BAK。
FORCE 即使.MYD 文件将丢掉多个行也进行恢复。
QUICK 如果没有删除块,不要检查表中的行。
–open_files_limit=count
用来更改 mysqld 文件描述符的数量。
–pid_file=path
mysqld_safe 使用的进程 ID 文件的路径。
–port=port_num, -P port_num
帧听 TCP/IP 连接时使用的端口号。
–safe_mode
跳过一些优化阶段。
–skip_bdb
禁用 BDB 存储引擎。这样可以节省内存,并可能加速某些操作。如果你需要 BDB 表则不要使用该选项。
–skip_concurrent_insert
关闭在同一时间在 MyISAM 表中选择和插入的能力。(只有你发现缺陷时才使用该选项)。
–skip_grant_tables
该选项使服务器不使用权限系统。该权限允许访问服务器的用户不受限制地访问所有数据库
–skip_external_locking
不要使用系统锁定。
–skip_host_cache
为了更快地在名称 -IP 之间进行解析,不要使用内部主机名缓存。相反,每次客户端连接时查询 DNS 服务器。
–skip_innodb
禁用 InnoDB 存储引擎。这样可以节省内存,并可能加速某些操作。
–skip_networking
不帧听 TCP/IP 连接。必须通过命名管道或共享内存 (在 Windows 中) 或 Unix 套接字文件 (在 Unix 中) 完成 mysqld 的相互操作。
对于只允许本地客户端的系统,大力推荐该选项。
–socket=path
在 Unix 中,该选项指定用于本地连接的 Unix 套接字文件。
–skip_safemalloc
如果 MySQL 配置了 –with-debug=full,所有 MySQL 程序在内存分配和释放时检查内存是否溢出。
检查很慢,因此如果你不需要你可以用 –skip-safemalloc 选项来避免。
–transaction_isolation=level
设置默认事务隔离级别,可以 READ-UNCOMMITTED、READ-COMMITTEE、REPEATABLE-READ 或 SERIALIZABLE。
默认为 REPEATABLE-READ。
–tmpdir=path, -t path
创建临时文件的目录路径。
–temp_pool
该选项使服务器创建的大多数临时文件使用一系列文件名,而不是每个新文件使用唯一的文件名。
–bdb_cache_size
为 BDB 表缓存索引和行分配的缓冲区的大小。如果你不使用 BDB 表,你应用 –skip-bdb 启动 mysqld 以便不浪费该缓存。
–bdb_home
BDB 表基准目录。应与 datadir 变量的值相同。
–bdb_log_buffer_size
为 BDB 表缓存索引和行分配的缓冲区的大小。
— bdb_logdir
BDB 存储引擎写它日志文件的目录。
–bdb_max_lock
在 BDB 表下可以激活的最大锁数(默认为 10,000)。
— binlog_cache_size
在事务过程中容纳二进制日志 SQL 语句的缓存大小。
二进制日志缓存是服务器支持事务存储引擎并且服务器启用了二进制日志 (–log-bin 选项) 的前提下为每个客户端分配的内存。
–bulk_insert_buffer_size
MyISAM 使用专用树状缓存来使 INSERT … SELECT、INSERT … VALUES (…)、(…)、… 和 LOAD DATA INFILE 的大块插
入更快。注释:只有向非空表添加数据时才使用该缓存。默认值是 8MB。
–character_set_client
来自客户端的语句的字符集。
–character_set_database
默认数据库使用的字符集。当默认数据库更改时,服务器则设置该变量。
如果没有默认数据库,变量的同 character_set_server。
–character_set_results
用于向客户端返回查询结果的字符集。
–character_sets_dir
字符集安装目录。
–completion_type
事务结束类型:
如果该值为 0(默认),COMMIT 和 ROLLBACK 不受影响。
如果该值为 1,COMMIT 和 ROLLBACK 分别等同于 COMMIT AND CHAIN 和 ROLLBACK AND CHAIN。
(新事务用刚刚结束的事务相同的间隔等级立即启动)。
如果该值为 2,COMMIT 和 ROLLBACK 分别等同于 COMMIT RELEASE 和 ROLLBACK RELEASE。(事务终止后,服务器断开)。
–concurrent_insert
如果为 ON(默认值),MySQL 允许 INSERT 和 SELECT 语句在中间没有空数据块的 MyISAM 表中并行运行。
0 关
1 (默认) 在没有空数据块的 MyISAM 表中启用并行插入
2 为所有 MyISAM 表启用并行插入。如果表有空记录或正被另一线程使用,新行将插入到表的最后。
如果表未使用,MySQL 将进行普通读锁定并将新行插入空记录。
— delayed_insert_limit
插入 delayed_insert_limit 延迟行后,INSERT DELAYED 处理器线程检查是否有挂起的 SELECT 语句。如果有,在继续插入延迟的行之前,允许它们先执行。
— delayed_insert_timeout
INSERT DELAYED 处理器线程终止前应等待 INSERT 语句的时间。
–delayed_queue_size
这是各个表中处理 INSERT DELAYED 语句时队列中行的数量限制。如果队列满了,执行 INSERT DELAYED 语句的客户端应等待直到队列内再有空间。
–div_precision_increment
该变量说明用 / 操作符执行除操作的结果可增加的精确度的位数。默认值是 4。最小和最大值分别为 0 和 30。
— expire_logs_days
二进制日志自动删除的天数。默认值为 0, 表示“没有自动删除”。启动时和二进制日志循环时可能删除。
–flush_time
如果设为非零值,每隔 flush_time 秒则关闭所有表以释放硬盘资源并同步未清空的数据。
我们建议只在 Windows 9x 或 Me,或有最小资源的系统中使用该选项。
–init_connect
服务器为每个连接的客户端执行的字符串。字符串由一个或多个 SQL 语句组成。要想指定多个语句,用分号间隔开。
例如:[mysqld]
init_connect= SET AUTOCOMMIT=0
— join_buffer_size
用于完全联接的缓冲区的大小(当不使用索引的时候使用联接操作)。
–key_buffer_size
MyISAM 表的索引块分配了缓冲区,由所有线程共享。key_buffer_size 是索引块缓冲区的大小。键值缓冲区即为键值缓存。
key_buffer_size 的最大允许设定值为 4GB。通常为主要运行 MySQL 的机器内存的 25%。
以通过执行 SHOW STATUS 语句并检查 Key_read_requests、Key_reads、Key_write_requests 和 Key_writes 状态变量来检查键值缓冲区的性能。
Key_reads/Key_read_requests 比例一般应小于 0.01。如果你使用更新和删除,Key_writes/Key_write_requests 比例通常接近 1,但如果你更新时会同时影响到多行或如果你正使用 DELAY_KEY_WRITE 表选项,可能小得多。
1 – ((Key_blocks_unused * key_cache_block_size) / key_buffer_size)
该值为约数,因为键值缓冲区的部分空间被分配用作内部管理结构。
— key_cache_block_size
键值缓存内块的字节大小。默认值是 1024。
— locked_in_memory
是否用 -memlock 将 mysqld 锁在内存中。
— lower_case_file_system
该变量说明是否数据目录所在的文件系统对文件名的大小写敏感。ON 说明对文件名的大小写不敏感,OFF 表示敏感。
— lower_case_table_names
如果设置为 1, 表名用小写保存到硬盘上,并且表名比较时不对大小写敏感。
如果设置为 2,按照指定的保存表名,但按照小写来比较。
数据库中的每个表至少对应数据库目录中的一个文件(也可能是多个,取决于存储引擎)。
因此,所使用操作系统的大小写敏感性决定了数据库名和表名的大小写敏感性。
这说明在大多数 Unix 中数据库名和表名对大小写敏感,而在 Windows 中对大小写不敏感。
— max_binlog_cache_size
如果多语句事务需要更大的内存,你会得到错误 Multi-statement transaction required more than max_binlog_cache_size bytes of storage。
— max_binlog_size
如果二进制日志写入的内容超出给定值,日志就会发生滚动。你不能将该变量设置为大于 1GB 或小于 4096 字节。默认值是 1GB。
如果你正使用事务:事务以一个块写入二进制日志,因此不不能被几个二进制日志拆分。
因此,如果你有大的事务,二进制日志可能会大于 max_binlog_size。
— max_connect_errors
如果中断的与主机的连接超过该数目,该主机则阻塞后面的连接。你可以用 FLUSH HOSTS 语句解锁锁定的主机。
— max_connections
允许的并行客户端连接数目。
— max_delayed_threads
不要启动大于该数目的线程来处理 INSERT DELAYED 语句。如果所有 INSERT DELAYED 线程已经在使用,
你想在新表中插入数据,行 插入时好像未指定 DELAYED 属性。如果你将该值设置为 0,MySQL 不会创建线程来处理 DELAYED 行;
其结果是完全禁用了 DELAYED。
— max_error_count
保存由 SHOW ERRORS 或 SHOW WARNINGS 显示的错误、警告和注解的最大数目。
–max_heap_table_size
该变量设置 MEMORY (HEAP)表可以增长到的最大空间大小。该变量用来计算 MEMORY 表的 MAX_ROWS 值。
在已有的 MEMORY 表上设置该变量没有效果,除非用 CREATE TABLE 或 TRUNCATE TABLE 等语句重新创建表。
— max_join_size
不允许可能需要检查多于 max_join_size 行 (为单个表语句) 或行组合 (为多个表语句) 或可能执行大于 max_join_size 次硬盘查询的 SELECT 语句。通过设置该值,你可以捕获键使用不正确并可能花很长时间的 SELECT 语句。
将该变量设置为 DEFAULT 之外的值,将 SQL_BIG_SELECTS 的值重设为 0。
— max_length_for_sort_data
确定使用的 filesort 算法的索引值大小的限值。
— max_relay_log_size
如果复制从服务器写入中继日志时超出给定值,则滚动中继日志。通过该变量你可以对中继日志和二进制日志设置不同的限制。但是,将该变量设置为 0,MySQL 可以对二进制日志和中继日志使用 max_binlog_size。max_relay_log_size 必须设置在 4096 字节和 1GB(包括)之间,或为 0。默认值是 0。
— max_seeks_for_key
限制根据键值寻找行时的最大搜索数。MySQL 优化器假定当用扫描键在表内搜索匹配的行时,不需要超过该数量的键值搜索,而不管键的实际基数是什么。将该值设置为较低的值(100?),你可以强制 MySQL 选择键值而不选择表扫描。
—Max_sort_length
当排序 BLOB 或 TEXT 值时使用的字节数。只使用每个值的前 max_sort_length 字节;其它的被忽略。
–max_tmp_tables
客户端可以同时打开的临时表的最大数。
— max_user_connections
任何给定的 MySQL 账户允许的最大同时连接数。0 值表示“没有限制”。
— max_write_lock_count
超过写锁定限制后,允许部分读锁定。
— max_allowed_packet
包或任何生成的 / 中间字符串的最大大小。
包消息缓冲区初始化为 net_buffer_length 字节,但需要时可以增长到 max_allowed_packet 字节。
该值默认很小,以捕获大的 (可能是错误的) 数据包。
如果你使用大的 BLOB 列或长字符串,你必须增加该值。应同你想要使用的最大的 BLOB 一样大。
max_allowed_packet 的协议限制为 1GB。
—myisam_data_pointer_size
默认指针大小,单位是字节,当未指定 MAX_ROWS 选项时,CREATE TABLE 使用该变量创建 MyISAM 表。
该变量不能小于 2 或大于 7。默认值是 6。
— myisam_sort_buffer_size
当在 REPAIR TABLE 或用 CREATE INDEX 创建索引或 ALTER TABLE 过程中排序 MyISAM 索引分配的缓冲区。
— myisam_max_sort_file_size
重建 MyISAM 索引 (在 REPAIR TABLE、ALTER TABLE 或 LOAD DATA INFILE 过程中) 时,允许 MySQL 使用的临时文件的最大空间大小。
如果文件的大小超过该值,则使用键值缓存创建索引,要慢得多。该值的单位为字节。
—myisam_stats_method
当为 MyISAM 表搜集关于索引值分发的统计信息时服务器如何处理 NULL 值。
该变量有两个可能的值,nulls_equal 和 nulls_unequal。
nulls_equal 表示所有的 null 值是相同的,nulls_unequal 表示把每个 null 值都当成一个不同的值。
— net_buffer_length
在查询之间将通信缓冲区重设为该值。一般情况不应改变,但如果内存很小,
可以将它设置为期望的客户端发送的 SQL 语句的长度。如果语句超出该长度,缓冲区自动扩大,直到 max_allowed_packet 字节。
— query_cache_limit
不要缓存大于该值的结果。默认值是 1048576(1MB)。
—query_cache_min_res_unit
查询缓存分配的最小块的大小(字节)。默认值是 4096(4KB)。
— query_cache_size
为缓存查询结果分配的内存的数量。默认值是 0,即禁用查询缓存。
— query_cache_type
设置查询缓存类型。该变量默认设为 ON。
0 或 OFF 不要缓存或查询结果。请注意这样不会取消分配的查询缓存区。要想取消,你应将 query_cache_size 设置为 0。
1 或 ON 缓存除了以 SELECT SQL_NO_CACHE 开头的所有查询结果。
2 或 DEMAND 只缓存以 SELECT SQL_NO_CACHE 开头的查询结果。
— query_cache_wlock_invalidate
一般情况,当客户端对 MyISAM 表进行 WRITE 锁定时,如果查询结果位于查询缓存中,则其它客户端未被锁定,
可以对该表进行查询。将该变量设置为 1,则可以对表进行 WRITE 锁定,使查询缓存内所有对该表进行的查询变得非法。
这样当锁定生效时,可以强制其它试图访问表的客户端来等待。
— query_prealloc_size
用于查询分析和执行的固定缓冲区的大小。在查询之间该缓冲区不释放。如果你执行复杂查询,
分配更大的 query_prealloc_size 值可以帮助提高性能,因为它可以降低查询过程中服务器分配内存的需求。
— read_buffer_size
每个线程连续扫描时为扫描的每个表分配的缓冲区的大小(字节)。如果进行多次连续扫描,可能需要增加该值,
默认值为 131072。
— read_only
当变量对复制从服务器设置为 ON 时,从服务器不允许更新,除非通过从服务器的线程或用户拥有 SUPER 权限。
— relay_log_purge
当不再需要中继日志时禁用或启用自动清空中继日志。默认值是 1(启用)。
–read_rnd_buffer_size
当排序后按排序后的顺序读取行时,则通过该缓冲区读取行,避免搜索硬盘。将该变量设置为较大的值可以大大改进 ORDER BY 的性能。但是,这是为每个客户端分配的缓冲区,因此你不应将全局变量设置为较大的值。相反,只为需要运行大查询的客户端更改会话变量。
— skip_networking
如果服务器只允许本地 (非 TCP/IP) 连接,该值为 ON。在 Unix 中,本地连接使用 Unix 套接字文件。
在 Windows 中,本地连接使用命名管道或共享内存
—sort_buffer_size
每个排序线程分配的缓冲区的大小。增加该值可以加快 ORDER BY 或 GROUP BY 操作。
—sync_binlog
如果为正,当每个 sync_binlog th 写入该二进制日志后,MySQL 服务器将它的二进制日志同步到硬盘上(fdatasync())。
请注意如果在 autocommit 模式,每执行一个语句向二进制日志写入一次,否则每个事务写入一次。
—sync_frm
如果该变量设为 1, 当创建非临时表时它的.frm 文件被同步到硬盘上(fdatasync());这样较慢但出现崩溃时较安全。
默认值为 1。
— table_cache
所有线程打开的表的数目。增大该值可以增加 mysqld 需要的文件描述符的数量。
你可以检查 Opened_tables 状态变量来检查你是否需要增加表缓存。
—thread_cache_size
服务器应缓存多少线程以便重新使用。当客户端断开连接时,如果线程少于 thread_cache_size,则客户端的线程被放入缓存。当请求线程时如果允许可以从缓存中重新利用线程,并且只有当缓存空了时才会创建新线程。如果新连接很多,可以增加该变量以提高性能。(一般情况,如果线程执行得很好,性能提高不明显)。检查 Connections 和 Threads_created 状态变量的差, 可以看见线程缓存的效率。
“MySQL 中 my.cnf 文件的选项设置”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注丸趣 TV 网站,丸趣 TV 小编将为大家输出更多高质量的实用文章!