AES_ENCRYPT 是否会导致 Mysql 中的复制出现问题?

Does AES_ENCRYPT cause problems with replication in Mysql?

我有一个 Mysql 主-主复制对。 (我将第二个保持为只读模式以避免索引冲突。)

在我的主数据库上,我在错误日志中收到此消息:

Statement is unsafe because it uses a system function that may return a different value on the slave. Statement: INSERT INTO field_data (fields_id,records_id,enc_data,field_units_type_key) VALUES ('26','1753149',AES_ENCRYPT('COVID',UNHEX(SHA2('17531491796432333532720#',256))),'NULL')

AES_ENCRYPT 或 SHA2 是否以某种方式依赖于时间?为什么复制服务器上的这个插入不会保存完全相同的数据?

这是 AES_ENCRYPT 自 MySQL 5.6.17:

以来记录的行为

As of MySQL 5.6.17, statements that use AES_ENCRYPT() or AES_DECRYPT() are unsafe for statement-based replication and cannot be stored in the query cache.

这不是因为时间依赖性,而是因为行为取决于新引入的系统变量block_encryption_mode:

This variable controls the block encryption mode for block-based algorithms such as AES. It affects encryption for AES_ENCRYPT() and AES_DECRYPT().

如果您的服务器上的设置不同,您的查询将插入不同的数据。如果没有区别,那你就没事了。但由于这是您的责任,您会收到警告,即(基于语句的)复制无法确保这一点。