从 conf 文件中覆盖 MySQL 变量

从 conf 文件中覆盖 MySQL 变量

我尝试覆盖变量optimizer_switch并更改rowid_filter=onrowid_filter=off

官方文档没有提供示例。

尝试#1:

/etc/mysql/mariadb.conf.d/70-optimizer.cnf
[GLOBAL]
optimizer_switch='rowid_filter=off'

重启服务:

sudo service mariadb restart
sudo service mysql restart

尝试#2:

与#1相同,但我将文件移到了这里/etc/mysql/conf.d/70-optimizer.cnf


我通过登录 mysql 并执行进行了检查SHOW VARIABLES LIKE "optimizer_switch";,两次尝试都得到了以下结果:

优化器开关 | index_merge=on、index_merge_union=on、index_merge_sort_union=on、index_merge_intersection=on、index_merge_sort_intersection=off、engine_condition_pushdown=off、index_condition_pushdown=on、derived_merge=on、derived_with_keys=on、firstmatch=on、loosescan=on、materialization=on、in_to_exists=on、semijoin=on、partial_match_rowid_merge=on、partial_match_table_scan=on、subquery_cach e=开启、mrr=关闭、mrr_cost_based=关闭、mrr_sort_keys=关闭、outer_join_with_cache=开启、semijoin_with_cache=开启、join_cache_incremental=开启、join_cache_hashed=开启、join_cache_bka=开启、optimize_join_buffer_size=开启、table_elimination=开启、extended_keys=开启、exists_to_in=开启、orderby_uses_equalities=开启、condition_pushdown_for_derived=开启、split_materialized=开启、condition_pushdown_for_subquery=开启,rowid_filter =开启,条件_下推_从_具有=开,非_空_范围_扫描=关

正如你所看到的,它仍然处于转动状态

我错过了什么?


我尝试直接通过它进行设置SET GLOBAL optimizer_switch = 'rowid_filter=off';,但它仍然如果我检查的话。

答案1

我必须将组从 GLOBAL 更改为mysqld

[mysqld]
optimizer_switch='rowid_filter=off'

重启服务:

sudo service mariadb restart
sudo service mysql restart

答案2

调试试试这些:

(D1):尝试在提示时进行设置mysql并确保值正在更新。
如果值未得到更新,则问题出在其他方面。

(D2)您应该尝试将其设置为/etc/my.cnf或执行mysqld --help --verbose并检查正在加载哪些配置文件。
看起来您列出的文件没有被加载。

(D3)尝试设置其他选项(在mysql提示符下以及通过各种配置文件)并确保更新成功。
如果没有任何选项成功,则问题出在其他方面。

(D4)检查 MySQL 服务器启动命令。
确保它没有使用--无默认值这将导致这个问题。

根据您的发现,我们可以继续前进。
当前的想法是这些配置文件没有被加载,你必须检查哪些文件实际被加载了。

如何在 MySQL 命令提示符或通过 conf 文件进行设置:

SET [GLOBAL|SESSION] optimizer_switch='command[,command]...';

set optimizer_switch='rowid_filter=off';

[mysqld]  
optimizer_switch=rowid_filter=off  

参考文献1
参考文献2
参考文献 3
参考文献 4

相关内容