V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
XOXO360
V2EX  ›  数据库

mysql 主从复制报错

  •  
  •   XOXO360 · 2018-02-11 12:37:49 +08:00 · 1639 次点击
    这是一个创建于 2471 天前的主题,其中的信息可能已经有所发展或是发生改变。

    Error 'Illegal mix of collations (utf8mb4_general_ci,COERCIBLE) and (latin1_swedish_ci,EXPLICIT) for operation '='' on query. Default database: 'aaa'. Query: 有没有 mysql 大佬碰到过啊。

    15 条回复    2018-02-11 17:37:13 +08:00
    XOXO360
        1
    XOXO360  
    OP
       2018-02-11 12:46:30 +08:00
    有木有大佬啊±±±±±±±
    hcymk2
        2
    hcymk2  
       2018-02-11 12:48:06 +08:00
    主从 2 个库的字符编码集不同吧。
    XOXO360
        3
    XOXO360  
    OP
       2018-02-11 12:58:26 +08:00
    @hcymk2 插入的表的话是默认。。查看 show full columns from 表。是空,
    查询的话。我在主从库都试过都能执行。latin1_swedish_ci 这个字符集我硬是没找出来是在哪里存在。莫名其妙。
    XOXO360
        4
    XOXO360  
    OP
       2018-02-11 13:00:45 +08:00
    character_set_client utf8
    character_set_connection utf8
    character_set_database utf8mb4
    character_set_filesystem binary
    character_set_results utf8
    character_set_server utf8mb4
    character_set_system utf8
    collation_connection utf8_general_ci
    collation_database utf8mb4_general_ci
    collation_server utf8mb4_general_ci
    hcymk2
        5
    hcymk2  
       2018-02-11 13:21:30 +08:00
    utf8mb4 这个
    character-set-server = utf8mb4
    collation-server = utf8mb4_unicode_ci
    marrysail
        6
    marrysail  
       2018-02-11 13:22:34 +08:00
    可能是特殊情况下,写入的字符集编码和 mysql 指定表预定义的 编码集 不一致导致的
    XOXO360
        7
    XOXO360  
    OP
       2018-02-11 13:36:39 +08:00
    @hcymk2 请教一下,latin1_swedish_ci 报错这个不知道从哪里来的。现在运维锁死了。我无法做任何修改。他们要等腾讯云回复。能麻烦您说说原因么。是因为 utf8mp4 弄出的 latin1_swedish_ci 吗?我 sql 在从库跑也没有报错啊。
    XOXO360
        8
    XOXO360  
    OP
       2018-02-11 13:37:35 +08:00
    @marrysail 关键是 latin1_swedish_ci 全局变量没有它。而且我 sql 里面所有用到的表都查了一下也没有它。这个字符集是怎么跑出来的。很奇怪。。
    XOXO360
        9
    XOXO360  
    OP
       2018-02-11 13:38:21 +08:00
    Skip_Counter: 0
    Exec_Master_Log_Pos: 80058476
    Relay_Log_Space: 81198493224
    Until_Condition: None
    Until_Log_File:
    Until_Log_Pos: 0
    Master_SSL_Allowed: No
    Master_SSL_CA_File:
    Master_SSL_CA_Path:
    Master_SSL_Cert:
    Master_SSL_Cipher:
    Master_SSL_Key:
    Seconds_Behind_Master: NULL
    Master_SSL_Verify_Server_Cert: No
    Last_IO_Errno: 0
    Last_IO_Error:
    Last_SQL_Errno: 1267
    Last_SQL_Error: Error 'Illegal mix of collations (utf8mb4_general_ci,COERCIBLE) and (latin1_swedish_ci,EXPLICIT) for operation '='' on query. Default database: 'aaa'. Query: 'insert into
    hcymk2
        10
    hcymk2  
       2018-02-11 13:54:23 +08:00
    latin1_swedish_ci 这个是 mysql(原来是瑞典的公司)的默认字符编码集.那个插入语句方便能贴全么?
    XOXO360
        11
    XOXO360  
    OP
       2018-02-11 14:02:59 +08:00
    @hcymk2 就是 insert into.....select,里面用 left join 子查询。通过日期。。sql 肯定没问题。因为主库跑完一点事都没有。。就是从库那边莫名其妙。。。
    XOXO360
        12
    XOXO360  
    OP
       2018-02-11 14:05:36 +08:00
    @hcymk2 我是存储过程执行。while 循环。正式是一点问题都没有。
    hcymk2
        13
    hcymk2  
       2018-02-11 14:19:54 +08:00   ❤️ 1
    XOXO360
        14
    XOXO360  
    OP
       2018-02-11 14:58:12 +08:00   ❤️ 1
    @hcymk2 应该是某段 sql 自动转化了。。目前看不了日志是最头疼的。谢谢您了。。
    XOXO360
        15
    XOXO360  
    OP
       2018-02-11 17:37:13 +08:00
    @hcymk2 现在事情的后续是,运维重新做过主从,以前是 mix 的同步方式也就是读 binlog 的 sql,现在改 row。数据行同步。具体以后看结果了。。但是如果事实是字符集自动转化。为什么 mysql 官方就不出个字符转化的文档。换同步方式也只是规避这个问题。并没有根本上解决这个问题。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1048 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 18:55 · PVG 02:55 · LAX 10:55 · JFK 13:55
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.