MySQL有一个重要的配置文件,通常这个配置文件的名称是 my.cnf ,这个配置文件和binlog开启所产生的文件是唯二重要的两个文件。
有的时候,你的数据库能不能正常的工作,能不能稳定的工作其实就看你的主配置文件 my.cnf 这个文件是怎么写的了。而binglog文件是锦上添花的文件,比如,你需要扩展MySQL数据库成为主从复制集群,或者需要定点恢复,在本文,binlog就不予讨论了。
首先,我们应该了解到的一件事情就是,MySQL数据库和nginx一样的,也是可以有多个配置文件的,但,配置文件也分主从,主配置文件就是my.cnf,从配置文件通常放在MySQL的安装目录下的 conf.d 目录下,从配置文件的作用主要就是避免主配置文件过于臃肿,从而不好管理MySQL而已啦,但,MySQL启动的时候首先是读取的my.cnf 这个文件,然后在读取 conf.d 目录下的配置文件,说人话,主配置文件如果有配置和从配置文件冲突,那么,会以主配置文件为主的哦。
那么,这就让很多人纠结了,MySQL的配置文件到底应该怎样写呢?我是应该只写一个主配置文件吗?这个主配置文件my.cnf 能对这个MySQL数据库干什么呢?
A:
一个docker启动的MySQL所应该使用的my.cnf文件示例:
以上的配置文件里#basedir = /var/lib/mysql #datadir = /var/lib/mysql #socket=/var/lib/mysql/mysql.sock 这几个选项是不需要的,是被注释的,为什么呢?因为docker里如果用到这几个选项会造成许多不必要的麻烦,比如,远程连接的时候报未知错误,或者报找不到socket文件。
B,慢查询是否应该开启的问题
仍然以上面的配置文件为例,慢查询其实是不应该放在配置文件里的,如果业务是比较繁忙的话,因为慢查询会拖慢MySQL的运行效率。慢查询的选项是如下:
其中,long_query_time=1 表示SQL语句执行时间超过1秒即记录到慢查询日志内,slow-query-log-file=/var/lib/mysql/slow.log是慢查询日志存放路径。
那么,什么时候应该开启慢查询呢?当然是项目刚开始的调试阶段啦,或者项目在运行一段时间后,发现有SQL语句执行缓慢的情况下,开启慢查询,查找问题啦。
C,binlog日志是否应该开启的问题
binlog日志当然需要开启啦,关键的时候可以救你一命。毕竟所有的 DDL
和 DML
语句都在这个十分重要的日志内,恢复和复制都靠这个日志文件呢
再次强调,一般是使用混合模式的,其余两个模式是ROW和STATEMENT,到底使用哪个,其实很多时候也是需要根据实际的情况来区分,但,mixed模式是可以适配大部分情况的。
D,编码的问题
其实编码问题可以理解为本地化问题,毕竟,不管MySQL用于什么项目,至少在国内都是使用中文的,而utf8mb4是支持中文较好的,并且支持表情。init_connect=’SET NAMES utf8mb4’这个选项对应的是character_set_client、character_set_connection、 character_set_results。
skip-character-set-client-handshake = true 强制客户端和服务端编码一致,除非客户端自己指定。
E,
绑定ip和端口
bind-address = 0.0.0.0 和port=3306 是在mysqld这个标签下的选项,默认MySQL是绑定127.0.0.1(也就是如果不写这个,MySQL会认为绑定的是127.0.0.1) ,而这样的绑定注定不能远程连接的哦,因此,要么放开全部连接,也就是bind-address = 0.0.0.0这样的形式,要么,指定MySQL所在机器的ip。
而port选项是可以增强MySQL的安全的,毕竟地球人都知道MySQL的默认端口是3306,改成一个自定义的端口,然后将服务放出来还是会提高一定的安全性的。
总结:
有些MySQL的问题其实是从MySQL启动就开始发生的,而我们通过MySQL的主配置文件,提早的自定义的定制我们自己的MySQL将会减少很多问题的发生。
并且,像编码这些问题,在MySQL启动的时候就设定好,可能就不会出现乱码这样的世纪难题啦。