MySQL 8.0 中被移除的选项和变量有哪些?
MySQL 8.0 是目前最新的 MySQL 版本,它在保留了之前版本的优点的同时,还新增了一些功能和改进了一些已有特性。然而,随着时间的推移,MySQL 在每个版本中都会移除一些已经过时或者不再需要的选项和变量,以提高其性能和可靠性。在本篇文章中,我们将会回顾 MySQL 8.0 中被移除的一些选项和变量,以帮助您更好地理解 MySQL 8.0 并避免出现一些不必要的错误。
阅读更多:MySQL 教程
sql_mode
首先要介绍的是 sql_mode,它实际上并不属于被移除的选项和变量,但是在 MySQL 8.0 版本中,MySQL 开发者对它进行了一些重大变更,这里需要说明一下。
在 MySQL 8.0 中,MySQL 开发者将“ONLY_FULL_GROUP_BY”选项添加到了默认的 sql_mode 中,以更加严格地执行 SQL 标准。这意味着如果在查询中使用了 GROUP BY,那么在 SELECT 中需要列出所有 GROUP BY 子句中列出的列。在之前的 MySQL 版本中,默认的 sql_mode 并没有包含 ONLY_FULL_GROUP_BY 选项,而可控性更好的“STRICT_ALL_TABLES”选项也被移除了。
如果您的 MySQL 8.0 数据库在执行查询时出现了 ONLY_FULL_GROUP_BY 错误,您可以通过调整 sql_mode 来解决,以下代码演示了如何调整 sql_mode:
SET sql_mode='ONLY_FULL_GROUP_BY,NO_AUTO_CREATE_USER';
在这里,“ONLY_FULL_GROUP_BY”是指定的选项,“NO_AUTO_CREATE_USER”是 mysql 配置文件中默认启用的选项。您可以调整这些选项来满足您的实际需求。
log_slow_queries
在 MySQL 8.0 中,log_slow_queries 变量被移除了,您需要使用 slow_query_log 变量来代替它。slow_query_log 变量允许您启用或关闭 MySQL 中的慢查询日志,并控制该日志的记录方式和位置。以下代码展示了如何启用慢查询日志:
SET GLOBAL slow_query_log = 'ON';
如果您希望将慢查询日志写入文件而不是电子邮件,您可以使用 slow_query_log_file 变量,以下是一个示例:
SET GLOBAL slow_query_log_file = '/var/log/mysql/slow-query.log';
innodb_log_file_size 和 innodb_log_buffer_size
在 MySQL 8.0 中,innodb_log_file_size 和 innodb_log_buffer_size 变量被移除了。这两个变量控制 InnoDB 存储引擎中日志文件的大小和缓冲区的大小,如果您在升级到 MySQL 8.0 时遇到这些变量的问题,可以使用以下变量来代替它们:
- innodb_log_file_size: innodb_log_file_size = [文件大小],文件大小是 InnoDB 日志文件的大小,控制着 InnoDB 写入日志文件的速度。如果您需要控制日志文件大小,请尝试在 MySQL 8.0 中使用”innodb_log_file_size”变量。以下是一个示例:
SET GLOBAL innodb_log_file_size = 536870912;
- innodb_log_buffer_size:innodb_log_buffer_size 设置缓存大小,控制着 InnoDB 写入日志文件的速度。此外,innodb_log_buffer_size 还决定了将多少个事务合并到 InnoDB 的缓存中。如果您需要控制缓冲区的大小,请尝试在 MySQL 8.0 中使用”innodb_log_buffer_size”变量,以下是一个示例:
SET GLOBAL innodb_log_buffer_size = 16777216;
query_cache
在 MySQL 8.0 中,query_cache 变量也被移除了。query_cache 是一个 MySQL 内置的缓存机制,用于缓存查询结果以提高查询性能。然而,在 MySQL 8.0 中,由于 query_cache 的性能瓶颈和缓存失效的问题,MySQL 开发者将其移除了。
如果您在之前的 MySQL 版本中使用 query_cache 变量,则需要修改您的应用程序以避免出现问题。相反,MySQL 8.0 中提供了其他提高查询性能的方法,比如更好的索引设计,更优秀的查询优化和更快的磁盘 IO。
myisam_use_mmap 和 myisam_mmap_size
在 MySQL 8.0 中,myisam_use_mmap 和 myisam_mmap_size 变量也被移除了。myisam_use_mmap 变量指示 MySQL 是否使用内存映射文件来访问 MyISAM 表,并且 myisam_mmap_size 变量指示分配给内存映射的最大内存量。这两个变量在之前的 MySQL 版本中用于控制 MyISAM 表的访问性能和内存使用。
然而,在 MySQL 8.0 中,MySQL 开发者将 MyISAM 存储引擎标记为“废弃”,意味着在未来的版本中可能会彻底移除,因此这些变量也失去了意义。
确认已移除的变量和选项
如果您不确定哪些变量和选项已被移除,在 MySQL 8.0 中可以通过查阅官方文档来获得更多的信息。另外,MySQL 8.0 还提供了一个 SHOW VARIABLES 命令,可以列出所有 MySQL 变量的信息,包括其是否被移除。
以下是一个示例:
SHOW VARIABLES WHERE Variable_name LIKE '%removed';
该命令将列出 MySQL 中已标记为“removed”的所有变量。
结论
总的来说,MySQL 8.0 中移除了一些过时或者不再需要的变量和选项,同时引入了新的功能和改进。在使用 MySQL 8.0 或者升级到 MySQL 8.0 时,应该特别注意这些移除的变量和选项,并采取必要的措施以避免潜在的问题。在查看官方文档和使用 SHOW VARIABLES 命令的帮助下,您可以更好地了解 MySQL 8.0 中的变化,并能够更加高效地使用 MySQL 数据库。