MariaDB/MySQL~4G数据库配置

本文介绍如何优化MariaDB/MySQL配置文件my.cnf,包括参数调整建议,以提升数据库性能。适用于生产环境,针对不同硬件环境和数据量进行个性化配置。

MariaDB/MySQL配置文件my.cnf解读
MariaDB/MySQL的默认设置性能非常差,仅仅起一个功能测试的作用,不能用在生产环境中,因此要对一些参数进行调整优化。当然,对配置文件各参数的调整需要根据实际环境,不同时期不同数量级的数据进行性能优化。
MySQL/MariaDB 配置文件位于 /etc/my.cnf。 每次更改此文件后需要重启 MySQL 服务,以使更改生效。本文的参数配置基于MariaDB 10.2,硬件内存4G。文中一些选项值的设置只是推荐值,不要盲目的接受这些建议。每个 MySQL 设置都是不同的,在进行任何更改之前需要慎重考虑。

[client]客户端服务端基本配置
port = 3306#客户端默认连接端口
socket = /tmp/mysql.sock#用于本地连接的socket套接字

[mysqld]# 服务端基本配置
port = 3306# mysql监听端口
socket = /tmp/mysql.sock#为MySQL客户端程序和服务器之间的本地通讯指定一个套接字文件
user = mariadb# mysql启动用户
basedir = /usr/local/mariadb# 安装目录
datadir = /data/mysql# 数据库数据文件存放目录
log_error = /data/mysql/mariadb.err#记录错误日志文件
pid-file = /data/mysql/mariadb.pid#pid所在的目录
skip-external-locking#不使用系统锁定,要使用myisamchk,必须关闭服务器
key_buffer_size = 64M#缓存MyISAM存储引擎的索引参数。MySQL5.5默认为InnoDB存储引擎,所以这个参数可以设置小点,64MB即可
max_allowed_packet = 1M#允许最大接收数据包的大小,防止服务器发送过大的数据包。可以设置为16MB或者更大,但设置的太大也可能有危险。
table_open_cache = 256#MySQL每打开一个表,都会读入一些数据到table_open_cache缓存中,当MySQL在这个缓存中找不到相应信息时,才会去磁盘上读取。默认值64,假定系统有200个并发连接,则需将此参数设置为200*N(N为每个连接所需的文件描述符数目);当把table_open_cache设置为很大时,如果系统处理不了那么多文件描述符,那么就会出现客户端失效,连接不上。
sort_buffer_size = 1M#在表进行order by和group by排序操作时,由于排序的字段没有索引,会出现Using filesort,为了提高性能,可用此参数增加每个线程分配的缓冲区大小。默认为256KB,这个参数不要设置过大。另外,一般出现Using filesort的时候,要通过增加索引来解决。
net_buffer_length = 8K#包消息缓冲区初始化为net_buffer_length字节,但需要时可以增长到max_allowed_packet字节。
read_buffer_size = 1M#该参数用于表的顺序扫描,表示每个线程分配的缓冲区大小。比如在进行全表扫描时,MySQL会按照数据的存储顺序依次读取数据块,每次读取的数据块首先会暂存在read_buffer_size中,当buffer空间被写满或者全部数据读取结束后,再将buffer中的数据返回给上层调用者,以提高效率。默认为128K,这个参数不要设置过大。
read_rnd_buffer_size = 512K#该参数用于表的随机读取,表示每个线程分配的缓冲区大小。比如,按照一个非索引字段做order by排序操作时,就会利用这个缓冲区来暂存读取的数据。默认为256KB,这个参数不要设置过大,一般在128~512KB。
myisam_sort_buffer_size = 16M#当对MyISAM表执行repair table或创建索引时,用以缓存排序索引;设置太小时可能会遇到” myisam_sort_buffer_size is too small”
thread_cache_size = 32#线程池,线程缓存。用来缓存空闲的线程,以至于不被销毁,如果线程缓存在的空闲线程,需要重新建立新连接,则会优先调用线程池中的缓存,很快就能响应连接请求。每建立一个连接,都需要一个线程与之匹配。
query_cache_size = 32M#缓存select语句和结果集大小的参数。查询缓存会存储一个select查询的文本与被传送到客户端的相应结果。如果之后接收到一个相同的查询,服务器会从查询缓存中检索结果,而不是再次分析和执行这个同样的查询。如果你的环境中写操作很少,读操作频繁,那么打开query_cache_type=1,会对性能有明显提升。如果写操作频繁,则应该关闭它(query_cache_type=0)。
tmp_table_size = 64M#临时HEAP数据表的最大长度(默认设置是32M); 超过这个长度的临时数据表将被转换为MyISAM数据表并存入一个临时文件。
explicit_defaults_for_timestamp = true#是否显示默认时间戳
#skip-networking
max_connections = 500#该参数用来设置最大连接数,告诉你当前你的服务器允许多少并发连接。默认为100,一般设置为512-1000即可。请记住,太多的连接会导致内存的使用量过高并且会锁住你的 MySQL 服务器。一般小网站需要 100-200 的连接数,而较大可能需要 500-800 甚至更多。这里的值很大程度上取决于你 MySQL/MariaDB 的使用情况。
max_connect_errors = 100#如果有时网络抽风,或者应用配置错误,或者其他原因导致客户端短时间内不断的尝试连接,客户端可能会被列入黑名单,然后将无法连接,直到再次刷新主机缓存。这个选项默认值太小了,可以考虑设的足够大(如果你的服务器配置够强大的话)。
open_files_limit = 65535#mysql打开最大文件数

log-bin=mysql-bin#这些路径相对于datadir
binlog_format=mixed#日志格式
server-id = 1#给服务器分配一个独一无二的ID编号; n的取值范围是1~2的32次方启用二进制日志功能。在复制数据同步的时候会用到
expire_logs_days = 10#启用二进制日志后,保留日志的天数。服务器会自动清理指定天数前的日志文件,如果不设置则会导致服务器空间耗尽。一般设置为7~14天。

default_storage_engine = InnoDB#新数据表的默认存储引擎(默认设置是MyISAM)。这项设置还可以通过–default-table-type选项来设置。
innodb_file_per_table = 1#InnoDB 提供了更灵活的方式,它把每个数据库的信息保存在一个 .ibd 数据文件中。每个 .idb 文件代表它自己的表空间。通过这样的方式可以更快地完成类似 “TRUNCATE” 的数据库操作,当删除或截断一个数据库表时,你也可以回收未使用的空间。这样配置的另一个好处是你可以将某些数据库表放在一个单独的存储设备。这可以大大提升你磁盘的 I/O 负载。
innodb_data_home_dir = /data/mysql#InnoDB主目录,所有与InnoDB数据表有关的目录或文件路径都相对于这个路径。在默认的情况下,这个主目录就是MySQL的数据目录。
innodb_data_file_path = ibdata1:10M:autoextend#用来容纳InnoDB为数据表的表空间: 可能涉及一个以上的文件; 每一个表空间文件的最大长度都必须以字节(B)、兆字节(MB)或千兆字节(GB)为单位给出; 表空间文件的名字必须以分号隔开; 最后一个表空间文件还可以带一个autoextend属性和一个最大长度(max:n)。
innodb_log_group_home_dir = /data/mysql#用来存放InnoDB日志文件的目录路径(如ib_logfile0、ib_logfile1等)。在默认的情况下,InnoDB驱动程序将使用 MySQL数据目录作为自己保存日志文件的位置。
innodb_buffer_pool_size = 256M#这个参数是InnoDB存储引擎的核心参数,默认为128KB,这个参数要设置为物理内存的60%~70%。
innodb_log_file_size = 64M#事务日志文件写操作缓存区的最大长度(默认设置是1MB)。
innodb_log_buffer_size = 8M#事务日志所使用的缓存区。InnoDB在写事务日志的时候,为了提高性能,先将信息写入Innodb Log Buffer中,当满足innodb_flush_log_trx_commit参数所设置的相应条件(或者日志缓冲区写满)时,再将日志写到文件(或者同步到磁盘)中。可以通过innodb_log_buffer_size参数设置其可以使用的最大内存空间。默认是8MB,一般为16~64MB即可。
innodb_flush_log_at_trx_commit = 1#这个选项决定着什么时候把日志信息写入日志文件以及什么时候把这些文件物理地写(术语称为”同步”)到硬盘上。设置值0的意思是每隔一秒写一次日 志并进行 同步,这可以减少硬盘写操作次数,但可能造成数据丢失; 设置值1(设置设置)的意思是在每执行完一条COMMIT命令就写一次日志并进行同步,这可以防止数据丢失,但硬盘写操作可能会很频繁; 设置值2是一般折衷的办法,即每执行完一条COMMIT命令写一次日志,每隔一秒进行一次同步。
innodb_lock_wait_timeout = 50#如果某个事务在等待n秒(s)后还没有获得所需要的资源,就使用ROLLBACK命令放弃这个事务。这项设置对于发现和处理未能被InnoDB数据表驱动 程序识别出来的死锁条件有着重要的意义。这个选项的默认设置是50s。

[mysqldump]
quick
max_allowed_packet = 16M

[mysql]
no-auto-rehash

[myisamchk]
key_buffer_size = 64M
sort_buffer_size = 1M
read_buffer = 2M
write_buffer = 2M

[mysqlhotcopy]
interactive-timeout
<think>首先,用户的问题是关于MariaDB的my.cnf配置文件的详细说明和常用参数设置。我需要根据系统级指令来构建我的回答。 关键系统指令: - 所有行内数学表达式必须使用$...$格式。 - 独立公式必须使用$$...$$格式并单独成段。 - LaTeX语法正确。 - 使用中文回答。 - 生成相关问题。 - 回答中引用的段落末尾自然地添加引用标识,例如[^1]。 - 回答结构清晰,帮助用户逐步解决问题,尽量保证回答真实可靠。 - 参考提供的引用:[^1]和[^2],这些是关于MySQL/MariaDB配置文件的引用。 用户的问题: "请问MariaDB my.cnf 配置文件详解及常用参数设置" 从引用中: - [^1]:提到配置文件位于/etc/my.cnf,更改后需要重启服务。参数配置基于MariaDB 10.2,硬件内存4G。提醒不要盲目接受推荐值。 - [^2]:提到最大连接数参数,默认为100,建议512-1000,取决于使用情况。 我的回答需要基于这些引用,但也要提供更全面的信息。既然用户要求详解和常用参数设置,我应该覆盖关键参数。 结构回答: 1. **介绍配置文件**:解释my.cnf文件是什么,位置,重要性。 2. **常用参数详解**:列出并解释常用参数,如内存相关、连接相关、日志相关等。 3. **设置建议**:提供一般性建议,但强调根据实际情况调整。 4. **配置步骤**:如何修改和生效配置。 5. **生成相关问题**:在最后添加相关问题部分。 确保使用中文。 在行内数学表达式中使用$...$格式。虽然配置文件中可能没有数学表达式,但如果有计算或公式,我需要应用。例如,如果提到内存计算,如InnoDB缓冲池大小,可以用数学格式。但配置文件参数通常是数值设置,所以可能不需要太多数学。如果有,我会用。 例如,如果解释缓冲池大小,可以说设置为系统内存的70-80%,如$0.7 \times \text{total\_memory}$。 现在,回忆MariaDB/MySQL常用参数: - **连接相关**:max_connections, wait_timeout, interactive_timeout - **内存相关**:innodb_buffer_pool_size, key_buffer_size - **日志相关**:log_error, slow_query_log, general_log - **性能相关**:query_cache_size (注意:在MariaDB 10.1+中,查询缓存被移除) - **其他**:character_set_server, collation_server, max_allowed_packet 从引用中: - max_connections:默认为100,建议512-1000,取决于使用情况。 我需要基于标准知识添加更多。 引用标识:在回答中引用段落时添加[^1]或[^2]。例如,"根据参考[^1],配置文件位于/etc/my.cnf。" 最后,生成相关问题。 完整回答结构: 1. **引言**:简要介绍my.cnf文件。 2. **配置文件位置和结构**。 3. **常用参数详解**:分组解释。 4. **配置建议和注意事项**。 5. **如何生效配置**。 6. **相关问题**。 确保语言自然流畅。</think>### MariaDB my.cnf 配置文件详解及常用参数设置 MariaDB(MySQL分支)的配置文件`my.cnf`是数据库性能调优和功能配置的核心文件。它位于`/etc/my.cnf`(Linux系统),修改后需重启MariaDB服务以生效(例如使用`systemctl restart mariadb`命令)。配置文件基于文本格式,分为多个部分(如`[mysqld]`、`[client]`等),每个部分包含参数键值对。配置时需根据实际硬件(如内存大小)和应用场景调整,避免盲目套用推荐值[^1]。以下我将逐步详解配置文件和常用参数设置,帮助您高效优化数据库。 #### 1. 配置文件基础结构 `my.cnf`文件通常包含多个节(section),每个节针对不同组件: - `[mysqld]`:MariaDB服务器核心参数,最常用。 - `[client]`:客户端工具(如mysql命令行)的默认设置。 - `[mysqld_safe]`:服务器安全启动相关。 - `[mysql]`:命令行客户端特定设置。 文件示例: ``` [mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock symbolic-links=0 [client] port=3306 socket=/var/lib/mysql/mysql.sock ``` 修改配置文件后,务必执行`sudo systemctl restart mariadb`重启服务[^1]。 #### 2. 常用参数详解 以下参数主要位于`[mysqld]`节,我将分组解释其作用、默认值和推荐设置。参数值需基于系统内存(如4GB内存系统)和应用负载调整。如果涉及计算,我将使用数学表达式(如内存分配比例)。 ##### 连接相关参数 - **max_connections** - 作用:最大并发连接数。设置过高可能导致内存溢出,过低则限制并发性能。 - 默认值:100。 - 推荐值:一般512-1000。小型网站100-200,大型应用500-800或更高[^2]。公式建议:基于可用内存,例如内存4GB时,可设置为$ \text{max\_connections} \approx 512 $(假设每个连接消耗约4MB内存)。 - 注意事项:监控实际连接数(使用`SHOW STATUS LIKE 'Threads_connected'`),避免超过系统限制。 - **wait_timeout** 和 **interactive_timeout** - 作用:非交互式和交互式连接的空闲超时时间(秒),超时后自动断开连接以释放资源。 - 默认值:28800秒(8小时)。 - 推荐值:300-600秒(5-10分钟),减少资源浪费。例如:`wait_timeout=300`。 ##### 内存优化参数 - **innodb_buffer_pool_size** - 作用:InnoDB存储引擎的缓冲池大小,用于缓存数据和索引,对性能影响最大。 - 默认值:128MB(MariaDB 10.2+)。 - 推荐值:设置为系统总内存的70-80%。例如,4GB内存系统: $$ \text{innodb\_buffer\_pool\_size} = 0.7 \times 4096 \text{MB} = 2867 \text{MB} $$ 实际配置:`innodb_buffer_pool_size=3G`(取整为3GB)。 - 注意事项:值过大可能导致系统交换(swap),影响性能[^1]。 - **key_buffer_size** - 作用:MyISAM存储引擎的键缓冲区大小(如果使用MyISAM表)。 - 默认值:8MB。 - 推荐值:如果MyISAM表较少,设为64-256MB。例如内存4GB时:`key_buffer_size=256M`。 - 注意事项:MariaDB优先推荐InnoDB,此参数仅用于兼容。 - **query_cache_size** - 作用:查询缓存大小(**注意:MariaDB 10.1+已移除查询缓存,此参数无效**)。在旧版本中,用于缓存SELECT查询结果。 - 推荐:禁用(设置为0),避免性能开销。 ##### 日志和错误处理参数 - **log_error** - 作用:错误日志文件路径,用于诊断启动或运行时问题。 - 默认值:`/var/log/mariadb/mariadb.log`。 - 推荐:保持默认,或自定义路径如`log_error=/var/log/mysql/error.log`。 - **slow_query_log** 和 **long_query_time** - 作用:慢查询日志功能,记录执行时间超过阈值的SQL语句。 - 默认:`slow_query_log=OFF`(关闭),`long_query_time=10`(秒)。 - 推荐:开启以优化SQL,例如`slow_query_log=1`,`long_query_time=2`(秒)。 - **general_log** - 作用:通用查询日志,记录所有SQL语句(调试用,但影响性能)。 - 默认:OFF。 - 推荐:生产环境关闭(`general_log=0`),仅在调试时开启。 ##### 性能与安全参数 - **max_allowed_packet** - 作用:单次通信包的最大大小,防止大查询或数据包溢出。 - 默认值:16MB。 - 推荐值:根据应用调整,如处理大BLOB数据时设为64-128MB:`max_allowed_packet=64M`。 - **character_set_server** 和 **collation_server** - 作用:设置服务器默认字符集和排序规则。 - 默认:`character_set_server=latin1`,`collation_server=latin1_swedish_ci`。 - 推荐:使用UTF-8以支持多语言,例如`character_set_server=utf8mb4`,`collation_server=utf8mb4_unicode_ci`。 - **innodb_flush_log_at_trx_commit** - 作用:控制事务日志刷写策略,平衡性能和数据安全。 - 默认值:1(最安全,每次提交都刷写日志)。 - 推荐值:对性能要求高时设为2(每秒刷写),例如`innodb_flush_log_at_trx_commit=2`,但可能丢失最近1秒数据。 #### 3. 配置建议和注意事项 - **硬件适配**:参数设置取决于内存大小(如4GB系统)。例如,`innodb_buffer_pool_size`不宜超过物理内存的80%,避免OOM错误。使用公式计算: $$ \text{innodb\_buffer\_pool\_size} = k \times \text{total\_memory} \quad (k \in [0.7, 0.8]) $$ - **逐步调优**:不要一次性修改多个参数。建议先备份配置文件(`cp /etc/my.cnf /etc/my.cnf.bak`),然后逐项调整,通过监控工具(如`SHOW GLOBAL STATUS`)评估效果。 - **风险提示**:参考值仅作起点。例如,`max_connections`过高可能导致内存不足;MariaDB官方文档建议测试不同负载下的性能[^1][^2]。 - **生效步骤**:修改后运行`sudo systemctl restart mariadb`重启服务。检查错误日志(`tail -f /var/log/mariadb/mariadb.log`)确认无报错。 #### 4. 完整配置示例(基于4GB内存系统) 以下是一个简化示例,整合常用参数: ```ini [mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock symbolic-links=0 # 连接设置 max_connections=512 wait_timeout=300 interactive_timeout=300 # 内存优化 innodb_buffer_pool_size=3G key_buffer_size=256M query_cache_size=0 # 禁用查询缓存 # 日志设置 log_error=/var/log/mariadb/error.log slow_query_log=1 long_query_time=2 general_log=0 # 性能与安全 max_allowed_packet=64M character_set_server=utf8mb4 collation_server=utf8mb4_unicode_ci innodb_flush_log_at_trx_commit=2 [client] port=3306 socket=/var/lib/mysql/mysql.sock ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值