关于 Linux 下安装mysql 5.6 请看这个:
liunx 下 或centos7 下安装 MySQL-5.6
Mysql 启用InnoDB 这是我的配置文件
[mysqld] datadir =/usr/local/mysql/data socket = /tmp/mysql.sock #pid-file = /data/logs/mysql/mysql.pid user = mysql #port = 3306 default_storage_engine = InnoDB # InnoDB #innodb_buffer_pool_size = 128M #innodb_log_file_size = 48M innodb_file_per_table = 1 innodb_flush_method = O_DIRECT # MyISAM #key_buffer_size = 48M # character-set character-set-server=utf8 collation-server=utf8_general_ci # name-resolve skip-host-cache skip-name-resolve # LOG log_error = /home/mysql-error.log long_query_time = 1 slow-query-log slow_query_log_file = /home/mysql-slow.log # Others explicit_defaults_for_timestamp=true #max_connections = 500 open_files_limit = 65535 sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES [client] socket = /tmp/mysql.sock #port = 3306
遇到的错误
2016-03-17 22:30:47 5057 [Note] InnoDB: Compressed tables use zlib 1.2.3 2016-03-17 22:30:47 5057 [Note] InnoDB: Using CPU crc32 instructions 2016-03-17 22:30:47 5057 [Note] InnoDB: Initializing buffer pool, size = 128.0M 2016-03-17 22:30:47 5057 [Note] InnoDB: Completed initialization of buffer pool 2016-03-17 22:30:47 5057 [Note] InnoDB: Restoring page 0 of tablespace 0 2016-03-17 22:30:47 5057 [Warning] InnoDB: Doublewrite does not have page_no=0 of space: 0 2016-03-17 22:30:47 5057 [ERROR] InnoDB: space header page consists of zero bytes in data file ./ibdata1 2016-03-17 22:30:47 5057 [ERROR] InnoDB: Could not open or create the system tablespace. If you tried to add new data files to the system tablespace, and it failed here, you should now edit innodb_data_file_path in my.cnf back to what it was, and remove the new ibdata files InnoDB created in this failed attempt. InnoDB only wrote those files full of zeros, but did not yet use them in any way. But be careful: do not remove old data files which contain your precious data! 2016-03-17 22:30:47 5057 [ERROR] Plugin 'InnoDB' init function returned error. 2016-03-17 22:30:47 5057 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed. ^G/usr/local/mysql/bin/mysqld: File '/home/mysql-slow.log' not found (Errcode: 13 - Permission denied) 2016-03-17 22:30:47 5057 [ERROR] Could not open /home/mysql-slow.log for logging (error 13). Turning logging off for the whole duration of the MySQL server process. To turn it on again: fix the cause, shutdown the MySQL server and restart it. 2016-03-17 22:30:47 5057 [ERROR] Unknown/unsupported storage engine: InnoDB 2016-03-17 22:30:47 5057 [ERROR] Aborting
其实这个 错误很好解决 因为在这篇文章中liunx 下 或centos7 下安装 MySQL-5.6 并没有启用 innodb 引擎 所以 会爆这个 其实 还有个日志的权限问题 这个暂时可以不用管
解决方法 简单
#备份数据文件 [root@weicot mysql]# cp -R data data.bk #进入到 data 目录 删除 ibdata1 更 ib_logfile[数字] [root@weicot mysql]#cd data && rm -rf ibdata1 && rm -rf ib_logfile
MySQL 5.6 编译安装配置详解
MySQL有大量可以修改的配置选项,通常只需要把基本的项配置正确,应该将更多的时间花在schema的优化、索引上,以及查询设计上。正确地配置MySQL的基本配置项后,再花力气去修改其他配置选项的收益通常就比较小了。
过度优化的服务器导致的潜在风险很大,容易频繁崩溃、运行缓慢。
MySQL大多数默认配置选项已经是最佳配置了,所以最好不要做太多的改动,上文设置的参数对于大多数人已经够多了。
没有一劳永逸的配置,随着数据库内数据、用户数量的变化,过一段时间后,可以有选择地调整数据库的配置。
基本配置选项详解:
socket = /tmp/mysql.sock pid_file = /data/logs/mysql/mysql.pid
socket和pid_file 文件如果不指定位置,放在默认编译位置,在不同的MySQL版本里可能会导致一些错误
default_storage_engine = InnoDB
设定默认存储引擎,创建表的时候最好显式进行存储引擎的配置
innodb_buffer_pool_size = 2G innodb_log_file_size = 128M innodb_file_per_table = 1 innodb_flush_method = 0_DIRECT
阅读材料
optimizing-innodb-diskio
选择合适的innodb_log_file_size
InnoDB最重要的两个选项为缓冲池大小
innodb_buffer_pool_size和 日志文件大小innodb_log_file_size,默认值一般都太小。
如果大部分表都是InnoDB表,InnoDB缓冲池的设置或许比其他任何东西都需要内存。InnoDB并不仅仅缓存索引:它还会缓存数据、自适应哈系索引、插入缓冲(Insert Buffer)、锁,以及其他内部数据结构。InnoDB还使用缓冲池来帮助延迟写入,合并多个写入操作,一起顺序写回。总之,InnoDB严重依赖缓冲池,必须分配足够内存。
Note:
缓冲池越大,预热和关闭都需要很长时间。
InnoDB使用日志来减少事务提交的开销。因为日志已经记录了事务,就无须在每个事务提交时把缓冲池的胀快刷新到磁盘中。InnoDB用日志把随机I/O变成顺序I/O。一旦日志安全写到磁盘,事务就持久化了。如果断电,InnoDB可以重放日志并且恢复已经提交的事务。
整体日志大小受控于innodb_log_file_size和innodb_log_file_in_group两个参数之乘积。一般需要设置几百MB甚至上GB。作为经验法则,一般日志文件全部大小,应该足够容纳服务器一小时的活动内容。
缓冲池大小设置方法:
从服务器总内存开始
减去操作系统占用内存和其他服务占用内存(如果还有其他服务的话)
减去MySQL自身需要内存,例如为每个查询操作分配一些缓冲。
减去足够让操作系统缓存InnoDB日志文件的内存,至少是足够缓存最近经常访问的部分。再减去一些可以缓存二进制日志的最后一部分,以防止复制产生了延迟,备库可能读取主库上旧的二进制日志文件,给主库内存造成压力。
减去其他MySQL缓冲和缓存需要的内存,如MyISAM键缓存(key_buffer_size),或者查询缓存(query cache)
处以105%,向下取舍一个合理值。
Note:设置不需要很精确,而且宁可谨慎,而不要设置过大,如果设置少了20%可能只产生很小的影响,但是如果大了20%则可能造成很严重的问题:内存交换、磁盘抖动、内存耗尽和死机。
#MyISAM key_buffer_size = 128M [/pho] MyISAM自身只缓存索引,不缓存数据(依赖操作系统缓存数据)。如果大部分为MyISAM表,就应该分配较大key_buffer_size。 再分配多大内存前,首先了解一下,MyISAM占用了多大的空间,肯定不需要分配比需要缓存的索引数据还大的内存(有时候为数据量扩增预留一些,会设置比较大)。 有两个方法计算索引大小: 使用SQL语句,查询INFORMATION——SCHEMA表的INDEX_LENGTH字段,把他们相加即可。 1 SELECT SUM( INDEX_LENGTH) FROM INFORMATION_SCHEMA.TABLES WHERE ENGINE=’MYISAM’;
使用的UNIX系统,则使用以下命令
# du -sch `find /mysqldatadir -name “*.MYI”`
键缓存需要存储多大的值?
不要超过索引总大小,也不要超过为操作系统缓存保留的总大小。取两者较小值。
缓冲区使用率计算,通过SHOW STATUS和SHOW VARIABLES命令查看以下变量:
100 - ( ( Key_blocks_unused * key_cache_block_size) * 100 / key_buffer_size )
如果服务器运行很长一段时间之后,还是没有使用完所有缓冲键,就可以把缓冲键调小一点。
键缓冲命中率
从经验上来讲,每秒未命中次数更有用,假定一个磁盘每秒可以产生100个随机读,每秒5次缓存未命中则不会导致I/O繁忙,每秒80次则可能导致I/O繁忙。计算公式:
Key_reads / Uptime
设定默认字符集和编码
# character-set-server character-set-server=utf8 collation-server=utf8_general_ci
以下选项设定仅使用IP来链接MySQL服务器,省略了DNS查询时间
阅读材料:http://dev.mysql.com/doc/refman/5.6/en/host-cache.html
# name-resolve skip-name-resolve skip-host-cache
设定错误日志和慢查询日志。大于1s的为慢查询
# LOG log_error = /data/logs/mysql/mysql-error.log long_query_time = 1 slow_query_log slow_query_log_file = /data/logs/mysql/mysql-slow.log
# Others
#timestamp默认设置,5.6.6后不设置会报错
explicit_defaults_for_timestamp=true
设定同时处理的最大链接,保证应用激增产生而不堪重负,当查询不能执行,那打开一个链接没有任何好处,所以被“太多链接”的错误拒绝是一个快速而代价下的失败方式。具体设定需要参考预想的最大并发数和本机配置。
max_connections = 500 table_open_cache was known as table_cache in MySQL 5.1.2 and earlier.
table_open_cache应该设置足够大,避免总是重新打开和解析表定义。如果Open_tables的值每秒变化很大,那么table_open_cache可能设置偏小。这个值从max_connections的10倍开始设置比较好,但是,大部分情况下不要超过10000.
table_open_cache = 5000
如果在段时间内不断有错误链接,比如:权限错误,应用配置出错等。客户端达到max_connect_errors设定次数,就会被加入黑名单,无法连接,直到再次刷新主机缓存。(如何操作?)可以有效防止暴力破解密码。
max_connect_errors = 2000
在典型的Linux系统上我们把open_files_limit设置的尽可能大。现代操作系统中打开文件句柄开销都较小。如果这个参数设置不够大,会出现经典的24号错误:”too many open files”。
open_files_limit = 65535
以下参考:sysvar_sql_mode
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES [client] socket = /tmp/mysql.sock port = 3306
参考及引用
liunx 下 或centos7 下安装 MySQL-5.6
Mysql 官方参考文档 Mysqld Option Tables