mysql编译的默认配置并不都是靠谱的,虽然其大部分都比较合适。它们被设计成不要使用大量的资源,因为mysql的使用目标是非常灵活的,它并没有假设自己是服务器上唯一的应用。默认情况下,mysql只是使用恰好足够的资源来启动,运行一些少量数据的简单查询。如果数据量比较大后,就一定需要自己配置mysql的配置。
在配置的时候建议:不要使用mysql发行版中提供的实例配置文件,也不要使用操作系统的安装包自带的配置文件,最好从头开始。
实际上mysql的可配置性太强也可以说是个弱点,看起来好像需要花很多时间在配置上,其实大多数配置的默认值已经是最佳配置了,所以最好不要改动太多配置,甚至可以忘记某些配置的存在。
下面是一个完整的最小配置文件:
[mysqld] #GENERAL datadir = /var/lib/mysql socket = /var/lib/mysql/mysql.sock pid_file = /var/lib/mysql/mysql.pid user = mysql port = 3306 default_storage_engine=InnoDB #INNODB innodb_buffer_pool_size = <value> innodb_log_file_size =<value> innodb_file_per_table =1 innodb_flush_method =O_DIRECT #MyISAM key_buffer_size = <value> #LOGGING log_error = /var/lib/mysql/mysql-error.log slow_query_log = /var/lib/mysql/mysql-slow.log #OTHER tmp_table_size = 32M max_heap_table_size = 32M query_cache_type = 0 query_cache_size = 0 max_connections = <value> thread_cache = <value> table_cache = <value> open_files_limit = 65535 [client] socket = /var/lib/mysql/mysql.sock port = 3306
和其他配置文件相比,这里的配置选项可能太少了。但实际上已经超过了许多人的需要。还有其他一些比较重要的配置,比如二进制日志。
1、配置内存使用
配置mysql正确地使用内存对高性能至关重要。mysql的内存分为两类:可控制的内存和不可控制的内存。无法控制mysql服务器运行、解析查询,以及其内部管理所消耗的内存,但是特定条目使用多少内存由很多参数可以控制。一般配置内存方式如下:
- 确定可以使用的内存上限
- 确定每个连接mysql需要使用多少内存,例如排序缓冲和临时表
- 确定操作系统需要多少内存才够用。包括同一台机器上其他程序使用的内存
- 把剩下的内存全部给mysql的缓存,例如InnoDB的缓冲区、MyISAM键缓存、线程缓存、表缓存、InnoDB数据字典等。
2、配置mysql的I/O行为
有些配置项影响着mysql怎样同步数据到磁盘以及如何恢复操作。这些操作对性能的影响非常大,因为都涉及到昂贵的I/O操作。他们也表现了性能和数据安全之间的权衡。通常保证数据立刻并且一致的写到磁盘是很昂贵的。如果能够冒一点磁盘写可能没有真正持久化到磁盘的风险,就可以增加并发性和减少I/O等待,但是必须决定可以容忍多大的风险。
3、配置mysql并发
当mysql承受高并发时,可能会遇到不曾遇到过的瓶颈,这需要根据mysql采用的引擎具体配置。一般常用的引擎有MyISAM和InnoDB。这就需要从引擎方面入手,根据他们的特性进行配置。
下面是mysql配置文件的配置项:
[client] port = 3306 socket = /home/mysql/mysql/tmp/mysql.sock [mysqld] !include /home/mysql/mysql/etc/mysqld.cnf #包含的配置文件 ,把用户名,密码文件单独存放 port = 3306 socket = /home/mysql/mysql/tmp/mysql.sock pid-file = /longxibendi/mysql/mysql/var/mysql.pid basedir = /home/mysql/mysql/ datadir = /longxibendi/mysql/mysql/var/ # tmp dir settings tmpdir = /home/mysql/mysql/tmp/ slave-load-tmpdir = /home/mysql/mysql/tmp/ #当slave 执行 load data infile 时用 #language = /home/mysql/mysql/share/mysql/english/ character-sets-dir = /home/mysql/mysql/share/mysql/charsets/ # skip options skip-name-resolve #grant 时,必须使用ip不能使用主机名 skip-symbolic-links #不能使用连接文件 skip-external-locking #不使用系统锁定,要使用myisamchk,必须关闭服务器 skip-slave-start #启动mysql,不启动复制 #sysdate-is-now # res settings back_log = 100#接受队列,对于没建立tcp连接的请求队列放入缓存中,队列大小为back_log,受限制与OS参数 max_connections = 1000 #最大并发连接数 ,增大该值需要相应增加允许打开的文件描述符数 max_connect_errors = 10000 #如果某个用户发起的连接error超过该数值,则该用户的下次连接将被阻塞,直到管理员执行flush hosts ; 命令;防止黑客 #open_files_limit = 10240 connect-timeout = 10 #连接超时之前的最大秒数,在Linux平台上,该超时也用作等待服务器首次回应的时间 wait-timeout = 28800 #等待关闭连接的时间 interactive-timeout = 28800 #关闭连接之前,允许interactive_timeout(取代了wait_timeout)秒的不活动时间。客户端的会话wait_timeout变量被设为会话interactive_timeout变量的值。 slave-net-timeout = 600 #从服务器也能够处理网络连接中断。但是,只有从服务器超过slave_net_timeout秒没有从主服务器收到数据才通知网络中断 net_read_timeout = 30 #从服务器读取信息的超时 net_write_timeout = 60 #从服务器写入信息的超时 net_retry_count = 10 #如果某个通信端口的读操作中断了,在放弃前重试多次 net_buffer_length = 16384 #包消息缓冲区初始化为net_buffer_length字节,但需要时可以增长到max_allowed_packet字节 max_allowed_packet = 64M # #table_cache = 512 #所有线程打开的表的数目。增大该值可以增加mysqld需要的文件描述符的数量 thread_stack = 192K #每个线程的堆栈大小 thread_cache_size = 20 #线程缓存 thread_concurrency = 8 #同时运行的线程的数据 此处最好为CPU个数两倍。本机配置为CPU的个数 # qcache settings query_cache_size = 256M #查询缓存大小 query_cache_limit = 2M #不缓存查询大于该值的结果 query_cache_min_res_unit = 2K #查询缓存分配的最小块大小 # default settings # time zone default-time-zone = system #服务器时区 character-set-server = utf8 #server级别字符集 default-storage-engine = InnoDB #默认存储 # tmp & heap tmp_table_size = 512M #临时表大小,如果超过该值,则结果放到磁盘中 max_heap_table_size = 512M #该变量设置MEMORY (HEAP)表可以增长到的最大空间大小 log-bin = mysql-bin #这些路径相对于datadir log-bin-index = mysql-bin.index relayrelay-log = relay-log relayrelay_log_index = relay-log.index # warning & error log log-warnings = 1 log-error = /home/mysql/mysql/log/mysql.err log_output = FILE #参数log_output指定了慢查询输出的格式,默认为FILE,你可以将它设为TABLE,然后就可以查询mysql架构下的slow_log表了 # slow query log slow_query_log = 1 long-query-time = 1 #慢查询时间 超过1秒则为慢查询 slow_query_log_file = /home/mysql/mysql/log/slow.log #log-queries-not-using-indexes #log-slow-slave-statements general_log = 1 general_log_file = /home/mysql/mysql/log/mysql.log max_binlog_size = 1G max_relay_log_size = 1G # if use auto-ex, set to 0 relay-log-purge = 1 #当不用中继日志时,删除他们。这个操作有SQL线程完成 # max binlog keeps days expire_logs_days = 30 #超过30天的binlog删除 binlog_cache_size = 1M #session级别 # replication replicate-wild-ignore-table = mysql.% #复制时忽略数据库及表 replicate-wild-ignore-table = test.% #复制时忽略数据库及表 # slave_skip_errors=all key_buffer_size = 256M #myisam索引buffer,只有key没有data sort_buffer_size = 2M #排序buffer大小;线程级别 read_buffer_size = 2M #以全表扫描(Sequential Scan)方式扫描数据的buffer大小 ;线程级别 join_buffer_size = 8M # join buffer 大小;线程级别 read_rnd_buffer_size = 8M #MyISAM以索引扫描(Random Scan)方式扫描数据的buffer大小 ;线程级别 bulk_insert_buffer_size = 64M #MyISAM 用在块插入优化中的树缓冲区的大小。注释:这是一个per thread的限制 myisam_sort_buffer_size = 64M #MyISAM 设置恢复表之时使用的缓冲区的尺寸,当在REPAIR TABLE或用CREATE INDEX创建索引或ALTER TABLE过程中排序 MyISAM索引分配的缓冲区 myisam_max_sort_file_size = 10G #MyISAM 如果临时文件会变得超过索引,不要使用快速排序索引方法来创建一个索引。注释:这个参数以字节的形式给出.重建MyISAM索引(在REPAIR TABLE、ALTER TABLE或LOAD DATA INFILE过程中)时,允许MySQL使用的临时文件的最大空间大小。如果文件的大小超过该值,则使用键值缓存创建索引,要慢得多。该值的单位为字节 myisam_repair_threads = 1 #如果该值大于1,在Repair by sorting过程中并行创建MyISAM表索引(每个索引在自己的线程内) myisam_recover = 64K#允许的GROUP_CONCAT()函数结果的最大长度 transaction_isolation = REPEATABLE-READ innodb_file_per_table #innodb_status_file = 1 #innodb_open_files = 2048 innodb_additional_mem_pool_size = 100M #帧缓存的控制对象需要从此处申请缓存,所以该值与innodb_buffer_pool对应 innodb_buffer_pool_size = 2G #包括数据页、索引页、插入缓存、锁信息、自适应哈希所以、数据字典信息 innodb_data_home_dir = /longxibendi/mysql/mysql/var/ #innodb_data_file_path = ibdata1:1G:autoextend innodb_data_file_path = ibdata1:500M;ibdata2:2210M:autoextend #表空间 innodb_file_io_threads = 4 #io线程数 innodb_thread_concurrency = 16 #InnoDB试着在InnoDB内保持操作系统线程的数量少于或等于这个参数给出的限制 innodb_flush_log_at_trx_commit = 1 #每次commit 日志缓存中的数据刷到磁盘中 innodb_log_buffer_size = 8M #事物日志缓存 innodb_log_file_size = 500M #事物日志大小 #innodb_log_file_size =100M innodb_log_files_in_group = 2 #两组事物日志 innodb_log_group_home_dir = /longxibendi/mysql/mysql/var/#日志组 innodb_max_dirty_pages_pct = 90 #innodb主线程刷新缓存池中的数据,使脏数据比例小于90% innodb_lock_wait_timeout = 50 #InnoDB事务在被回滚之前可以等待一个锁定的超时秒数。InnoDB在它自己的 锁定表中自动检测事务死锁并且回滚事务。InnoDB用LOCK TABLES语句注意到锁定设置。默认值是50秒 #innodb_flush_method = O_DSYNC [mysqldump] quick max_allowed_packet = 64M [mysql] disable-auto-rehash #允许通过TAB键提示 default-character-set = utf8 connect-timeout = 3
相关推荐
MySQL是世界上最受欢迎的关系型数据库管理系统之一,其性能和效率很大程度上取决于配置文件my.cnf。my.cnf文件包含了MySQL服务器的启动参数和配置选项,它决定了数据库的行为、资源使用以及性能优化策略。在这个名为...
本文主要给大家介绍了关于MySQL中配置文件my.cnf因权限问题导致无法启动的相关解决过程,分享出来供大家参考学习,下面来一起看看详细的介绍: 问题描述 MySQL 无法启动,报如下错误: 问题分析 查看 MySQL 错误...
mysql-5.7.24的my.cnf。适用于生产环境。相关配置已经写好,直接可以用。 mysql-5.7.24的my.cnf。适用于生产环境。相关配置已经写好,直接可以用。 mysql-5.7.24的my.cnf。适用于生产环境。相关配置已经写好,直接...
MySQL 配置文件 my.cnf 是 MySQL 数据库的核心配置文件,该文件用于存储 MySQL 服务器的各种配置选项,例如数据库的连接参数、缓存设置、日志记录等。my.cnf 文件通常位于 /etc/mysql/ 目录下。 MySQL 启动错误的...
ubuntu mysql my.cnf 服务器最佳配置(16G,32G 内存)
mysql5.7优化后的配置文件,mysql5.7主从架构配置环境,生产环境直接使用,推荐生产环境5.7版本使用最稳定版本5.7.21。
MySQL是世界上最受欢迎的关系型数据库管理系统之一,而`my.cnf`是MySQL服务器的主要配置文件,它定义了数据库的运行参数和服务行为。这个文件对于优化性能、确保安全性以及满足特定的系统需求至关重要。以下是对`my....
MySQL 教程 MySQL 是最流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS(Relational Database Management System:关系数据库 MySQL8.0数据库的一般配置 Linux环境的配置文件
"my.cnf配置文件"是MySQL服务器的关键配置文件,其中包含了服务器启动时的各种参数设置。它影响着MySQL的性能和行为。【描述】中提到my.cnf的详细配置带有注释,这意味着我们可以清晰地了解每个配置项的作用,这对于...
在Linux环境中,MySQL的主要配置文件是`my.cnf`,它是数据库服务器启动时读取的配置文件,用于设定各种参数和选项,以优化数据库的性能、安全性以及资源使用。这份文档将深入探讨`my.cnf`的结构、主要配置项及其作用...
MySQL的配置文件`my.cnf`是MySQL服务器的核心配置文档,它定义了数据库服务的各种运行参数,直接影响到MySQL的性能、稳定性和安全性。本篇将详细介绍`my.cnf`中的重要参数及其作用。 1. **[mysqld]部分** 这是...
某电商网站的生产环境的Mysql配置文件,放入/etc/下面即可
Mysql主从配置文件,主文件my.cnf,从文件my.cnf完整版。部分配置如下: [client] port = 3306 socket =/tmp/mysql.sock [mysql] no-auto-rehash prompt="\u@\h [\d]>" #pager="less -i -n -S" #tee=/opt/mysql/...
MySQL 5.6是MySQL数据库管理系统的一个重要版本,它的配置文件`my.cnf`是数据库服务器启动时读取的关键文件,用于定义各种参数和设置,从而影响MySQL的性能、安全性以及资源消耗。在这个版本中,`my.cnf`通常位于...
### MySQL中的my.cnf配置文件详解 在MySQL的配置与管理过程中,`my.cnf`文件扮演着极其重要的角色。该文件通常包含了MySQL服务器启动时所遵循的各种参数设置,包括但不限于内存分配、缓存大小、日志记录以及安全...
mysql linux 下配置my.cnfmysql linux 下配置my.cnfmysql linux 下配置my.cnf
### MySQL服务性能优化——my.cnf/my.ini配置详解 #### 背景介绍 本文档旨在详细介绍一套已在生产环境中经过验证、适用于16GB内存环境下的MySQL服务性能优化方案。通过对my.cnf/my.ini配置文件的各项关键参数进行...
linux下mysql my.cnf 文件已经配置好 路径根据实际情况自己修改linux下mysql my.cnf 文件已经配置好 路径根据实际情况自己修改linux下mysql my.cnf 文件已经配置好 路径根据实际情况自己修改
Linux 下 Mysql 配置文件 my.cnf 详解 Mysql 配置文件 my.cnf 是 Mysql 数据库服务器的核心配置文件,在 Linux 下 plays a crucial role in configuring Mysql 服务器的行为。该文件中包含了多个配置选项,这些选项...