mysql 优化配置和一些参数的解释

Mysql的一些性能优化记录

项目上经过合服等操作,单服的玩家数量一度超过500W,一些排行榜数据和玩家摘要数据在程序启动时就要从数据库中加载,数据量的增大也延长了服务器程序的启动时间,一些必要的优化就在所难免了.贴一下数据的配置.做一下记录

[client]
socket = /tmp/mysql.sock


[mysqld_multi]
log        = /data/mysql_db/mysqld_multi.log
mysqld     = /usr/bin/mysqld_safe
mysqladmin = /usr/bin/mysqladmin
user       = shutdown_user

###########################################################################################
[mysqld4306]
port       = 4306
socket     = /tmp/mysql_4306.sock
pid-file   = /tmp/mysql_4306.pid
datadir    = /data/mysql_db/4306
default_storage_engine = InnoDB
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
skip-name-resolve
max_connections = 1000
innodb_flush_log_at_trx_commit = 2
innodb_flush_log_at_timeout     =1
innodb_buffer_pool_size = 24080M
innodb_log_buffer_size = 8M
innodb_log_file_size = 256M
log-bin=/data/mysql_binlog/4306/mysql-bin
binlog_format=MIXED
binlog_cache_size = 1M
max_binlog_size=512M
log_warnings
slow_query_log
long_query_time = 2
server-id = 1
expire_logs_days = 5
secure-file-priv=
tmpdir=/data/mysql_tmp

innodb_buffer_pool_size

这个选项调大可以增加innodb的内存大小,减少io操作

expire_logs_days

这个选项可以指定binlog保存的天数,binlog占用硬盘空间特别大,但是binlog又是恢复数据库时最宝贵的log,所以如何权衡这个问题还得结合自己项目的需要

secure-file-priv=

这个选项可以让其他用户写入数据,项目在合服时无法写入数据,加入这个配置可以降低数据库的安全性检查

tmpdir=/data/mysql_tmp

这个选项可以指定mysql在运行时使用的硬盘空间地址,默认的地址是在系统盘,而一般系统盘的空间较小,把目录指定到空间较大的目录可以有效提高数据库的io效率
如果表结构发生了改变,需要增加表列,而这个表本身的数据量非常大,那么mysql就会用到大量的硬盘空间,如果空间不足,在修改表结构的时候可能会报错Incorrect key file for table 'tbl_xxx'; try to repair it,
那么就必须把mysql的tmpdir指定到一个容量大的地方。
/data/mysql_tmp文件夹必须创建出来,并且给mysql用户添加权限 chown -R mysql:mysql mysql_tmp/