mysql配置文件my.ini优化大全:日志、字符集等设置
作者:壹粒麦子
想知道mysql怎么开启sql日志和慢查询日志吗?本文详细介绍开启方法、慢SQL参数设置,以及关闭表名大小写敏感、设置客户端字符集等实用技巧,附完整my.ini配置示例,帮你轻松优化数据库性能
一.启用sql日志
查看是否开启sql日志
SHOW VARIABLES LIKE "general_log%"; -- 查询是否启用日志 NO是开启的状态,OFF是关闭的状态
方式一
以上设置重启mysql后失效
SET GLOBAL general_log = 'ON'; -- 设置启用 SET GLOBAL sql_log_off = 'OFF'; -- 设置关闭 SET GLOBAL general_log_file = '/var/lib/mysql/mysql.log'; -- 指定日志文件
方式二
# /etc/my.cnf须在[mysqld] 里 # 查询日志,开启对所有执行语句进行记录 general_log=on # 查询日志,存放位置 general_log_file=D:\mysql-5.7.33-winx64\log\query.log # 查询日志,文件中的时间显示已系统时间为准 log_timestamps = SYSTEM
二.慢日志
0.查看慢日志是否开启
-- 查询是否开启慢日志 OFF为关闭状态,NO为开启状态 show variables like 'slow_query%'; -- 查看慢sql设置时间 show variables like '%long_query_time%';
1.开启慢日志
方式一
-- 查询是否开启慢日志 OFF为关闭状态,NO为开启状态 show variables like 'slow_query%'; -- 通过以下命令开启慢日志: -- 开启慢日志 set global slow_query_log='ON'; -- 设置慢日志存放的位置 set global slow_query_log_file='D:\mysql-5.7.33-winx64\data\LAPTOP-JD2V280H-slow.log'; -- 会记录没有使用索引的查询sql,但前提是必须开启 slow_query_log='ON' set global log-queries-not-using-indexes = 'ON'; -- 设置日志超过10秒就记录慢日志 set global long_query_time=10;
方式二
# /etc/my.cnf须在[mysqld] 里 [mysqld] slow_query_log = ON slow_query_log_file = /home/local/mysql/data/slow.log log-queries-not-using-indexes = on long_query_time = 10
2.慢SQL参数
Time Id Command Argument # Time: 2022-03-21T09:13:39.037729Z # User@Host: skip-grants user[root] @ localhost [::1] Id: 520 # Query_time: 13.975245 Lock_time: 0.000091 Rows_sent: 766373 Rows_examined: 766373 use homepensioncloud; SET timestamp=1647854019; SELECT * from sys_user;
time: 记录日志的时间 User@Host: 执行的用户及主机 Query_time: 执行的时间 Lock_time: 锁表时间 Rows_sent: 发送给请求放的记录数,结果数量 Rows_examined: 语句扫描的记录条数 SET timestamp: 语句执行的时间点 select……: 执行的具体的SQL语句
三.扩展
1.关闭表名大小写敏感
-- 查看是否开启表明大小写敏感 show global variables like '%lower_case%';
设置
# /etc/my.cnf须在[mysqld]节点下,加入一行: (1是先把表名转换为小写,在执行) lower_case_table_names=1
2.设置mysql客户端默认字符集
# /etc/my.cnf 在[mysql] 节点 设置mysql客户端默认字符集 [mysql] default-character-set=utf8
3.MySQL其他设置
# /etc/my.cnf须在[mysqld]节点下 [mysqld] #跳过密码认证 skip-grant-tables #设置3306端口 port = 3306 server-id = 33123 # 设置mysql的安装目录 basedir=D:\mysql-5.7.33-winx64 # 设置mysql数据库的数据的存放目录 datadir=D:\mysql-5.7.33-winx64\data # 允许最大连接数 max_connections=200 # 服务端使用的字符集默认为8比特编码的latin1字符集 character-set-server=utf8 # 创建新表时将使用的默认存储引擎 default-storage-engine=INNODB # 必须加到[mysqld]下面 select @@GLOBAL.sql_mode; -- only_full_group_by sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
四.我的my.ini配置
[mysqld] #跳过密码认证 skip-grant-tables #设置3306端口 port = 3306 server-id = 33123 # 设置mysql的安装目录 basedir=D:\mysql-5.7.33-winx64 # 设置mysql数据库的数据的存放目录 datadir=D:\mysql-5.7.33-winx64\data # 允许最大连接数 max_connections=200 # 服务端使用的字符集默认为8比特编码的latin1字符集 character-set-server=utf8 # 创建新表时将使用的默认存储引擎 default-storage-engine=INNODB # 必须加到[mysqld]下面 select @@GLOBAL.sql_mode; -- only_full_group_by sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION ## 开启慢sql # 开启慢sql slow_query_log=ON # 慢sql存的文职 slow_query_log_file=D:\mysql-5.7.33-winx64\log\log\slow.log # 会记录没有使用索引的查询sql,但前提是必须开启 slow_query_log='ON' log-queries-not-using-indexes =on # 超过10秒则属于慢SQL,慢查询时间,这里为10秒,超过10秒会被记录 long_query_time=10 ## 启用sql日志 # 查询日志,开启对所有执行语句进行记录 general_log=on # 查询日志,存放位置 general_log_file=D:\mysql-5.7.33-winx64\log\query.log # 查询日志,文件中的时间显示已系统时间为准 log_timestamps = SYSTEM # mysql表名大小写敏感 1是先把表名装维小写,在执行 lower_case_table_names=1 # 设置时区为东八区 show variables like '%time_zone%'; default-time-zone = '+8:00' [mysql] # 设置mysql客户端默认字符集 default-character-set=utf8
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
