2016-06-02 12 views
1

Ich habe eine 5GB MySQL-Datenbank namens "Tweets", von der ich auf die Tabelle "searchresults" zugreifen muss. Aber wenn ich eine Abfrage darauf anlege oder einen Speicherabzug anlege, stürzt der MySQL-Server (läuft unter Windows 10) die ganze Zeit mit demselben Fehler in derselben Zeile ab.MySQL stürzt ab ("Einige Zeiger können ungültig sein und dazu führen, dass der Speicherabzug abgebrochen wird")

Zum Beispiel, wenn ich versuche, die Datenbank mit dem folgenden Befehl dump:

C:\xampp\mysql\bin>mysqldump.exe --user root --force tweets > D:\secondtry.sql 

ich die folgenden Fehlermeldung in den cmd.exe-Fenstern mit der exakt gleichen Zeile immer und immer wieder kommen:

mysqldump.exe: Error 2013: Lost connection to MySQL server during query when dumping table `searchresults` at row: 5222907 

mysqldump.exe: Couldn't execute 'SELECT engine FROM INFORMATION_SCHEMA.TABLES WHERE table_name = 'stats'': MySQL server has gone away (2006) 

mysqldump.exe: Couldn't execute 'SET SQL_QUOTE_SHOW_CREATE=1': MySQL server has gone away (2006) 

mysqldump.exe: Couldn't execute 'SELECT `COLUMN_NAME` AS `Field`, `COLUMN_TYPE` AS `Type`, `IS_NULLABLE` AS `Null`, `COLUMN_KEY` AS `Key`, `COLUMN_DEFAULT` AS `Default`, `EXTRA` AS `Extra`, `COLUMN_COMMENT` AS `Comment` FROM `INFORMATION_SCHEMA`.`COLUMNS` WHERE TABLE_SCHEMA = 'tweets' AND TABLE_NAME = 'stats'': MySQL server has gone away (2006) 

mysqldump.exe: Couldn't execute 'UNLOCK TABLES': MySQL server has gone away (2006) 

und in der mysql_error.log ich die folgende Meldung angezeigt und der Server heruntergefahren:

Server version: 10.1.8-MariaDB <br/> key_buffer_size=16777216 <br/> read_buffer_size=262144 <br/> max_used_connections=1 <br/> max_threads=1001 <br/> thread_count=1 <br/> It is possible that mysqld could use up to <br/> key_buffer_size + (read_buffer_size + sort_buffer_size)*max_threads = <br/> 787099 K bytes of memory Hope that's ok; if not, decrease some <br/> variables in the equation. 

Thread pointer: 0x0x5b93168 <br/> Attempting backtrace. You can use the <br/> following information to find out where mysqld died. If you see no <br/> messages after this, something went terribly wrong... <br/> mysqld.exe!my_parameter_handler() <br/> mysqld.exe!my_mb_ctype_mb()<br/> [email protected]@[email protected]()<br/> [email protected]@[email protected]()<br/> [email protected][email protected]@IAEXXZ()<br/> [email protected]@[email protected]()<br/> [email protected]@[email protected]()<br/> [email protected]@[email protected]()<br/> [email protected][email protected]@IAEXXZ()<br/> [email protected][email protected]@IAEXXZ()<br/> [email protected]@@[email protected]()<br/> [email protected]@[email protected]@@Z()<br/> [email protected]@YA? [email protected]@[email protected]@[email protected]@[email protected]() <br/> [email protected]@[email protected]@[email protected]@[email protected]@[email protected]@Z() <br/> [email protected]@@QAEXXZ() <br/> [email protected]@@QAEXXZ()<br/> [email protected]@[email protected]@[email protected]@[email protected]@[email protected]()<br/> [email protected]@[email protected]@@Z()<br/> [email protected]@[email protected]@@Z()<br/> [email protected]@[email protected]@[email protected]@@Z()<br/> [email protected]@[email protected]@[email protected]@[email protected]()<br/> [email protected]@[email protected]@@Z()<br/> [email protected]@[email protected]@@Z()<br/> [email protected]@YAXXZ() <br/> KERNEL32.DLL!SetUserGeoID()<br/> ntdll.dll!TpSimpleTryPost() <br/> ntdll.dll!EtwNotificationRegister()<br/> KERNEL32.DLL!BaseThreadInitThunk()<br/> ntdll.dll!RtlUnicodeStringToInteger()<br/> ntdll.dll!RtlUnicodeStringToInteger()<br/> 

Trying to get some variables. Some pointers may be invalid and cause<br/> the dump to abort. Query (0x5b9a908): SELECT /*!40001 SQL_NO_CACHE */<br/> 
* FROM `searchresults` <br/> Connection ID (thread ID): 2 <br/> Status: NOT_KILLED<br/> 

Bisher habe ich versucht:

  1. I gesetzt innodb_force_recovery im my.ini zu 1 und 6
  2. I verwendet, um die Parameter "force", "skip-extended-insert" und " --hex-Blob“für die mysqldump.exe
  3. habe ich phpMyAdmin, MySQL Workbench und sogar versucht, die Microsoft SQL Migration Tool die Datenbank in einer MSSQL-Datenbank zu konvertieren
  4. ich die max_allowed_packet Option in der my.ini
  5. erhöht
  6. Ich habe einen Hex-Editor verwendet, um die beschädigte Zeile in der .idb-Datei zu finden, um sie zu löschen, aber ich konnte nicht fi nd, was muss ich löschen
  7. meine Backup verwenden, aber der Fehler ist schon drin
  8. „Repair Table“, aber ich bekomme die folgende Antwort „Die Speicher-Engine für die Tabelle nicht unterstützt Reparatur“
  9. Bauen Sie die Tabelle mit "ALTER TABLE searchresultsults ENGINE = InnoDB;" aber der Fehler tritt während der Neuerstellung auf.
  10. Wenn Sie den Parameter innodb_log_file_size in der Datei my.ini auf das Maximum von 4G setzen, wird derselbe Fehler ausgegeben.
  11. einen anderen Computer

Ich bin Verwenden Sie ziemlich sicher, dass es ein korrupten Daten-Set in Zeile 5222907 oder 5222908 ist und deshalb der Server abstürzt. Es wäre völlig in Ordnung für mich, eine Zeile zu verlieren, wenn ich danach auf die restlichen Daten zugreifen kann. Ich könnte sogar die ersten 5222908 Zeilen verlieren. Aber wenn ich die korrupten Daten nicht löschen kann. Wenn ich die Abfrage verwende

DELETE FROM searchresults LIMIT 5222908 

Der Server stürzt erneut ab.

Ich wäre sehr dankbar für alle Tipps zu diesem Thema. Die Daten sind mir sehr wichtig, weil ich sie für meine Masterarbeit brauche, die sehr bald fällig ist.

Vielen Dank für Ihre Zeit und Mühe!

EDIT: Dies ist meine Tabellenstruktur (Hinweis, es gibt keine Schlüssel oder Indizes):

CREATE TABLE `searchresults` (
`id` bigint(20) DEFAULT NULL, 
`user` varchar(50) CHARACTER SET latin1 DEFAULT NULL, 
`createdAt` timestamp NULL DEFAULT NULL, 
`retweetcount` int(11) DEFAULT NULL, 
`favoritecount` int(11) DEFAULT NULL, 
`message` varchar(500) CHARACTER SET latin1 DEFAULT NULL 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_german1_ci 

EDIT: ich eine INSERT INTO wie folgt verwendet:

SELECT id INTO OUTFILE 'C:/Temp/allCount.csv' FIELDS TERMINATED BY ',' 
OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n' FROM searchresults; 

Und je nach der Spalte Ich wähle (id, retweetcount etc.) Ich bekomme eine andere Anzahl von Zeilen. Sie sind immer niedriger als 5222907, aber das bedeutet, dass das Problem immer noch etwas Parameterbezogenes anstelle eines Korruptionsfehlers sein kann. Was denken Sie? Kennen Sie einige zusätzliche Parameter, die ich in der mysql-Konfiguration anpassen könnte?

+0

Schauen Sie sich den MySQL-Befehl "REPAIR TABLE ..." an. Es ist gut dokumentiert. – arkascha

+0

reparieren Sie die Tabelle. Wenn das nicht funktioniert, müssen Sie von vorne beginnen und auch bessere Backups erstellen. –

+0

Ich habe vergessen, das zu erwähnen. Ich habe auch versucht "Repair Table", aber ich bekomme die folgende Antwort "Die Speicher-Engine für den Tisch unterstützt keine Reparatur". – besserwisser

Antwort

0

Sie könnten diese Eigenschaften von MySQL-Server prüfen ändern:

nano /etc/mysql/my.cnf

query_cache_size=16M 
key_buffer_size=256M 

Oder vielleicht sogar versuchen, die zulässige Ausführungszeit für die Abfrage von MySQL-Client zu erhöhen :

SET GLOBAL MAX_STATEMENT_TIME=1000; 

bevor Sie Ihre Abfrage ausführen.

+0

Keine der drei Optionen macht einen Unterschied. Ich nicht denke, dass es sich um ein Speicherproblem handelt, vermutlich handelt es sich um ein Datenkorruptionsproblem! – besserwisser