【MySQL基础】4- MySQL配置文件 my.cnf

引言

windows系统上安装MySQL,其配置文件:my.ini

而在Linux操作系统上的MySQL,它的配置文件为:my.cnf,一般它的路径为/etc/my.cnf 或者/etc/mysql/my.cnf

配置文件

文件内容如下:

[client]
port = 3306
socket = /tmp/mysql.sock
default-character-set = utf8mb4

[mysqldump]
quick
max_allowed_packet = 16M

[mysqld]
port = 3306
character_set_server=utf8
init_connect='SET NAMES utf8'
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data/mysql
socket=/tmp/mysql.sock
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
#不区分大小写
lower_case_table_names = 1

sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

max_connections=5000
max-user-connections = 0 
wait_timeout = 86400 

default-time_zone = '+8:00'

#添加密码验证插件
plugin-load-add=validate_password.so

#服务器在启动时加载插件,并防止在服务器运行时删除插件
validate-password=FORCE_PLUS_PERMANENT

说明:

  • 客户端应用参数:[client]
    • portMySQL 客户端连接服务器端时使用的端口号,默认为 3306
    • socket:套接字文件所在目录
  • 客户端应用参数 [mysqldump]
    • quick:支持较大的数据库转储,导出非常巨大的表时需要此项
    • max_allowed_packet:服务所能处理的请求包的最大大小以及服务所能处理的最大的请求大小(当与大的BLOB字段一起工作时相当必要),每个连接独立的大小,大小动态增加。

注意:只有 MySQL 附带的客户端应用程序保证可以读取这段内容。如果想要自己的 MySQL 应用程序获取这些值,需要在 MySQL 客户端库初始化的时候指定这些选项。

  • 服务端设置参数[mysqld]
    • portMySQL监听端口
    • character-set-server:数据库默认字符集,主流字符集支持一些特殊表情符号(特殊表情符占用 4 个字节),数据库级别
    • collation-server:数据库字符集对应一些排序等规则,注意要和 character-set-server 对应
    • init_connect:设置 client 连接 mysql 时的字符集,防止乱码
    • basedir:根目录 或者是 安装目录
    • datadir:数据文件存放的目录
    • socketMySQL客户端程序和服务器之间的本地通讯指定一个套接字文件
    • log-error:该选项指定 mysqld 保存错误日志文件的位置。没有开启,可以使用``–log-error[=file_name]` 选项来开启 mysql 错误日志
    • pid-filepid文件所在目录
    • lower_case_table_names:是否对 sql 语句大小写敏感,1 表示不敏感
    • key_buffer_size:用于指定索引缓冲区的大小
    • max_allowed_packet:设置一次消息传输的最大值,参数限制,导致写入或者更新失败
    • no-auto-rehash:仅仅允许使用键值的 UPDATES 和 DELETES
    • sql_mode:表示 SQL 模式的参数,通过这个参数可以设置检验 SQL 语句的严格程度
    • max_connections
      • MySQL无论如何都会保留一个用于管理员(SUPER)登陆的连接,用于管理员连接数据库进行维护操作,即使当前连接数已经达到了max_connections
      • 因此MySQL的实际最大可连接数为max_connections+1
      • 这个参数实际起作用的最大值(实际最大可连接数)为16384,即该参数最大值不能超过16384,即使超过也以16384为准;
      • 增加max_connections参数的值,不会占用太多系统资源。系统资源(CPU、内存)的占用主要取决于查询的密度、效率等;
      • 该参数设置过小的最明显特征是出现Too many connections错误;
    • default-time_zone
    • max-user-connections:来限制用户资源的,0不限制;对整个服务器的用户限制
    • wait_timeout:指的是MySQL在关闭一个非交互的连接之前所要等待的秒数
    • userMySQL启动用户
    • log_bin_trust_function_creators
    • ft_min_word_len:开启全文索引
    • explicit_defaults_for_timestamp:明确时间戳默认null方式
    • event_scheduler:计划任务(事件调度器)
    • skip-external-locking:跳过外部锁定;External-locking用于多进程条件下为MyISAM数据表进行锁定
    • skip-name-resolve:跳过客户端域名解析;当新的客户连接mysqld时,mysqld创建一个新的线程来处理请求。该线程先检查是否主机名在主机名缓存中。如果不在,线程试图解析主机名。
    • bind-addressMySQL绑定IP
    • skip-slave-start:了安全起见,复制环境的数据库还是设置--skip-slave-start参数,防止复制随着mysql启动而自动启动
    • slave_net_timeout:MySQL主从复制
      • MasterSlave之间的网络中断,但是MasterSlave无法察觉的情况下(比如防火墙或者路由问题)
      • Slave会等待slave_net_timeout设置的秒数后,才能认为网络出现故障,然后才会重连并且追赶这段时间主库的数据。
    • thread_stack:线程缓存;主要用来存放每一个线程自身的标识信息,如线程id,线程运行时基本信息等等,我们可以通过 thread_stack 参数来设置为每一个线程栈分配多大的内存
    • sort_buffer_size
      • MySQL执行排序使用的缓冲大小。如果想要增加ORDER BY的速度,首先看是否可以让MySQL使用索引而不是额外的排序阶段,如果不能,可以尝试增加sort_buffer_size变量的大小
    • read_buffer_size
      • MySQL读入缓冲区大小。对表进行顺序扫描的请求将分配一个读入缓冲区,MySQL会为它分配一段内存缓冲区。read_buffer_size变量控制这一缓冲区的大小;如果对表的顺序扫描请求非常频繁,并且你认为频繁扫描进行得太慢,可以通过增加该变量值以及内存缓冲区大小提高其性能
    • join_buffer_size
      • 应用程序经常会出现一些两表(或多表)Join的操作需求,MySQL在完成某些Join 需求的时候(all/index join),为了减少参与Join的“被驱动表”的取次数以提高性能,需要使用到 Join Buffer 来协助完成 Join操作。当Join Buffer 太小,MySQL 不会将该Buffer存入磁盘文件,而是先将Join Buffer中的结果集与需要Join的表进行Join 操作,然后清空 Join Buffer 中的数据,继续将剩余的结果集写入此 Buffer中,如此往复。这势必会造成被驱动表需要被多次读取,成倍增加IO 访问,降低效率
    • read_rnd_buffer_size
      • MySQL的随机读缓冲区大小。当按任意顺序读取行时(例如,按照排序顺序),将分配一个随机读缓存区。进行排序查询时,MySQL会首先扫描一遍该缓冲,以避免磁盘搜索
      • 提高查询速度,如果需要排序大量数据,可适当调高该值。但MySQL会为每个客户连接发放该缓冲空间,所以应尽量适当设置该值,以避免内存开销过大
    • default-time_zone:修改时区
    • plugin-load-add :添加密码验证插件
    • validate-password:服务器在启动时加载插件,并防止在服务器运行时删除插件

小技巧

1.0 修改密码

假设我要将数据库的密码修改成123456,由于你设置的密码过于简单了,将会被提示密码不符合要求,比如:

ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

解决方案:

修改配置文件my.cnf

[mysqld]
plugin-load-add=validate_password.so
validate-password=FORCE_PLUS_PERMANENT

保存退出 …

重启mysql服务 …

# 进入mysql的交互
/usr/local/mysql/bin/mysql -uroot -p
# 修改validate_password_policy参数的值
mysql> set global validate_password_policy=0;

# validate_password_length(密码长度)参数默认为8,我们修改为1
mysql> set global validate_password_length=1;
# 接下来就可以修改成简单的密码了
mysql> alter user 'root'@'localhost' identified by '123456';

你可能感兴趣的