Sproc verdwenen? (MySQL): verschil tussen versies

Uit De Vliegende Brigade
Naar navigatie springen Naar zoeken springen
 
(3 tussenliggende versies door dezelfde gebruiker niet weergegeven)
Regel 1: Regel 1:
 +
Zowel in maart 2018 als in juli 2018 merkte ik, dat een sproc verdwenen was terwijl ik MySQL Workbench aan het werk was.
 +
 +
Ik vermoed dat een onhandige toetscombinatie een rol speelt. In beide gevallen heb ik de sproc teruggekregen door 'm handmatig uit bestand ''/var/lib/mysql/mysql/proc.MYD'' te vissen.
 +
 +
== Backup, backup, backup ==
 +
 +
Belangrijk om voortdurend backups te maken, en terug te kunnen in de historie: Goede kans dat ik pas na een tijdje realiseer dat iets verdwenen is.
 +
 +
== Casus: Maart 2018 ==
 +
 
In maart 2018 crashte MySQL Workbench. Na herstarten leek de sproc waar ik op dat moment in werkte (genaamd <code>sq</code>), verdwenen te zijn. Hoe zit dat?
 
In maart 2018 crashte MySQL Workbench. Na herstarten leek de sproc waar ik op dat moment in werkte (genaamd <code>sq</code>), verdwenen te zijn. Hoe zit dat?
  
== Brainstorm: Oorzaak & oplossing ==
+
=== Brainstorm: Oorzaak & oplossing ===
  
 
* Ik las ergens dat Workbench het probleem kon zijn, en dat updaten van Workbench de oplossing zou kunnen zijn
 
* Ik las ergens dat Workbench het probleem kon zijn, en dat updaten van Workbench de oplossing zou kunnen zijn
Regel 11: Regel 21:
 
* Bestand dat hoort bij ''mysql.proc'' bekijken
 
* Bestand dat hoort bij ''mysql.proc'' bekijken
  
== Oplossingen & acties ==
+
=== Oplossingen & acties ===
  
* Ik heb de code teruggevonden in ''/var/lib/mysql/mysql/proc.MYD'' rond regel 31.027 → Gekopiëerd. Nu heb ik tenminste een primitieve backup
 
 
* <code>mysqlcheck --auto-repair -A -u <...> -p<...></code> - Hielp niet
 
* <code>mysqlcheck --auto-repair -A -u <...> -p<...></code> - Hielp niet
 
* <code>show create procedure sq</code> - Hielp niet
 
* <code>show create procedure sq</code> - Hielp niet
Regel 19: Regel 28:
 
* <code>repair table mysql.proc;</code> - Hielp niet
 
* <code>repair table mysql.proc;</code> - Hielp niet
 
* <code>mysqldump -n -d -t --routines --all-databases > sprocalot.sql</code> - Hielp niet
 
* <code>mysqldump -n -d -t --routines --all-databases > sprocalot.sql</code> - Hielp niet
 +
* <code>sudo mysql_upgrade</code> - Hielp niet
  
== Aanvullende gegevens ==
+
Ik heb de code teruggevonden in ''/var/lib/mysql/mysql/proc.MYD'' rond regel 31.027 → Gekopiëerd. Nu heb ik tenminste een primitieve backup
 +
 
 +
=== Aanvullende gegevens ===
  
 
* Sprocs worden opgeslagen in de ''sproc''-table van de mysql-systeemdatabase
 
* Sprocs worden opgeslagen in de ''sproc''-table van de mysql-systeemdatabase
 
* <code>select * from mysql.proc;</code> - Hierin kan ik de sproc terugzien
 
* <code>select * from mysql.proc;</code> - Hierin kan ik de sproc terugzien
 +
 +
== Casus: Juli 2018 ==
 +
 +
Tijdens compileren van de sproc waar ik op dat moment mee werkte, kreeg ik een ongebruikelijke foutmelding. Ik heb toen ''annuleren'' gekozen, en de sproc was weg.
 +
 +
Wat beter was geweest: Alle code kopiëren naar een externe teksteditor als backup.
  
 
== Bronnen ==
 
== Bronnen ==

Huidige versie van 12 jul 2018 om 18:05

Zowel in maart 2018 als in juli 2018 merkte ik, dat een sproc verdwenen was terwijl ik MySQL Workbench aan het werk was.

Ik vermoed dat een onhandige toetscombinatie een rol speelt. In beide gevallen heb ik de sproc teruggekregen door 'm handmatig uit bestand /var/lib/mysql/mysql/proc.MYD te vissen.

Backup, backup, backup

Belangrijk om voortdurend backups te maken, en terug te kunnen in de historie: Goede kans dat ik pas na een tijdje realiseer dat iets verdwenen is.

Casus: Maart 2018

In maart 2018 crashte MySQL Workbench. Na herstarten leek de sproc waar ik op dat moment in werkte (genaamd sq), verdwenen te zijn. Hoe zit dat?

Brainstorm: Oorzaak & oplossing

  • Ik las ergens dat Workbench het probleem kon zijn, en dat updaten van Workbench de oplossing zou kunnen zijn
  • Met mysqldump --routines backup maken en daarin de sproc terugvinden → Geen resultaten
  • Met mysql-client-commando show procedure status; de sproc terugvinden → Geen resultaten
  • mysql-client: sproc aanroepen → Geen resultaten
  • In bestanden op schijf zoeken
  • Bestaat er zoiets als db-recovery na een crash?
  • Bestand dat hoort bij mysql.proc bekijken

Oplossingen & acties

  • mysqlcheck --auto-repair -A -u <...> -p<...> - Hielp niet
  • show create procedure sq - Hielp niet
  • select name from mysql.proc; - Hielp niet
  • repair table mysql.proc; - Hielp niet
  • mysqldump -n -d -t --routines --all-databases > sprocalot.sql - Hielp niet
  • sudo mysql_upgrade - Hielp niet

Ik heb de code teruggevonden in /var/lib/mysql/mysql/proc.MYD rond regel 31.027 → Gekopiëerd. Nu heb ik tenminste een primitieve backup

Aanvullende gegevens

  • Sprocs worden opgeslagen in de sproc-table van de mysql-systeemdatabase
  • select * from mysql.proc; - Hierin kan ik de sproc terugzien

Casus: Juli 2018

Tijdens compileren van de sproc waar ik op dat moment mee werkte, kreeg ik een ongebruikelijke foutmelding. Ik heb toen annuleren gekozen, en de sproc was weg.

Wat beter was geweest: Alle code kopiëren naar een externe teksteditor als backup.

Bronnen