首页 > 代码库 > Mysql 配置参数详解以及优化配置
Mysql 配置参数详解以及优化配置
mysql有以下几种日志:
要把日志生成在 /var/log 目录下(是系统日志存放的地方,只有 root 账号有写权限),需要 MySQL进程对这个目录有读写权限,一般是不这么做的,也考虑到安全问题,包括 MySQL 本身的数据安全,因为对 MySQL 的所有操作,都会记录到常规查询日志。MySQL的日志就不要用 /var/log/ 目录下。
---------------------------------------------------------------------2my.cnf
default-character-set = utf8
port
socket
no-auto-rehash
#default-character-set = utf8
user
port
socket
basedir = /usr/local/webserver/mysql
datadir = /data0/mysql/3306/data
open_files_limit
back_log = 600
max_connections = 3000 实际MySQL服务器允许的最大连接数16384;
max_connect_errors = 6000
table_cache = 1024
external-locking = FALSE
max_allowed_packet = 32M
sort_buffer_size = 2M是一个connection级参数,在每个connection第一次需要使用这个buffer的时候,一次性分配设置的内存.并不是越大越好,由于是connection级的参数,过大的设置+高并发可能会耗尽系统内存资源。
join_buffer_size = 2M
thread_cache_size = 64
thread_concurrency = 16 对mysql的性能影响很大,在多个cpu(或多核)的情况下,错误设置了thread_concurrency的值, 会导致mysql不能充分利用多cpu(或多核),出现同一时刻只能一个cpu(或核)在工作的情况。
query_cache_size = 32M缓存机制简单的说就是缓存sql文本及查询结果,如果运行相同的sql,服务器直接从缓存中取到结果,而不需要再去解析和执行sql。如果表更改了,那么使用这个表的所有缓冲查询将不再有效,查询缓存值的相关条目被清空
query_cache_limit = 2M 单个查询能够使用的缓冲区大小.缺省为1M
query_cache_min_res_unit = 2k它指定分配缓冲区空间的最小单位,缺省为4K。检查状态值Qcache_free_blocks,如果该值非常大,则表明缓冲区中碎片很多,这就表明查询结果都比较小,此时需要减小query_cache_min_res_unit
default-storage-engine = MyISAM
default_table_type = MyISAM
thread_stack = 192K
transaction_isolation = READ-COMMITTED
tmp_table_size = 256M 临时HEAP数据表的最大长度
max_heap_table_size = 256M HEAP数据表(内存表)的最大长度(默认设置是16M);
long_query_time = 1
log_long_format
log-bin = /data0/mysql/3306/binlog
binlog_cache_size = 8M 为binary log指定在查询请求处理过程中SQL 查询语句使用的缓存大小
binlog_format = MIXED
max_binlog_cache_size = 8M
max_binlog_size = 512M
expire_logs_days = 7
key_buffer_size = 256M
read_buffer_size = 1M
read_rnd_buffer_size = 16M 针对按某种特定顺序(如ORDER BY子句)输出的查询结果(默认256K)加速排序操作后的读数据,提高读分类行的速度。
bulk_insert_buffer_size = 64M 指定 MyISAM 类型数据表表使用特殊的树形结构的缓存
myisam_sort_buffer_size = 128M myisam引擎的sort_buffer_size
myisam_max_sort_file_size = 10G
#myisam_max_extra_sort_file_size = 10G
myisam_repair_threads = 1
myisam_recover
skip-name-resolve
master-connect-retry = 10
slave-skip-errors = 1032,1062,126,1114,1146,1048,1396
server-id = 1 设定为master
innodb_additional_mem_pool_size = 16MInnoDB用来存储数据字典和其他内部数据结构的内存池大小。
innodb_status_file
InnoDB发送诊断输出到stderr或文件,而不是到stdout或者固定尺寸内存缓冲,以避免底层缓冲溢出。作为一个副效果,SHOWINNODB STATUS的输出每15秒钟写到一个状态文件。这个文件的名字是innodb_status.pid,其中pid是服务器进程ID。这个文件在MySQL数据目录里创建。正常关机之时,InnoDB删除这个文件。如果发生不正常的关机,这些状态文件的实例可能被展示,而且必须被手动删除。在移除它们之前,你可能想要检查它们来看它们是否包含有关不正常关机的原因的有用信息。仅在配置选项innodb_status_file=1被设置之时,innodb_status.pid文件被创建。
innodb_buffer_pool_size = 2048M 指定大小的内存来缓冲数据和索引。
innodb_data_file_path = ibdata1:1024M:autoextend
innodb_file_io_threads = 4 IO操作(硬盘写操作)的最大线程个数(默认设置是4)。
innodb_thread_concurrency = 16InnoDB驱动程序能够同时使用的最大线程个数(默认设置是8)。
innodb_flush_log_at_trx_commit = 2
innodb_log_buffer_size = 16M 日志缓存的大小
innodb_log_file_size = 128M日志组中每个日志文件的大小在高写入负载尤其是大数据集的情况下很重要。
innodb_log_files_in_group = 3 日志组中的日志文件数目,推荐使用3
innodb_max_dirty_pages_pct = 90 最大脏页的百分数
innodb_lock_wait_timeout = 120 事务获得资源超时设置,默认50s
innodb_file_per_table = 0
quick
max_allowed_packet = 32M
停用mysql的严格验证STRICT_TRANS_TABLES
#把sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"中"STRICT_TRANS_TABLES,"去掉,重启MySQL服务,问题解决……汗颜~~~
经过此役,总结数据库设计中的一个注意点,也即避免此现象的两种方法:
1、在表的设计过程中,对所有不能为空的字段设置默认值
2、配置MySQL服务,如上所述将STRICT_TRANS_TABLES去掉
#开启event
#event_scheduler = on
#myisam自动修复
myisam-recover=BACKUP,FORCE
# 在 中輸入
log-bin=/var/lib/mysql/mysql-bin
#expire_logs_days = 10
#max_binlog_size = 100M
log=/var/lib/mysql/mysql.log
log-error=/var/lib/mysql/error.log
#log-update=/var/lib/mysql/update.log
long_query_time=1
log-slow-queries
log-queries-not-using-indexes
是否启用了日志
mysql>show variables like ‘log_%‘;
怎样知道当前的日志
mysql> show master status;
顯示二進制日志數目
mysql> show master logs;
看二进制日志文件用mysqlbinlog
shell>mysqlbinlog mail-bin.000001
或者shell>mysqlbinlog mail-bin.000001 | tail
#详细说明
log-bin=/var/lib/mysql/mysql-bin#二进制LOG,mysqlbinlog直接读取二进制日志文件。二进制日志包含所有更新数据的语句,其目的是在恢复数据库时用它来把数据尽可能恢复到最后的状态。另外,如果做同步复制( Replication)的话,也需要使用二进制日志传送修改情况。log_bin指定日志文件,如果不提供文件名,MySQL将自己产生缺省文件名。MySQL会在文件名后面自动添加数字索引,每次启动服务时,都会重新生成一个新的二进制文件。
时间长了log bin也会占很大的硬盘空间,所以在my.ini中加上对其的限制。
#expire_logs_days = 10
#max_binlog_size = 100M
---------------------
# show master status;
#mysqlbinlog mysql-bin.000052
-------------格式如下:
flush privileges
;
# at 173
#090814 10:09:22 server id 1
use sq_gllutf8;
SET TIMESTAMP=1250215762;
;
SET@@session.character_set_client=33,@@session.collation_connection=33,@@sessio
update gll_products set
;
# at 448
#090814 10:11:14 server id 1
SET TIMESTAMP=1250215874;
delete from gll_member
;
DELIMITER ;
# End of log file
ROLLBACK ;
;
-----------------------------------
log=/var/lib/mysql/mysql.log
----------------------------格式如下:
090814 10:11:14