1.简单介绍
InnoDB给MySQL提供了具有提交,回滚和崩溃恢复能力的事务安全(ACID兼容)存储引擎。InnoDB锁定在行级并且也在SELECT语句提供一个Oracle风格一致的非锁定读。这些特色增加了多用户部署和性能。没有在InnoDB中扩大锁定的需要,因为在InnoDB中行级锁定适合非常小的空间。InnoDB也支持FOREIGN KEY强制。在SQL查询中,你可以自由地将InnoDB类型的表与其它MySQL的表的类型混合起来,甚至在同一个查询中也可以混合。
2.之所以选用innodb作为存储引擎的考虑
目前来说,InnoDB是为Mysql处理巨大数据量时的最大性能设计。它的CPU效率可能是任何其它基于磁盘的关系数据库引擎所不能匹敌的。在数据量大的网站或是应用中Innodb是倍受青睐的。
另一方面,在数据库的复制操作中Innodb也是能保证master和slave数据一致有一定的作用。
3.下面是线上用的一个配置(5.7)
# The following options will be passed to all MySQL clients [client] port = 3306 socket = /tmp/mysql.sock [mysql] #这个配置段设置启动MySQL服务的条件;no-auto-rehash确保这个服务启动得比较快。 no-auto-rehash #默认字符集 default-character-set=utf8 [mysqld] #-------------------- basic settting -------------------- user = root port = 3306 socket = /tmp/mysql.sock #skip-grant-tables secure_file_priv=/root basedir = soft_path datadir = data_path #禁用DNS解析,提高连接速度,设置后在MySQL的授权表中只能用ip格式。 skip-name-resolve #字符集 character-set-server=utf8 collation-server=utf8_general_ci #最大连接数 max_connections = 1000 #最大错误连接次数 max_connect_errors = 10000 # 事务隔离级别READ-COMMITTED(读取提交内容) transaction_isolation = READ-COMMITTED #mysql服务器能够工作在不同的模式下,并能针对不同的客户端以不同的方式应用这些模式 sql_mode = "STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER" #即跳过外部锁定 skip-external-locking #表和表联接的缓冲区的大小 join_buffer_size = 512M #内部内存临时表的最大值 tmp_table_size = 64M tmpdir = /tmp #该值设置过小将导致单个记录超过限制后写入数据库失败,且后续记录写入也将失败 max_allowed_packet = 64M #mysql在关闭一个交互的连接之前所要等待的秒数 interactive_timeout = 1200 #mysql在关闭一个非交互的连接之前所要等待的秒数 wait_timeout = 600 #MySQL读入缓冲区的大小 read_buffer_size = 16M #MySQL的随机读缓冲区大小 read_rnd_buffer_size = 8M #MySQL的顺序读缓冲区大小 sort_buffer_size = 8M #MySQL能暂存的连接数量(根据实际设置)默认数值是50,可调优为128,对系统设置范围为小于512的整数。 back_log=128 #指定索引缓冲区的大小,只对MyISAM表起作用,这里写上也没有关系 key_buffer_size=1024M #这条指令限定用于每个数据库线程的栈大小 thread_stack=256k #线程缓存 thread_cache_size=64 #将查询结果放入查询缓存中 query_cache_type=1 #查询缓存大小 query_cache_size=128M #单个查询能使用的大小 query_cache_limit = 10M #内部内存临时表的最大值,每个线程都要分配 max_heap_table_size=256M #代表在事务过程中容纳二进制日志SQL语句的缓存大小 binlog_cache_size = 2M #同样是缓存表大小 table_open_cache=128 #-------------------- log settting -------------------- log_error = /var/log/mysql/error.log #开启慢查询日志 slow_query_log = 1 #超出次设定值的SQL即被记录到慢查询日志 long_query_time = 6 slow_query_log_file = /var/log/mysql/slow.log #-------------------- replication settting -------------------- #二进制日志 log-bin=master-bin log-bin-index=master-bin.index # sync_binlog=N,使执行N次写入后,与硬盘同步。1是最安全的,但是也是最慢的。 sync_binlog=5 # sync_relay_log=N,使执行N次写入后,与硬盘同步,默认是10000 sync_relay_log=1000 #当slave宕机后,relay-log损坏了,导致一部分中继日志没有处理,则自动放弃所有未执行的relay-log,并且重新从master上获取日志,保证了relay-log的完整性。默认情况下该功能是关闭的,可在slave从库上开启该功能,建议开启。 relay_log_recovery = 1 # 服务器的ID,必须唯一,一般设置自己的IP server_id=master1 #复制过滤:不需要备份的数据库(MySQL库一般不同步) replicate-wild-ignore-table = mysql.% replicate-wild-ignore-table = information\_schema.% replicate-wild-ignore-table = sys.% replicate-wild-ignore-table = performance\_schema.% #值设为整个结构中服务器的总数,所以值为2 auto-increment-increment = 2 #用来设定数据库中自动增长的起点的,每个服务的起点必须得不同,这样才能避免服务器数据同步时出现主键冲突 auto-increment-offset = 1 #slave-skip-errors的作用就是用来定义复制过程中从服务器可以自动跳过的错误号,当复制过程中遇到定义的错误号,就可以自动跳过,直接执行后面的SQL语句,有四个可用值,分别为:off,all,ErorCode,ddl_exist_errors。 #默认情况下该参数值是off,我们可以列出具体的error code,也可以选择all,mysql5.6及MySQL Cluster NDB 7.3以及后续版本增加了参数ddl_exist_errors,该参数包含一系列error slave-skip-errors = ddl_exist_errors #将master.info和relay.info保存在表中 master_info_repository = TABLE relay_log_info_repository = TABLE #设置清除日志时间 expire_logs_days=7 #binlog 日志格式 binlog_format=MIXED #-------------------- innodb setting -------------------- #这个参数在一开始初始化时就要加入my.cnf里,如果已经创建了表,再修改,启动MySQL会报错。最好为8K innodb_page_size = 8K #Innodb最重要的参数,设置成内存的70%-80%。 innodb_buffer_pool_size=8G ##默认值8,或者逻辑CPU数量 innodb_buffer_pool_instances = 8 #日志组中,每个log的大小。结合innodb_buffer_pool_size设置其大小,25%-100%。避免不需要的刷新。一般取256M可以兼顾性能和recovery的速度。 innodb_log_file_size=128M #事务在内存中的缓冲,也就是日志缓冲区的大小,默认设置即可,具有大量事务的可以考虑设置为16M innodb_log_buffer_size = 3M #这个参数控制缓冲区的数据写入到日志文件以及日志文件数据刷新到磁盘的操作时机.在正式环境中建议设置成1。 #设置0时日志缓冲每秒一次被写到日志文件,并且对日志文件做向磁盘刷新的操作,但是在一个事物提交不做任何操作. #设置1时在每个事物提交时,日志缓冲被写到日志文件,并且对日志文件做向磁盘刷新的操作 #设置2时在每个事物提交时,日志缓冲被写到日志文件,但不对日志文件做向磁盘刷新的操作,对日志文件每秒向磁盘做一次刷新操作. innodb_flush_log_at_trx_commit=1 #使每个Innodb的表,有自已独立的表空间。如删除文件后可以回收那部分空间。默认是关闭的,建议打开(innodb_file_per_table=1) innodb_file_per_table=1 #Windows不用设置。linux可以选择:O_DIRECT 直接写入磁盘,禁止系统Cache了 innodb_flush_method=O_DIRECT #这个参数刷新脏页数量和合并插入数量,改善磁盘IO处理能力 innodb_io_capacity=2000 innodb_io_capacity_max=6000 #线程并发数,建议设置为CPU内核数*2,大多数情况下,最佳的值是小于并接近虚拟CPU的个数 innodb_thread_concurrency = 2 [mysqldump] quick max_allowed_packet = 16M [myisamchk] key_buffer_size = 20M sort_buffer_size = 20M read_buffer = 2M write_buffer = 2M [mysqlhotcopy] interactive-timeout