[client]
port=3306
socket=/tmp/mysql.sock
  
[mysql]
default-character-set=utf8mb4
  
[mysqld]
basedir=
datadir=
user=mysql
character-set-server=utf8mb4
explicit_defaults_for_timestamp=true

#索引和数据缓冲区大小,一般设置物理内存的60%-70%   
innodb_buffer_pool_size = 1G
#缓冲池实例个数,推荐设置4个或8个,如果innodb_buffer_pool_size很大的
时候,设置为1个
innodb_buffer_pool_instances = 4
#关键参数,0代表大约每秒写入到日志并同步到磁盘,数据库故障会丢失1秒左
右事务数据。
1为每执行一条SQL后写入到日志并同步到磁盘,I/ O开销大,执行完SQL要等
待日志读写,效率低。
2代表只把日志写入到系统缓存区,再每秒同步到磁盘,效率很高,如果服务器
故障,才会丢失事务数据。对数据安全性要求不是很高的推荐设置2,性能高,
修改后效果明显。
innodb_flush_log_at_trx_commit = 2
#默认是共享表空间,共享表空间idbdata文件不断增大,影响一定的I/O性
能。推荐开启独立表空间模式,每个表的索引和数据都存在自己独立的表空间
中,可以实现单表在不同数据库中移动。
innodb_file_per_table = ON
#日志缓冲区大小,由于日志最长每秒钟刷新一次,所以一般不用超过16M
innodb_log_buffer_size = 8M
expire_logs_days=7
datadir=/data/mysql
socket=/tmp/mysql.sock
# 禁止MySQL对外部 连接进行DNS解析
skip-name-resolve
# Disabling symbolic-links is recommended to prevent assorted security
risks
symbolic-links=0
# Recommended in standard MySQL setup
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid


如何计算合适的 innodb_log_file_size 大小

合适的 innodb_log_file 应该可以容纳高峰期一个小时的log

1,查询1分钟内产生的 sequence 起始

mysql> pager grep sequence
mysql> show engine innodb status\G select sleep(60); show engine innodb status\G
Log sequence number 84 3836410803
1 row in set (0.06 sec)
1 row in set (1 min 0.00 sec)
Log sequence number 84 3838334638
1 row in set (0.05 sec)

2,计算1分钟产生的log 大小

mysql> select (3838334638 - 3836410803) / 1024 / 1024 as MB_per_min;
+------------+
| MB_per_min |
+------------+
| 1.83471203 |
+------------+

1.83 * 60 ≈ 110M,可以使用 128M 的 log file

查看有几个innodb log file, 'innodb_log_files_in_group'

mysql> select @@innodb_log_files_in_group
-> ;
+-----------------------------+
| @@innodb_log_files_in_group |
+-----------------------------+
| 2 |

每个 innodb_log_file_size 可以设置为128M/2=64M