MySQL 提示已过时警告。

10

自从我更新了mysql后,一直收到一个警告(我的日志都被淹没了)。它的内容是:

 1287, "'@@tx_isolation' is deprecated and will be removed in a future release. Please use '@@transaction_isolation' instead"

在MySQL下

mysql> show variables like "tx_isolation";
+---------------+-----------------+
| Variable_name | Value           |
+---------------+-----------------+
| tx_isolation  | REPEATABLE-READ |
+---------------+-----------------+
1 row in set (0.00 sec)

我也有警告中建议的新变量。

mysql> show variables like "transaction_isolation";
+-----------------------+-----------------+
| Variable_name         | Value           |
+-----------------------+-----------------+
| transaction_isolation | REPEATABLE-READ |
+-----------------------+-----------------+
1 row in set (0.00 sec

我知道变量w已不再使用,我想把它删除,但对我的查询持谨慎态度。正确的程序是删除警告变量吗?如果是,应该如何操作?

同时检查了my.cnf文件,未发现任何关于这两个变量的提及。

4个回答

30

2
从MySQL 5.7.20版本开始,您应该改用transaction_isolation。文档中指出:

在MySQL 5.7.20之前,请使用tx_isolation而不是transaction_isolation。

https://dev.mysql.com/doc/refman/5.7/en/set-transaction.html

tx_isolation

Deprecated  5.7.20
System Variable Name    tx_isolation

https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_tx_isolation

事务隔离级别

Command-Line Format         --transaction-isolation=name
System Variable (>= 5.7.20) Name    transaction_isolation

https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_transaction_isolation

编辑:

不要再依赖旧变量,开始使用文档提供的示例中的新变量。

SELECT @@GLOBAL.transaction_isolation, @@transaction_isolation; 
SET GLOBAL transaction_isolation='REPEATABLE-READ'; 
SET SESSION transaction_isolation='SERIALIZABLE';

您需要搜索代码以确定哪个已弃用的变量已被使用,并将其替换为新的变量/语法。


我也看到了这个,但是文档没有说明如何删除tx_isolation变量以停止警告。它正在我的错误日志中产生数百万行的警告。 - Anekdotin
你不必删除它,只需停止使用即可。 - user207421
@Anekdotin,你明白警告被触发的原因是因为你的代码或者你正在使用的库正在主动设置或获取@@tx_isolation的值吗?这不是变量在服务器上的问题,而是你的代码以某种方式使用了已弃用的名称来访问它。 - Michael - sqlbot
我正在使用pymysql,并在他的git上评论了一个问题。他大声说这是我的用法问题。在这个问题之前,我从未听说过这个变量。我不确定该怎么办。此外,使用上面的命令并没有帮助解决警告。 - Anekdotin

1

在使用 Flask 设置中使用 pymysql 库时,我遇到了错误。降级到 mysql 5.6 可以解决问题,但可能不是最佳解决方案。


我也会使用pymysql。这也许是我要做的。 - Anekdotin
我在 Github 页面上提到了这个问题。也许他会修复它。 - Anekdotin
我也在 Github 页面上提交了一个支持案例,希望他能解决这个问题。否则,似乎只需要更改一行代码,所以也许在他修复这个问题之前我可以自己修复 PyMySQL。 - Kim Myhrman
我进行了评论,但他似乎对此不太满意,并删除了我的git问题。在cursors.py下看起来很容易修复。 - Anekdotin
1
问题将在SQLAlchemy的1.1.15版本中得到解决,根据开发人员的说法,该版本将在本周晚些时候推出,届时问题将会消失 :) 因此,在未来几天内升级SQLAlchemy到1.1.15也将是一种解决方案 :) - Kim Myhrman
它就这样工作了!你应该添加一条评论,我会接受它作为答案。你有 GitHub 吗?我之前看到了你的帖子。看起来我们都编写同样类型的程序。 - Anekdotin

0

我安装了sqlalchemy==1.1.15,但问题仍然存在。因此,我在sqlalchemy的base.py文件中更改了命令如下:

    #cursor.execute('SELECT @@tx_isolation')
    cursor.execute('SELECT @@transaction_isolation')

你必须启动一个新的Python才能看到更改。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接