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
Das Beherrschen der Methode zum Hinzufügen von MySQL -Benutzern ist für Datenbankadministratoren und -entwickler von entscheidender Bedeutung, da sie die Sicherheits- und Zugriffskontrolle der Datenbank gewährleistet. 1) Erstellen Sie einen neuen Benutzer, der den Befehl createUser verwendet, 2) Berechtigungen über den Zuschussbefehl zuweisen, 3) Verwenden Sie FlushPrivileges, um sicherzustellen, dass die Berechtigungen wirksam werden.

ChooSeCharforfixed-LengthData, varcharforvariable-LengthData, undTextForLargetEXTFields.1) Charisefficiefforconsistent-LengthDatalikeCodes.2) varcharSefficienpyficyFoximent-Länge-Länge.3) VarcharSuitsVariable-Lengthdatalikenamen, BalancingFlexibilityPerance.3) textissideale

Best Practices für die Handhabung von String -Datentypen und -indizes in MySQL gehören: 1) Auswählen des entsprechenden Zeichenfolge -Typs, z. B. Zeichen für feste Länge, Varchar für variable Länge und Text für großen Text; 2) bei der Indexierung vorsichtig sein, über die Indexierung vermeiden und Indizes für gemeinsame Abfragen erstellen; 3) Verwenden Sie Präfixindizes und Volltextindizes, um lange String-Suchvorgänge zu optimieren. 4) Überwachen und optimieren Sie die Indizes regelmäßig, um die Indizes gering und effizient zu halten. Mit diesen Methoden können wir Lese- und Schreibleistung in Einklang bringen und die Datenbankeffizienz verbessern.

Toaddauerremotelytomysql, folge thesesteps: 1) connectTomysqlasroot, 2) CreateeNewuserWithremoteAccess, 3) Grant -nöterPrivilegeges und 4) flushprivileges.BecauTiousousousousous-

TostorestringseffictionlyInmysql, ChoosetherightDatatypeDonyourneeds: 1) UsecharforFixed-LengthSlikeCountrycodes.2) UseVarcharforVariable-LengthStringSlikenMamen.3) useTextforlong-formtextContent.-We useblob formainbherinaryImimages

Bei der Auswahl der Blob- und Textdatentypen von MySQL eignet sich Blob für die Speicherung von Binärdaten und der Text ist zum Speichern von Textdaten geeignet. 1) Der Blob eignet sich für binäre Daten wie Bilder und Audio, 2) Text ist für Textdaten wie Artikel und Kommentare geeignet. Bei der Auswahl müssen Dateneigenschaften und Leistungsoptimierung berücksichtigt werden.

Nein, YouShouldnotusetheroTusserinMysqlForyourProduct.instead, Createspecificusers withlimitedPrivileGeenhiteSecurity und 1) CreateOnewuserWithaStrongPassword, 2) Grantonlyn -DegetaryPothisuser, 3) regelmäßigem LyRegPassUtupdatusuSerpermings

MysqlstringDatatypessHouldbechosenbasedonDatacharacteristics undsecases: 1) UseCharforfixed-LengthStringslikecountrycodes.2) UseVarcharforvariable-Länge-Längestringslikenames.3) VerwendungBinaryorvarbinaryChryCryEcryEcryCryPlyptography.4) gebrauch


Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

WebStorm-Mac-Version
Nützliche JavaScript-Entwicklungstools

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

mPDF
mPDF ist eine PHP-Bibliothek, die PDF-Dateien aus UTF-8-codiertem HTML generieren kann. Der ursprüngliche Autor, Ian Back, hat mPDF geschrieben, um PDF-Dateien „on the fly“ von seiner Website auszugeben und verschiedene Sprachen zu verarbeiten. Es ist langsamer und erzeugt bei der Verwendung von Unicode-Schriftarten größere Dateien als Originalskripte wie HTML2FPDF, unterstützt aber CSS-Stile usw. und verfügt über viele Verbesserungen. Unterstützt fast alle Sprachen, einschließlich RTL (Arabisch und Hebräisch) und CJK (Chinesisch, Japanisch und Koreanisch). Unterstützt verschachtelte Elemente auf Blockebene (wie P, DIV),

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

PHPStorm Mac-Version
Das neueste (2018.2.1) professionelle, integrierte PHP-Entwicklungstool
