MySQL服务器配置问题

本文介绍了MySQL服务器的SQL MODE配置,包括配置方式、常用的SQL MODE以及动态参数的设置。重点讲解了如何通过set命令配置持久化的SQL MODE,并提到了8.0版本的新特性。此外,还提及了使用percona公司的pt-config-diff工具来比较配置文件,但指出该工具目前不支持8.0版本。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SQL MODE

配置MySQL处理SQL的方式

配置方式

//方法1 命令设置
set [session/global/persist] sql_mode='xxxxxx';
//方法2 修改配置文件my.cnf后重启
[mysqld] sql_mode=xxxxxx

常用的SQL MODE

SQL MODE说明
ANSI包含以下四项。
ONLY_FULL_GROUP_BY对于GROUP BY聚合操作,如果出现在SELECT中的列、HAVING或者ORDER BY子句的非聚合列,没有在GROUP BY 中出现,那么这个SQL语法检测报错。
ANSI_QUOTES禁止用双引号来引用字符串。
REAL_AS_FLOATREAL作为FLOAT的同义词。
PIPES_AS_CONCAT将双竖线视为字符串的连接操作而非 或 运算符。
TRADITIONAL包含以下六项。5.6中已为默认。
NO_AUTO_CREATE_USERGRANT语句执行时若账户不存在也不自动创建账户。仅在5.6和5.7中有用,8.0的GRANT语句已经无自动创建账户的功能。
ERROR_FOR_DIVISION_BY_ZERO0做除数时,如果未设置此模式,结果为NULL,无警告;如果设置了此模式,结果仍然为NULL,但会产生警告。
STRICT_TRANS_TABLES / STRICT_ALL_TABLES在事务存储引擎表/所有存储引擎表上启用严格模式。严格模式下,如果SQL类型不匹配、数字超出范围将会检测报错,而不是自动转换(如将字符串转换为0,将过大的数字转为范围边界数值)并仅仅产生警告。
NO_ENGINE_SUBSTITUTION在严格模式,当指定的存储引擎不可用时报错。在非严格模式,当指定的存储引擎不可用时替换默认存储引擎,但会产生警告。5.8中已为默认。
NO_ZERO_DATE在严格模式,不接受 '0000-00-00’做为合法日期。在非严格模式,可以接受该日期,但会产生警告。
NO_ZERO_IN_DATE在严格模式,不接受月或日部分为0的日期。在非严格模式,可以接受该日期,但会产生警告。

配置参数

配置动态参数

使用set命令

//1 会话级别
set [session | @@session.] system_var_name=expr;
//2 全局级别
set [global | @@global.] system_var_name=expr;
//3 全局持久化级别
set [persist | @@global.] system_var_name=expr;

注意: persist是8.0后新加的,效果如同global,且重启后仍然生效。机制为将配置更改写入到data下的mysqld.auto.conf文件中,启动时先读区conf下的my.conf,最后读取mysqld.auto.conf,后面的配置将覆盖前面已有的配置。如果是8.0之前的版本,在set global的同时,需要手动修改my.conf。

比较配置文件

使用percona公司提供的工具pt-config-diff
pt-config-diff u=root,p=,h=localhost /etc/my.conf
注意: 目前还不支持8.0版本。

常用的配置参数

服务器配置参数

参数说明
max_connections设置MySQL允许访问的最大连接数量。不要太大,防止内存溢出。
interactive_timeout设置交互连接sleep的timeout时间。
wait_timeout设置非交互连接sleep的timeout时间。
max_allowed_packet控制MySQL可以接收的数据包的大小。主从服务器一定要保持一致。
sync_binlog表示每写多少次缓存,会向磁盘同步一次binlog。主服务器建议设置1。
sort_buffer_size设置每个会话使用的排序缓冲区大小。用到排序时才分配,分配一步到位。不能设置过大,需要考虑这是会话级别。
join_buffer_size设置每个会话使用的连接缓冲区大小。多连一个表就多分配同等大小一块。不能设置过大,需要考虑这是会话级别。
read_buffer_size设置每个会话当对一个MyISAM进行表扫描时使用的读缓存区大小。注意:InnoDB查询中建立的临时表默认就是MyISAM的表,所以也可能影响InnoDB表查询。不能设置过大,需要考虑这是会话级别。
read_rnd_buffer_size设置每个会话使用的索引缓冲区的大小。用到索引时才按需分配大小。不能设置过大,需要考虑这是会话级别。
binlog_cache_size设置每个会话使用的缓存未提交的事务的缓存区大小。不能设置过大,需要考虑这是会话级别。

存储引擎配置参数

参数说明
innodb_flush_log_at_trx_commit0:每秒进行一次redo log的磁盘刷新操作。1:每次事务提交进行一次redo log的磁盘刷新操作。2:每次事务提交写入系统缓存,每秒进行一次redo log的磁盘刷新操作。默认为1。
innodb_buffer_pool_size设置Innodb缓存池的大小,建议为服务器内存的75%。
innodb_buffer_pool_instancesInnodb缓冲池实例个数,每个实例的大小为innodb_buffer_pool_size/innodb_buffer_pool_instances。目的是减少并发冲突,建议单个大小1G~8G。
innodb_file_per_table设置每个表独立使用一个表空间。5.7中已为默认。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值