Character set '#45' 导致主从停止问题

今天有同学在搭建主从环境的时候发现一个问题,简单说明一下。感谢 @年代80s.

 

       现象:

       从库上Slave_IO_Running停止,Last_Error显示如下:

bin/mysqlbinlog: Character set ‘#45′ is not a compiled character set and is not specified in the ‘/u01/dingqi.lxb/transfer2/master/share/mysql/charsets/Index.xml’ file

 

       分析:

       此时用mysqlbinlog 执行对应的relaylog文件,也会出现上面这个错误提示。 
       查看这个提示位置的Index.xml,这里记录了这个server提供的所有字符集。我们发现,其实没有id为45的字符集。
       也就是这个原因,导致slave在同步时,解析出错,导致同步停止。

        SET @@session.character_set_client=45,@@session.collation_connection=45,@@session.collation_server=33

        从这个命令中看,是有用户连接进master以后,执行了一个set names xxx (xxx是某个字符集名字),而这个xxx被翻译成45.

 

       复现:

       我们要找出编号45的字符集。在5.5上执行如下命令:

       发现原来是这个叫做utf8mb4的字符集,这个字符集在5.1里面是还没有的。

 

       解决:

       给我们的提示就是在高版本对低版本的主从中,要注意不要用到低版本不支持的字符集(所以官方并不建议高版本的master同步到低版本的slave)。

        对于已经在Master的里面已经存在的binlog,要让主从能够继续同步,只能在slave_skip_errors里加上 22这个错误号.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
若要在 MySQL 8.0 的配置文件 my.cnf 中实现主从复制并使用 GTID 技术,可以按照以下方式进行配置: ``` [client] port = 3306 socket = /tmp/mysql.sock [mysqld] port = 3306 socket = /tmp/mysql.sock server-id = 1 gtid-mode = ON enforce-gtid-consistency = ON log-bin = mysql-bin binlog-format = ROW binlog-checksum = NONE basedir = /usr/local/mysql datadir = /usr/local/mysql/data log_error = /var/log/mysql/error.log character_set_server = utf8mb4 collation_server = utf8mb4_unicode_ci default_authentication_plugin = mysql_native_password innodb_buffer_pool_size = 128M innodb_log_file_size = 64M innodb_flush_log_at_trx_commit = 1 innodb_lock_wait_timeout = 50 [mysql] default-character-set = utf8mb4 ``` 在 [mysqld] 部分,我们需要设置服务器的 ID (这里设置为 1),并开启 GTID 模式和强制 GTID 一致性。同时,我们需要开启二进制日志(log-bin),设置二进制格式为行格式(binlog-format)并关闭二进制日志校验(binlog-checksum)。 在主服务器上,我们需要在每个事务提交时自动写入 GTID,以便从服务器可以按照 GTID 顺序进行复制。在从服务器上,我们需要启用 GTID,以便在从主服务器获取数据时使用 GTID 进行同步。 此外,我们还可以根据实际情况配置 innodb_buffer_pool_size、innodb_log_file_size、innodb_flush_log_at_trx_commit、innodb_lock_wait_timeout 等参数,以优化数据库的性能。 需要注意的是,此配置文件只适用于主从复制的场景,如果您还需要配置其他的功能,可以根据具体需求进行修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值