引言
在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]
port
:MySQL
客户端连接服务器端时使用的端口号,默认为3306
socket
:套接字文件所在目录
- 客户端应用参数
[mysqldump]
:quick
:支持较大的数据库转储,导出非常巨大的表时需要此项max_allowed_packet
:服务所能处理的请求包的最大大小以及服务所能处理的最大的请求大小(当与大的BLOB
字段一起工作时相当必要),每个连接独立的大小,大小动态增加。
注意:只有 MySQL
附带的客户端应用程序保证可以读取这段内容。如果想要自己的 MySQL
应用程序获取这些值,需要在 MySQL
客户端库初始化的时候指定这些选项。
- 服务端设置参数
[mysqld]
:port
:MySQL
监听端口character-set-server
:数据库默认字符集,主流字符集支持一些特殊表情符号(特殊表情符占用 4 个字节),数据库级别collation-server
:数据库字符集对应一些排序等规则,注意要和character-set-server
对应init_connect
:设置client
连接mysql
时的字符集,防止乱码basedir
:根目录 或者是 安装目录datadir
:数据文件存放的目录socket
:MySQL
客户端程序和服务器之间的本地通讯指定一个套接字文件log-error
:该选项指定mysqld
保存错误日志文件的位置。没有开启,可以使用``–log-error[=file_name]` 选项来开启 mysql 错误日志pid-file
:pid
文件所在目录lower_case_table_names
:是否对 sql 语句大小写敏感,1 表示不敏感key_buffer_size
:用于指定索引缓冲区的大小max_allowed_packet
:设置一次消息传输的最大值,参数限制,导致写入或者更新失败no-auto-rehash
:仅仅允许使用键值的 UPDATES 和 DELETESsql_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
在关闭一个非交互的连接之前所要等待的秒数user
:MySQL
启动用户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-address
:MySQL
绑定IPskip-slave-start
:了安全起见,复制环境的数据库还是设置--skip-slave-start
参数,防止复制随着mysql
启动而自动启动slave_net_timeout
:MySQL主从复制Master
和Slave
之间的网络中断,但是Master
和Slave
无法察觉的情况下(比如防火墙或者路由问题)- Slave会等待slave_net_timeout设置的秒数后,才能认为网络出现故障,然后才会重连并且追赶这段时间主库的数据。
thread_stack
:线程缓存;主要用来存放每一个线程自身的标识信息,如线程id,线程运行时基本信息等等,我们可以通过 thread_stack 参数来设置为每一个线程栈分配多大的内存sort_buffer_size
:- MySQL执行排序使用的缓冲大小。如果想要增加
ORDER BY
的速度,首先看是否可以让MySQL
使用索引而不是额外的排序阶段,如果不能,可以尝试增加sort_buffer_size
变量的大小
- MySQL执行排序使用的缓冲大小。如果想要增加
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';