OBS/Adminhilfe/MySQL Tipps: Unterschied zwischen den Versionen
KKeine Bearbeitungszusammenfassung |
|||
| Zeile 59: | Zeile 59: | ||
ORDER BY table_name DESC; | ORDER BY table_name DESC; | ||
</source> | </source> | ||
==MySQL Locks== | |||
Um in einer Datenbank aktive Locks anzeigen zu lassen kann in MySQL eine Protokollierung in der ''metadata_locks'' Tabelle aktiviert werden. | |||
'''Aktivieren:''' | |||
<source lang="SQL"> | |||
UPDATE performance_schema.setup_instruments SET ENABLED = 'YES', TIMED = 'YES' | |||
WHERE NAME = 'wait/lock/metadata/sql/mdl'; | |||
</source> | |||
'''Deaktivieren:''' | |||
<source lang="SQL"> | |||
UPDATE performance_schema.setup_instruments SET ENABLED = 'NO', TIMED = 'NO' | |||
WHERE NAME = 'wait/lock/metadata/sql/mdl'; | |||
</source> | |||
Es kann dann einfach auf die Tabelle zugegriffen werden: | |||
<source lang="SQL"> | |||
SELECT * FROM performance_schema.metadata_locks; | |||
</source> | |||
Version vom 31. Mai 2018, 13:16 Uhr
Dies ist eine zugriffsgeschützte Seite.
- System Überwachung
- DEP deaktivieren
- Darstellung unter Windows 7
- Einwahl auf Windows 2000 Server
- Preislisten
- Datenbank Sicherung
- Customize
- Zentrale
- Support Macro
- Service Debug
- Historienprotokoll (Datenänderung OBS)
- Fernwartungsprobleme
- Startparameter
- Fehler beim Kassenabschluss
- Diverse Informationen
- A ras.pbk
- B Command Line Interpreter
- C File Zilla Benutzer XML erzeugen
- D1 OBS_UPDATE.EXE zum OBS Update Server hochladen
- D2 SUPPORT_MACRO zum OBS Update Server hochladen
- H1 Remote Service Protokoll-Übersicht (Alles)
- H Remote ServiceProtokoll-Übersicht
- I Remote Service Commands
- I1 (Admin) Globaler Hinweis für Updates
- J Liste der OBS Updates
- K Angemeldete Service Firmen
- L Systeminformationen einlesen
- M Kundendaten anzeigen
- M1 Kundendatenbankinformationen anzeigen
- N Kundendaten einlesen
- O Kunden-Update Informationen anzeigen
- P Modul Registrierung OBS
- Q App Verwaltung
- S1 Firmen Statistik Protokolle OBS
- S2 Statistik Notfallkassen
MySQL Tipps
MySQL DELETE Statements
Wenn man ein DELETE Statement braucht, in dem man einen JOIN auf auf die Tabelle benötigt, aus welcher man die Daten löschen möchte, gibt MySQL einen Fehler aus, dass man nicht auf die Tabelle joinen darf, aus welcher man löschen möchte.
Als Beispiel, doppelte Warengruppen aus der Wortmann Artikelpflege löschen:
DELETE
FROM P_WGR
WHERE EXISTS (
SELECT sys_uid
FROM P_WGR AS DUP
WHERE P_WGR.hwgr = DUP.hwgr
AND P_WGR.wgrname = DUP.wgrname
AND P_WGR.sys_uid <> DUP.sys_uid
AND liefnr = '700758')
ORDER BY hwgr;
So lässt sich dieses aber umgehen:
DELETE
FROM p_wgr
USING p_wgr, p_wgr AS DUP
WHERE p_wgr.sys_uid > DUP.sys_uid
AND p_wgr.hwgr = DUP.hwgr
AND p_wgr.liefnr = '700758'
Tabellen kopieren bei InnoDB
Habe mal ein wenig im Internet dazu geschaut und fast überall wird gesagt, man soll Tabellen bei InnoDB lieber per Dump kopieren. Bei MyISAM stellt das Kopieren kein Problem dar, aber bei InnoDB ist es sehr riskant und kann zu Problemen führen. Das Problem ist wohl, dass in der ibdata der Tablespace gespeichert wird und dieser nicht mit kopiert werden kann. http://serverfault.com/questions/367255/linux-mysql-is-it-safe-to-copy-mysql-db-files-with-cp-command-from-one-db-to
Es gibt hier noch eine Anleitung wir man den Table Space manuell setzen kann, wofür aber einiges an manueller Arbeit pro Tabelle vorgenommen werden muss,
was sich vermutlich am ehesten für Back Recovery eignet.
http://www.chriscalender.com/tag/innodb-error-tablespace-id-in-file/
Nachdem ich noch etwas weiter gelesen habe, habe ich herausgefunden , dass ab MySQL 5.6.6 wohl eine Möglichkeit besteht den Tablespace aus der Ibdata zu extrahieren:
https://dev.mysql.com/doc/refman/5.6/en/tablespace-copying.html
Hierfür muss jedoch pro Tabelle der Befehl FLUSH TABLES tabellenname FOR EXPORT; durchgeführt werden. Dadurch wird eine cfg Datei angelegt, die dann mit kopiert werden muss. Allerdings wird die Tabelle durch den Befehl gelockt und muss, nachdem sie kopiert wurde, per Befehl UNLOCK TABLES; wieder freigegeben werden, was eine Anwendung im laufenden Betrieb sehr unpraktikabel macht.
Table Engine zwischen MyISAM und InnoDB wechseln
Folgender SQL Befehl generiert für eine bestimmte Datenbank eine Reihe von SQL Befehlen, welche die Table Engine ändern. Diese können einfach in die Zwischenablage exportiert und anschließend in Heidi-SQL ausgeführt werden.
SELECT CONCAT('ALTER TABLE `', table_name, '` ENGINE=MYISAM;') AS sql_statements
FROM information_schema.tables AS tb
WHERE table_schema = 'Datenbankname'
AND `ENGINE` = 'InnoDB'
AND `TABLE_TYPE` = 'BASE TABLE'
ORDER BY table_name DESC;
MySQL Locks
Um in einer Datenbank aktive Locks anzeigen zu lassen kann in MySQL eine Protokollierung in der metadata_locks Tabelle aktiviert werden.
Aktivieren:
UPDATE performance_schema.setup_instruments SET ENABLED = 'YES', TIMED = 'YES'
WHERE NAME = 'wait/lock/metadata/sql/mdl';
Deaktivieren:
UPDATE performance_schema.setup_instruments SET ENABLED = 'NO', TIMED = 'NO'
WHERE NAME = 'wait/lock/metadata/sql/mdl';
Es kann dann einfach auf die Tabelle zugegriffen werden:
SELECT * FROM performance_schema.metadata_locks;