MySQL的一些配置

说明

版本:MySQL 5.7.22

以下参数都是在 my.cnf 中的[mysqld]节下配置的

正文

server-id

作用

1、 mysql的同步的数据中是包含server-id的,用于标识该语句最初是从哪个server写入的,所以server-id一定要有的

2、 每一个同步中的slave在master上都对应一个master线程,该线程就是通过slave的server-id来标识的;每个slave在master端最多有一个master线程,如果两个slave的server-id 相同,则后一个连接成功时,前一个将被踢掉。 这里至少有这么一种考虑:

​ slave主动连接master之后,如果slave上面执行了slave stop;则连接断开,但是master上对应的线程并没有退出;当slave start之后,master不能再创建一个线程而保留原来的线程,那样同步就可能有问题;

3、 在mysql做主主同步时,多个主需要构成一个环状,但是同步的时候有要保证一条数据不会陷入死循环,这里就是靠server-id来实现的

值的设定

通常使用IP+PORT来算出一个server-id

或者使用date + time也是OK的

log-bin

作用

开启二进制日志记录(据说有1%性能损耗)

二进制日志包括两类文件:二进制日志索引文件(文件名后缀为.index)用于记录所有的二进制文件,二进制日志文件(文件名后缀为.00000*)记录数据库所有的DDL和DML(除了数据查询语句)语句事件。

应用
  • MySQL Replication在Master端开启binlog,Master把它的二进制日志传递给slaves来达到master-slave数据一致。

  • 通过使用mysqlbinlog工具来使恢复数据

注意一定需要先指定server-id

1
log-bin=mysql-bin

其中值mysql-bin是日志的基本名或前缀名

查看日志路径:

1
mysql> SHOW VARIABLES LIKE 'log_%';

lower_case_table_names

对于大小写的设置

lower_case_table_names=0

表名和数据库名在磁盘中按照CREATE TABLECREATE DATABASE语句指定的大小写存储所有操作都严格区分大小写。不应该在不区分大小写的文件系统上将此变量设为0。如果在不区分大小写的文件系统中强行改为0可能会发生找不到表的现象。

lower_case_table_names=1

表名在磁盘上以小写来存储,名称比较的时候不区分大小写。在存储和查找的过程中MySQL会转换所有的表名数据库名表别名变成小写。

lower_case_table_names=2

表名和数据库名在磁盘中按照CREATE TABLECREATE DATABASE语句指定的大小写存储。但是MySQL会在执行查询的时候进行转换从而不区分大小写。这个选项只在不区分大小写的文件系统上有效。InnoDB的表名会全部用小写替代。

默认值
OS 默认值 备注
Linux/Unix 0 区分大小写
Windows 1 不区分大小写
MacOS 2 是Unix但是采用了HFS/APFS文件系统

character_set

character_set_database

当前所在的数据库字符集。如果没有切换到其他数据库,则character_set_database的和character_set_server一致。

character_set_filesystem

把os上文件名转化成指定字符集,即把 character_set_client转换character_set_filesystem,默认binary是不做任何转换的

character_set_system

服务器用来保存识别符的字符集。该值一定是utf8。

character_sets_dir

字符集安装目录

character_set_client / connection / results

character_set_clientcharacter_set_connectioncharacter_set_results这3个参数值是由客户端每次连接进来设置的,和服务器端没关系。