1、设置默认的存储引擎

default-storage-engine = InnoDB

2、InnoDB 为独立表空间模式,每个数据库的每个表都会生成一个数据空间

innodb_file_per_table = 1

独立表空间优点:

  1. 每个表都有自已独立的表空间。

  2. 每个表的数据和索引都会存在自已的表空间中。

  3. 可以实现单表在不同的数据库中移动。

  4. 空间可以回收(除 drop table 操作处,表空不能自已回收)

缺点:

单表增加过大,如超过 100G

共享表空间在 Insert 操作上少有优势。其它都没独立表空间表现好。当启用独立表空间时,请合理调整:innodb_open_files

3、限制 Innodb 能打开的表的数据,如果库里的表特别多的情况,请增加这个。这个值默认是 300

innodb_open_files = 500

4、缓冲池大小

innodb_buffer_pool_size = 64M

InnoDB 使用一个缓冲池来保存索引和原始数据, 不像 MyISAM。默认参数只有 8M,这里设置越大,在存取表里面数据时所需要的磁盘 I/O 越少。在一个独立使用的数据库服务器上,可以设置这个变量到服务器物理内存大小的 80%。不要设置过大,否则,由于物理内存的竞争可能导致操作系统的换页颠簸。

注意在 32 位系统上每个进程可能被限制在 2G-3.5G 用户层面内存限制,所以不要设置的太高。

这个参数在 5.7 之前的版本是没法动态修改,需要重启才能生效。5.7 以及之后的版本可以直接修改参数直接生效。

5、io 线程

innodb_write_io_threads = 4

innodb_read_io_threads = 4

innodb 使用后台线程处理数据页上的读写 I/O(输入输出)请求,根据你的 CPU 核数来更改,默认是 4

注:这两个参数不支持动态改变,需要把该参数加入到 my.cnf 里,修改完后重启 MySQL 服务,允许值的范围从 1-64

6、线程并发限制

innodb_thread_concurrency = 0

默认设置为 0,表示不限制并发数,这里推荐设置为 0,更好去发挥 CPU 多核处理能力,提高并发量

7、回收线程

innodb_purge_threads = 1

InnoDB 中的清除操作是一类定期回收无用数据的操作。在之前的几个版本中,清除操作是主线程的一部分,这意味着运行时它可能会堵塞其它的数据库操作。

从 MySQL5.5.X 版本开始,该操作运行于独立的线程中,并支持更多的并发数。用户可通过设置 innodb_purge_threads 配置参数来选择清除操作是否使用单独线程,默认情况下参数设置为 0(不使用单独线程),设置为 1 时表示使用单独的清除线程。

8、写日志到磁盘

innodb_flush_log_at_trx_commit = 2

0:如果 innodb_flush_log_at_trx_commit 的值为 0,log buffer 每秒就会被刷写日志文件到磁盘,提交事务的时候不做任何操作(执行是由 mysql 的 master thread 线程来执行的。主线程中每秒会将重做日志缓冲写入磁盘的重做日志文件(REDO LOG)中。不论事务是否已经提交)默认的日志文件是 ib_logfile0,ib_logfile1

1:当设为默认值 1 的时候,每次提交事务的时候,都会将 log buffer 刷写到日志。

2:如果设为 2,每次提交事务都会写日志,但并不会执行刷的操作。每秒定时会刷到日志文件。要注意的是,并不能保证 100%每秒一定都会刷到磁盘,这要取决于进程的调度。每次事务提交的时候将数据写入事务日志,而这里的写入仅是调用了文件系统的写入操作,而文件系统是有 缓存的,所以这个写入并不能保证数据已经写入到物理磁盘,默认值 1 是为了保证完整的 ACID。

当然,可以将这个配置项设为 1 以外的值来换取更高的性能,但是在系统崩溃的时候,将会丢失 1 秒的数据。

设为 0 的话,mysqld 进程崩溃的时候,就会丢失最后 1 秒的事务。设为 2,只有在操作系统崩溃或者断电的时候才会丢失最后 1 秒的数据。InnoDB 在做恢复的时候会忽略这个值。设为 1 当然是最安全的,但性能页是最差的(相对其他两个参数而言,但不是不能接受)。如果对数据一致性和完整性要求不高,完全可以设为 2,如果只最求性能,例如高并发写的日志服务器,设为 0 来获得更高性能。

9、日志缓存池大小

innodb_log_buffer_size = 2M

此参数确定些日志文件所用的内存大小,以 M 为单位。缓冲区更大能提高性能,但意外的故障将会丢失数据。MySQL 开发人员建议设置为 1-8M 之间

10、日志文件的大小

innodb_log_file_size = 32M

此参数确定数据日志文件的大小,更大的设置可以提高性能,但也会增加恢复故障数据库所需的时间

11、设置日志文件的个数

innodb_log_files_in_group = 3

为提高性能,MySQL 可以以循环方式将日志文件写到多个文件。推荐设置为 3

12、表空间文件路径

innodb_log_group_home_dir = /data/data/mysql/datas

13、表空间文件

innodb_data_file_path = ibdata1:512M:autoextend

ibdata1 文件的名称;512M 是限制文件的大小;autoextend 之自动扩展

14、缓冲池脏数据比率

innodb_max_dirty_pages_pct = 90

innodb 主线程刷新缓存池中的数据,使脏数据比例小于 90%

15、事务锁定超时时间

innodb_lock_wait_timeout = 120

InnoDB 事务在被回滚之前可以等待一个锁定的超时秒数。InnoDB 在它自己的锁定表中自动检测事务死锁并且回滚事务。InnoDB 用 LOCK TABLES 语句注意到锁定设置。默认值是 50 秒

16、多个缓冲池

可以开启多个内存缓冲池,把需要缓冲的数据 hash 到不同的缓冲池中,这样可以并行的内存读写。

innodb_buffer_pool_instances = 2

17、文件压缩设置

innodb_file_format = Barracuda

innodb_file_format_max = Barracuda

Antelope(羚羊)是 Built-in-InnoDB(MySQL 内置的 InnoDB)支持文件格式的代号,有两种“数据表格式”(row_format):Redundant(冗余)、Compact(紧凑)

Barracuda(梭子鱼)是 InnoDB Plugin 支持的文件格式,在原来的基础上新增了两种数据表格式的支持:Dynamic 和 Compressed

18、写数据和日志文件的方式

innodb_flush_method = O_DIRECT

类 Unix 系统的 innodb_flush_method 选项包括:

    fsync : InnoDB使用fsync()系统调用来刷新数据和日志文件。 fsync是默认设置。

    O_DSYNC : InnoDB使用O_SYNC打开和刷新日志文件,使用fsync()刷新数据文件。 InnoDB不直接使用O_DSYNC ,因为在很多种Unix上都存在问题。

    littlesync :此选项用于内部性能测试,目前不受支持。 使用风险由您自己承担。

    nosync :此选项用于内部性能测试,目前不受支持。 使用风险由您自己承担。

    O_DIRECT : InnoDB使用O_DIRECT (或Solaris上的directio() )打开数据文件,并使用fsync()刷新数据和日志文件。 某些GNU / Linux版本,FreeBSD和Solaris上提供了此选项。

Windows 系统的 innodb_flush_method 选项包括:

    async_unbuffered : InnoDB使用Windows异步I / O和非缓冲I / O. async_unbuffered是Windows系统上的默认设置。

    async_unbuffered不支持在Windows上的4K扇区硬盘驱动器上运行MySQL服务器。 解决方法是使用innodb_flush_method=normal 。

    normal : InnoDB使用模拟异步I / O和缓冲I / O. 此选项用于内部性能测试,目前不受支持。 使用风险由您自己承担。

    unbuffered : InnoDB使用模拟异步I / O和非缓冲I / O. 此选项用于内部性能测试,目前不受支持。 使用风险由您自己承担。