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