基础款my.cnf文件需要有哪些配置

基础款就是比default的cnf高一级的版本。更高级的我认为还有豪华版和至尊版。

default版(dev自学)-> 基础款 (可用在生产环境)-> 豪华版 ( 大公司的生产环境 ) -> 至尊版 ( 我都想不到的环境 )

我在CentOS7中用的MySQL5.7.23。先看一下配置文件mysqld --verbose --help | less可以找到下面一段话

Default options are read from the following files in the given order: /etc/my.cnf /etc/mysql/my.cnf /usr/etc/my.cnf ~/.my.cnf

除了/etc/my.cnf等配置文件,还可以在配置文件中使用!include /home/mydir/myopt.cnf!includedir /home/mydir的方式加载其他cnf配置信息,但是文件必须要以cnf结尾。

Any files to be found and included using the !includedir directive on Unix operating systems must have file names ending in .cnf. On Windows, this directive checks for files with the .ini or .cnf extension.

打开/etc/my.cnf文件可以看到这个版本的MySQL default的配置少的很。没关系,我们正好可以系统的自己理一下基础款需要那些配置以及它们的分类。

漫长的Google Search + 看博客 + 分析筛选 + 总结的时间 – 画外音

我们(哪里来的们)给出下面一个基础款的说明。完整文件可以在这里下载。在MySQL 5.7.18之前安装包中有几个针对不同场景的配置文件,在参考来源2中可以找到。

客户端配置

这部分主要是客户端连接时的选项option,如端口、user、password等。user和password设置后下次在使用mysqlcheck、mysqldump命令的时候可以为 -u 和 -p 提供默认值。

mysqldump配置

mysqldump在将结果集写入文件前会把所有结果集缓存在内存中。当dump的文件很大时就需要配置quick选项。我查看了一下这个版本的mysqldump的help,其中写着在这个版本中–quick默认是开启的,如果不想使用可–skip-quick。所以配置文件中写不写还需要你安装的版本。我们就留着。

mysqldump --help中可以看到max-allowed-packet的默认值25M。这个值调大一点mysqldump的速度会快。max_allowed_packet这个设置在mysqldump和mysqld中都有。网上都强调一点就是mysqldump的max_allowed_packet不能大于mysqld的max_allowed_packet。# 这个我还没有测试过

mysql配置

这个也是关于用户的配置。和client不同的是它只是在你使用mysql命令的时候生效的配置。而client还可以是mysqldump等。

mysqld_safe配置

mysql服务器配置

  • 设置了默认的engine、character、collate
  • 设置了一些限制和缓存
  • 设置了general_log、error_log
  • 开启了慢查询设置了slow_log
  • 设置bin_log - 用于主从同步、备份以及恢复
  • 【选择性的】设置主从同步
  • 【选择性的】设置MyISAM、InnoDB引擎
  • 【不同场景的】

重点说一下我觉得不好理解的点:

  • back_log 这个参数在并发很多连接到MySQL时需要等待。这里指等待队列最大可以的长度。当遇到很多Connection Refused的时候可以考虑加大这个值。我看了我虚拟机里面操作系统的/proc/sys/net/ipv4/tcp_max_syn_backlog为128。

  • query cache 设置的时候如果tables经常变化或者检索的query很不多。query cache可能不会使效率提高反而会slowdown。

  • 关于MyISAM引擎和InnoDB引擎。之前我只知道InnoDB的好,现在我觉得可能有些表好比社区的帖子表应该用MyISAM。# 但是我没有用同样的数据比较两种引擎的差距有多大。MyISAM快、没有事务、外键、行锁,用于读多写少。InnoDB效率没有那么高、有事务、外键、行锁,但是你where写的不合适行锁也会变表锁,我觉得用于必须要事务这些场景,好比和钱账户有关的。

  • myisam_recover_options 之前我在网上找的都是myisam_recover但是在从5.5开始的官方文旦中应该参数改名字了。

  • binlog 会被用于主从同步。所以binlog清除的时候要小心。还有主从同步时候的设置。

  • 在bin log部分,我也是按照网上找到的设置了一个sql_log_bin,但是在官方文档中说这个是不能modified,在后面版本中也会被去掉。删掉了必然都启动不起来哦。

  • innodb_support_xa 在事务提交COMMIT后,MySQL会先将事务写入到binlog中,如果这时出现故障,重启后事务回滚二binlog数据依旧,这就会有数据不一致问题。

  • innodb_file_per_table 开启时为每张表的数据单独放一个.ibd文件,关闭时所有表共享这样就会有一个很大的文件。

  • innodb_buffer_pool_size 这个值设置的越大,能保证你在大多数的读取操作时使用的是内存而不是硬盘。在独立部署MySQL的机器上建议使用物理内存的80%。

  • innodb_data_file_path 这个参数很复杂哦 path-to-datafile:size-allocation[:autoextend[:max-size-allocation]]。如果不指定另外一个innodb_data_home_dir那就用datadir,size-allocation是指在创建一个文件时候初始化大小,autoextend是文件达到size-allocation后每次分配多大,这个值由innodb_autoextend_increment变量指定,5.6.6后面系统里面是64M,之前是8M。不改也行,但是总该巨额autoextend应该比size-allocation小一点,所以我把这个该到了8M。


参考来源:

  1. MYSQL AND MARIADB CONFIGURATION FILE TEMPLATE - FROM FROMDUAL
  2. MySQL 5.5.38 example conf file - FROM GITHUB

注1:很多配置的默认值可以使用mysql –help、mysqldump –help和用`show variables like ‘%xxx%‘来查看。