![从 conf 文件中覆盖 MySQL 变量](https://linux22.com/image/781716/%E4%BB%8E%20conf%20%E6%96%87%E4%BB%B6%E4%B8%AD%E8%A6%86%E7%9B%96%20MySQL%20%E5%8F%98%E9%87%8F.png)
我尝试覆盖变量optimizer_switch
并更改rowid_filter=on
为rowid_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