Het probleem

Laatst liepen we bij een van onze klanten tegen het probleem op dat er een foutmelding werd weergegeven bij het importeren van een MySQL dump van een Magento installatie op een andere omgeving. Deze foutmelding zag er ongeveer zo uit:

  1. ERROR 1227 (42000) at line 17899: Access denied; you need (at least one of) the SUPER privilege(s) for this operation

En de regel waar naar verwezen word in het MySQL bestand zag er ongeveer uit als:

  1. /*!50013 DEFINER= `mysql_user`@ `% ` SQL SECURITY DEFINER */

Het probleem was dat een aantal virtuele tabellen (views) van een ERP module binnen de MySQL database verbonden waren met een MySQL gebruiker die niet op dit systeem bestond. Deze afhankelijkheid er uit halen was een kwestie van een aantal regels verwijderen uit het .sql bestand maar begin daar maar eens handmatig aan in een bestand van +/- 3 GB, met miljoenen regels. Gelukkig zijn computers hier beter in en konden we met wat programmeerwerk een eenvoudig script maken dat dit oplost. Om het voor alle klanten eenvoudig te maken om dit zelf te doen of door ons te laten doen hebben we dit script gekoppeld aan een shell commando:

  1. cleanmysqldump SOURCE DEST

SOURCE kan hierin vervangen worden door het .sql bestand dat de afhankelijkheid heeft. DEST kan vervangen worden door de bestandsnaam die het opgeschoonde bestand mag krijgen. Een voorbeeld ziet er als volgt uit:

  1. cleanmysqldump magento_backup.sql clean_magento_backup.sql
  2. We are going to clean your sql file...
  3. Your sql file (clean_magento_backup.sql) is cleaned and ready for import.

Vind u het lastig om te onthouden hoe u dit commando moet gebruiken en/of wat de volgorde is? Dan kunt u alleen het commando "cleanmysqldump" gebruiken voor een stap voor stap instructie:

  1. cleanmysqldump
  2. List of sql files in your current directory:
  3. magento_backup.sql    clean_magento_backup.sql
  4. Witch sql file do you want to clean:
  5. _
  6. How do you want to call the cleaned version of your MySQL file? [default=clean_magento_backup.sql]
  7. _
  8. The given filename (clean_magento_backup.sql) for the clean version of your MySQL file already exists, do you want to overwrite this file? [yes/no default=no]
  9. _
  10. We are going to clean your sql file...
  11. Your sql file (clean_magento_backup.sql) is cleaned and ready for import.

In dit voorbeeld zie je eerst een lijst van MySQL bestanden die in de folder staan waar u zich bevind. Vervolgens word ons gevraagd welk bestand wij willen opschonen. We typen deze bestandsnaam over en drukken op enter. Er komt nu een vraag met hoe het opgeschoonde bestand mag worden genoemd. Hier hebben we de optie om zelf een naam te bedenken of de standaard naam te behouden door direct op enter te drukken. Wij kozen voor deze laatste optie. Omdat dit bestand al bestaat krijgen we nog de vraag of we hem willen overschrijven. Wij typen in dit voorbeeld "yes", waarna het bestand opgeschoond word.

Hulp nodig

Mocht u hulp nodig hebben dan staan we graag voor u klaar. Neem dus gerust contact met ons op.