可能有时候咱们会问,“个人服务器有50 GB内存,12核CPU,怎样配置最好?” 很遗憾,问题没这么简单,MySQL 服务器的配置应该符合它的工做负载,数据,以及应用需求,并不只仅看硬件的状况。一般只须要把基本的项配置正确,应该将更多的时间花费在 schema 的优化,索引,以及查询设计上。mysql
为 Mysql 服务器建立一个靠谱的配置文件过程。
MySQL是从命令行参数
和配置文件
得到配置信息。
在类 UNIX 系统中,配置文件的位置通常在 /etc/my.conf
或者 /etc/mysql/my.conf
中。sql
必定要清楚的知道服务器配置文件的位置!
有时候咱们尝试修改配置文件可是不生效,由于修改的并非服务器读取的文件。不过咱们能够用下面的命令来找出正在运行的mysql的配置文件的位置。数据库
➜ ~ which mysqld /usr/local/bin/mysqld ➜ ~ /usr/local/bin/mysqld --verbose --help | grep -A 1 'Default options' Default options are read from the following files in the given order: /etc/my.cnf /etc/mysql/my.cnf /usr/local/etc/my.cnf ~/.my.cnf ➜ ~
配置项设置都使用小写,单词之间用下划线
或横线
隔开。下面的例子是等价的,而且可能在命令行和配置文件中都看到这两种格式:缓存
/usr/local/bin/mysqld --auto-increment-offset=5 /usr/local/bin/mysqld --auto_increment_offset=5
在这里咱们建议使用一种固定的风格。bash
配置项能够有多个做用域。有些设置是服务器级的(全局做用域
),有些对每一个链接是不一样的(会话做用域
),剩下的一些是对象级
的。服务器
许多会话级变量跟全局变量相等,能够认为是默认值。若是改变会话级变量,它只影响改动的当前链接,当链接关闭时全部的参数变动都会失效。socket
举例:性能
另外,除了在配置文件中设置变量,有不少变量(但不是全部)也能够在服务器运行时修改。MySQL 把这些归为动态配置变量。优化
SET sort_buffer_size = 2000;
若是动态的设置变量,要注意 MySQL 关闭时可能丢失这些设置,若是想保持这些设置,仍是须要修改配置文件。ui
若是在服务器运行时修改了变量的全局值,这个值对当前会话和其余任何已经存在的会话都不起效果,这是由于会话的变量值是在连续建立时从全局值初始化来的。在每次变动后,应该检查 SHOW_GLOBAL_VARIABLES
的输出,确认已经按照指望变动了。
动态设置变量可能致使意外的反作用,例如从缓冲中刷新脏块。务必当心那些能够在线更改的设置,由于它们可能致使数据库作大量的工做。
经常使用的变量:
key_buffer_size 键缓冲区 table_cache_size 表能够被缓存的数量 thread_cache_size 线程缓存 query_cache_size 查询缓存 read_buffer_size sort_buffer_size 排序操做缓存分配内存
正如咱们前面提到的,没有一个适合全部场景的“最佳配置文件”,好比,对一台有18GB 内存和 12 块硬盘的 4 路CPU服务器,不会有一个相应的“最佳配置文件”。应该开发本身的配置,由于即便是一个好的起点,也依赖于具体是如何使用服务器的。
实际上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=0_DIRECT #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 max_connections=<value> open_files_limit=65535 socket=/var/lib/mysql/mysql.sock # Replication Master Server (default) # binary logging is required for replication log-bin=mysql-bin # binary logging format - mixed recommended binlog_format=mixed
配置MySQL正确使用内存量对高性能事关重要。MySQL内存消耗能够分为两类:能够控制的内存
和不可控制的内存
。没法控制MySQL服务器运行、解析查询,以及其内部管理所消耗的内存,可是为特定目的而使用多少内存则有不少参数能够控制。
能够按下面的步骤来配置内存: