主从(master/slave)默认引擎不一致导致复制失败解决_MySQL
bitsCN.com
主从(master/slave)默认引擎不一致导致复制失败解决
同事告知,一台slave服务器复制中断,查看slave服务器,如下错误
Error 'Specified key was too long; max keylength is 1000 bytes' on query
mysql> show slave status /G;
*************************** 1. row***************************
Slave_IO_State: Waiting formaster to send event
Master_Host: 192.xxx.xxx.146
Master_User: repl
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.004369
Read_Master_Log_Pos: 717957570
Relay_Log_File: relay-bin.013649
Relay_Log_Pos: 571890895
Relay_Master_Log_File: mysql-bin.004368
Slave_IO_Running: Yes
Slave_SQL_Running: No
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 1071
Last_Error: Error 'Specified key was too long; max key length is 1000 bytes' onquery. Default database: 'analyse_xxx'. Query: 'CREATE TABLE`meta_topic_scan` ( `domain` varchar(200) NOT NULL COMMENT '' , `topic_name`varchar(200) NOT NULL COMMENT '' , `topic_url` varchar(200) NOT NULL COMMENT '', `topic_pv` int NULL DEFAULT 0 COMMENT '' , `topic_uv` int NULL DEFAULT 0COMMENT '' , `pv` int NULL DEFAULT 0 COMMENT '' , `uv` int NULL DEFAULT 0COMMENT '' , `shopcart_pv` int NULL DEFAULT 0 COMMENT ''
Skip_Counter: 0
Exec_Master_Log_Pos: 571890750
Relay_Log_Space: 1802530754
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: 1071
Last_SQL_Error: Error 'Specified keywas too long; max key length is 1000 bytes' on query. Default database:'analyse_product'. Query: 'CREATE TABLE
`meta_topic_scan` ( `domain` varchar(200)NOT NULL COMMENT '' , `topic_name` varchar(200) NOT NULL COMMENT '' ,`topic_url` varchar(200) NOT NULL COMMENT '' , `topic_pv` int NULL DEFAULT 0COMMENT '' , `topic_uv` int NULL DEFAULT 0 COMMENT '' , `pv` int NULL DEFAULT 0COMMENT '' , `uv` int NULL DEFAULT 0 COMMENT '' , `shopcart_pv` int NULL DEFAULT0
1 row in set (0.00 sec)
ERROR:
No query specified
创建表失败,指数长度超过了暴涨1000,看看报错日志
[root@db~]# tail -n 500 / my/data/mysql/dbxxxxxx.err
130606 10:57:20 [ERROR] Slave SQL: 错误'指定的键太长;查询时最大密钥长度为 1000 字节。默认数据库:'analysis_xxx'。查询: 'CREATE TABLE
`meta_topic_scan` ( `domain` varchar(200)NOT NULL COMMENT '' , `topic_name` varchar(200) NOT NULL COMMENT '' ,`topic_url` varchar(200) NOT NULL COMMENT '' , `topic_pv` int
NULL DEFAULT 0 COMMENT '' , `topic_uv` intNULL DEFAULT 0 COMMENT '' , `pv` int NULL DEFAULT 0 COMMENT '' , `uv` int NULLDEFAULT 0 COMMENT '' , `shopcart_pv` int NULL DEFAULT 0
130606 10:57:20 [警告]从站:指定的密钥太长;密钥长度为 1000 字节 Error_code: 1071
130606 10:57:20 [错误] 运行查询时出错,从属 SQL 线程中止修复此问题,并使用“SLAVE START”重新启动从属 SQL 线程。我们停在日志'mysql-bin.004368'位置571890750
日志显示在上午10点57分建表失败,很明显的错误,索引长度超过1000字节,然后通知同事,创建表索引长度超过了1000字节,导致slave io_thread。然后同事很奇怪的说,上午master创建上面的表没问题,顺利的创建,为什么在slave上复制报错?
后来通过在slave上手工建表发现master和slave默认存储引擎不一致,不一致会引起中断?是的,建表语句是否明确指定使用那种存储引擎如下语句
创建表 `meta_topic_scan` (
`domain` varchar(200) NOT NULL ,
`topic_name` varchar(200) NOT NULL,
`topic_url` varchar(200) NOT NULL ,
`topic_pv` int(11) 默认 '0',
`topic_uv` int(11) 默认 '0',
PRIMARY KEY (`domain`,`topic_name`,`topic_url`)
);
如果在建表时未指定存储引擎,在master上默认引擎是innodb,创建的表就是innodb类型,写入到binlog日志里的语句是什么格式呢?
我们利用mysqlbinlog去查找一条语句,如下格式去分析
[root@aeolus1 ~]# mysqlbinlog -uroot--start-position=1914 /usr/local/mysql/data/mysql-bin.000014
发现建表语句以这样的格式写入binlog二进制日志中
CREATE TABLE `meta_topic_scan` (
`domain` varchar(200) NOT NULL 注释 '',
`topic_name` varchar(200) NOT NULL 注释 '',
`topic_url` varchar(200) NOT NULL comment '',
`topic_pv` int(11) DEFAULT '0' comment '',
`topic_uv` int(11) 默认 '0' 评论 '',
主键 (`domain`,`topic_name`,`topic_url`)
);
这样io_thread把binlog从master服务器传送到slave,sql_thread在slave上执行此语句,由此可知slave默认引擎是什么,就创建默认引擎的表。由于slave默认是mysiam,索引在innodb和mysiam两个引擎上索引长度不一样,导致主从复制中断。
修改my.cnf,改默认引擎innodb,重启服务(业务不是很,允许重启),ok。如果无法重启,那就在slave上创建表,然后跳过错误的事件,在维护窗口重新启动
bitsCN.com
热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

解决办法:1、检查电驴设置,确保已输入正确的服务器地址和端口号;2、检查网络连接,确保计算机已连接到互联网,并重置路由器;3、检查服务器是否在线,如果您的设置和网络连接都没有问题,则需要检查服务器是否在线;4、更新电驴版本,访问电驴官方网站,下载最新版本的电驴软件;5、寻求帮助。

RPC服务器不可用进不了桌面怎么办近年来,计算机和互联网已经深入到我们的生活中的各个角落。作为一种集中计算和资源共享的技术,远程过程调用(RPC)在网络通信中起着至关重要的作用。然而,有时我们可能会遇到RPC服务器不可用的情况,导致无法进入桌面。本文将介绍一些可能导致此问题的原因,并提供解决方案。首先,我们需要了解RPC服务器不可用的原因。RPC服务器是一种

作为一名LINUX用户,我们经常需要在CentOS上安装各种软件和服务器,本文将详细介绍如何在CentOS上安装fuse和搭建服务器的过程,帮助您顺利完成相关操作。CentOS安装fuseFuse是一个用户空间文件系统框架,允许非特权用户通过自定义文件系统实现对文件系统的访问和操作,在CentOS上安装fuse非常简单,只需按照以下步骤操作:1.打开终端,以root用户登录。2.使用以下命令安装fuse软件包:```yuminstallfuse3.确认安装过程中的提示,输入`y`继续。4.安装完

DHCP中继的作用是将接收到的DHCP数据包转发到网络上的另一个DHCP服务器,即使这两个服务器位于不同的子网中。通过使用DHCP中继,您可以实现在网络中心部署一个集中式的DHCP服务器,并利用它为所有网络子网/VLAN动态分配IP地址。Dnsmasq是一种常用的DNS和DHCP协议服务器,可以配置为DHCP中继服务器,以帮助管理网络中的动态主机配置。在本文中,我们将向您展示如何将dnsmasq配置为DHCP中继服务器。内容主题:网络拓扑在DHCP中继上配置静态IP地址集中式DHCP服务器上的D

在网络数据传输中,IP代理服务器扮演着重要的角色,能够帮助用户隐藏真实IP地址,保护隐私、提升访问速度等。在本篇文章中,将介绍如何用PHP构建IP代理服务器的最佳实践指南,并提供具体的代码示例。什么是IP代理服务器?IP代理服务器是一种位于用户与目标服务器之间的中间服务器,它充当用户与目标服务器之间的中转站,将用户的请求和响应进行转发。通过使用IP代理服务器

查看服务器状态的方法有使用命令行工具、图形界面工具、监控工具、日志文件和远程管理工具等。详细介绍:1、使用命令行工具,在Linux或Unix服务器上,可以使用命令行工具来查看服务器的状态;2、使用图形界面工具,对于具有图形界面的服务器操作系统,可以使用系统提供的图形界面工具来查看服务器状态;3、使用监控工具,可以使用专门的监控工具来实时监视服务器的状态等等。

开启TFTP服务器的步骤包括选择TFTP服务器软件、下载和安装软件、配置TFTP服务器以及启动和测试服务器等。详细介绍:1、选择TFTP服务器软件,首先需要选择适合自己需求的TFTP服务器软件,目前有很多可供选择的TFTP服务器软件,例如Tftpd32、PumpKIN、tftp-hpa等,这些软件都提供了简单易用的界面和配置选项;2、下载和安装TFTP服务器软件等等。

epic服务器离线进不了游戏怎么办?这个问题想必很多小伙伴都有遇到过,出现了此提示就是导致正版的游戏无法启动,那么出现这个问题一般是网络和安全软件干扰导致的,那么应该怎么解决呢,本期小编就来和大伙分享解决方法,希望今日的软件教程可以帮助各位解决问题。 epic服务器离线进不了游戏怎么办: 1、很可能是被安全软件干扰了,将游戏平台和安全软件关闭在重启。 2、其次就是网络波动过大,尝试重启一次路由器,看看是否有效,如果条件可以的话,可以尝试使用5g移动网络来进行操作。 3、然后有可能是更
