主从(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: Error'Specified key was too long; max key length is 1000 bytes' on query. Defaultdatabase: '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` 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 [Warning] Slave: Specifiedkey was too long; max key length is 1000 bytes Error_code: 1071
130606 10:57:20 [ERROR] Error runningquery, slave SQL thread aborted. Fix the problem, and restart the slave SQLthread with "SLAVE START". We stopped at log 'mysql-bin.004368' position571890750
日志显示在上午10点57分建表失败,很明显的错误,索引长度超过了1000字节,然后告知同事,创建表索引长度超过了1000字节,导致slave io_thread中断。然后同事很奇怪的说,上午master上面创建表没问题,顺利的创建,为什么在slave上复制报错?
后来通过在slave上手工建表发现master和slave 默认存储引擎不一致,不一致会引起中断?是的,建表语句是否明确指定使用那种存储引擎如下语句
CREATE TABLE `meta_topic_scan` (
`domain` varchar(200) NOT NULL ,
`topic_name` varchar(200) NOT NULL,
`topic_url` varchar(200) NOT NULL ,
`topic_pv` int(11) DEFAULT '0',
`topic_uv` int(11) DEFAULT '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 comment '',
`topic_name` varchar(200) NOT NULL comment '',
`topic_url` varchar(200) NOT NULL comment '',
`topic_pv` int(11) DEFAULT '0' comment '',
`topic_uv` int(11) DEFAULT '0' comment '',
PRIMARY KEY (`domain`,`topic_name`,`topic_url`)
);
这样io_thread把binlog从master服务器传送到slave,sql_thread在slave上执行此语句,由此可知slave默认是什么引擎,就创建默认引擎的表。由于slave默认是mysiam,索引在innodb和mysiam两个引擎上索引长度不一样,导致主从复制中断。
修改my.cnf,改默认引擎innodb,重启服务(业务不是很重要,允许重启),ok。如果不允许重启,那就在slave上创建表,然后跳过出错的event,在维护窗口再重启生效
bitsCN.com
Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Solution : 1. Vérifiez les paramètres d'eMule pour vous assurer que vous avez entré l'adresse du serveur et le numéro de port corrects ; 2. Vérifiez la connexion réseau, assurez-vous que l'ordinateur est connecté à Internet et réinitialisez le routeur ; est en ligne. Si vos paramètres sont S'il n'y a pas de problème avec la connexion réseau, vous devez vérifier si le serveur est en ligne ; 4. Mettez à jour la version d'eMule, visitez le site officiel d'eMule et téléchargez la dernière version du logiciel eMule ; 5. Demandez de l'aide.

En tant qu'utilisateur LINUX, nous devons souvent installer divers logiciels et serveurs sur CentOS. Cet article présentera en détail comment installer Fuse et configurer un serveur sur CentOS pour vous aider à effectuer les opérations associées en douceur. Installation de CentOS fuseFuse est un cadre de système de fichiers en espace utilisateur qui permet aux utilisateurs non privilégiés d'accéder et de faire fonctionner le système de fichiers via un système de fichiers personnalisé. L'installation de Fuse sur CentOS est très simple, suivez simplement les étapes suivantes : 1. Ouvrez le terminal et connectez-vous en tant que. utilisateur root. 2. Utilisez la commande suivante pour installer le package fuse : ```yuminstallfuse3. Confirmez les invites pendant le processus d'installation et entrez `y` pour continuer. 4. Installation terminée

Que dois-je faire si le serveur RPC est indisponible et n'est pas accessible sur le bureau Ces dernières années, les ordinateurs et Internet ont pénétré tous les recoins de nos vies. En tant que technologie de calcul centralisé et de partage de ressources, l'appel de procédure à distance (RPC) joue un rôle essentiel dans la communication réseau. Cependant, nous pouvons parfois rencontrer une situation dans laquelle le serveur RPC n'est pas disponible, ce qui entraîne l'impossibilité d'accéder au bureau. Cet article décrit certaines des causes possibles de ce problème et propose des solutions. Tout d’abord, nous devons comprendre pourquoi le serveur RPC n’est pas disponible. Le serveur RPC est un

Dans la transmission de données sur réseau, les serveurs proxy IP jouent un rôle important, aidant les utilisateurs à masquer leurs véritables adresses IP, à protéger la confidentialité et à améliorer la vitesse d'accès. Dans cet article, nous présenterons le guide des meilleures pratiques sur la façon de créer un serveur proxy IP avec PHP et fournirons des exemples de code spécifiques. Qu'est-ce qu'un serveur proxy IP ? Un serveur proxy IP est un serveur intermédiaire situé entre l'utilisateur et le serveur cible. Il agit comme une station de transfert entre l'utilisateur et le serveur cible, transmettant les demandes et les réponses de l'utilisateur. En utilisant un serveur proxy IP

Le rôle d'un relais DHCP est de transmettre les paquets DHCP reçus vers un autre serveur DHCP du réseau, même si les deux serveurs se trouvent sur des sous-réseaux différents. En utilisant un relais DHCP, vous pouvez déployer un serveur DHCP centralisé dans le centre réseau et l'utiliser pour attribuer dynamiquement des adresses IP à tous les sous-réseaux/VLAN du réseau. Dnsmasq est un serveur de protocole DNS et DHCP couramment utilisé qui peut être configuré en tant que serveur relais DHCP pour faciliter la gestion des configurations d'hôtes dynamiques sur le réseau. Dans cet article, nous allons vous montrer comment configurer Dnsmasq comme serveur relais DHCP. Sujets de contenu : Topologie du réseau Configuration d'adresses IP statiques sur un relais DHCP D sur un serveur DHCP centralisé

Les étapes pour démarrer le serveur TFTP comprennent la sélection du logiciel du serveur TFTP, le téléchargement et l'installation du logiciel, la configuration du serveur TFTP, ainsi que le démarrage et le test du serveur. Introduction détaillée : 1. Lors du choix du logiciel serveur TFTP, vous devez d'abord choisir le logiciel serveur TFTP qui correspond à vos besoins. Actuellement, il existe de nombreux logiciels serveur TFTP parmi lesquels choisir, tels que Tftpd32, PumpKIN, tftp-hpa, etc. qui offrent tous des fonctions d'interface et de configuration simples et faciles à utiliser ; 2. Téléchargez et installez le logiciel serveur TFTP, etc.

Les méthodes permettant d'afficher l'état du serveur incluent des outils de ligne de commande, des outils d'interface graphique, des outils de surveillance, des fichiers journaux et des outils de gestion à distance. Introduction détaillée : 1. Utilisez les outils de ligne de commande. Sur les serveurs Linux ou Unix, vous pouvez utiliser les outils de ligne de commande pour afficher l'état du serveur ; 2. Utilisez les outils d'interface graphique. Pour les systèmes d'exploitation de serveur dotés d'interfaces graphiques, vous pouvez utiliser les graphiques. fourni par le système. Utilisez les outils d'interface pour afficher l'état du serveur ; 3. Utilisez des outils de surveillance. Vous pouvez utiliser des outils de surveillance spéciaux pour surveiller l'état du serveur en temps réel, etc.

Que dois-je faire si je ne peux pas accéder au jeu lorsque le serveur Epic est hors ligne ? Ce problème a dû être rencontré par de nombreux amis. Lorsque cette invite apparaît, le jeu authentique ne peut pas être démarré. Ce problème est généralement dû à des interférences du réseau et du logiciel de sécurité. Alors, comment doit-il être résolu ? J'aimerais partager la solution avec vous, j'espère que le didacticiel logiciel d'aujourd'hui pourra vous aider à résoudre le problème. Que faire si le serveur Epic ne peut pas accéder au jeu lorsqu'il est hors ligne : 1. Il peut être interféré par un logiciel de sécurité. Fermez la plateforme de jeu et le logiciel de sécurité, puis redémarrez. 2. La seconde est que le réseau fluctue trop. Essayez de redémarrer le routeur pour voir s'il fonctionne. Si les conditions sont correctes, vous pouvez essayer d'utiliser le réseau mobile 5g pour fonctionner. 3. Alors il y en aura peut-être plus
