WordPress op EOL server

WordPress on EOL server

In WordPress kun je een sitediagnose uitvoeren. Om dit te doen ga je naar je WordPress panel en kies je voor Gereedschap. Tot slot kies je voor Sitediagnose. Het kan voorkomen dat een kritiekpunt wordt weergegeven dat een verouderde EOL database server wordt gebruikt voor je WordPress site. Binnen de basis en standaard hosting pakketten van Strato kan dat een Maria DB zijn of een MySQL database.

Kijken we op internet naar de end of life (EOL) voor Maria database, dan geldt het volgende.

WordPress op EOL server

En voor MySQL geldt het volgende.

WordPress op EOL server

We moeten op de site van MySQL doorscrollen om de versie te vinden die mijn Strato voor mij had geselecteerd.

WordPress op EOL server

WordPress op EOL server voor beide websites in mijn beheer

De versie die ik had voor de twee websites die ik in beheer heb waren respectievelijk voor VC Riethoven Maria DB 10.6 en voor de Digitale Mels website MySQL 5.7. Even gebeld met de support desk van Strato en het antwoord was dat dit niet iets dat zij doen, maar de mevrouw zou een stappenplan sturen. Aan het eind van de avond ontving ik in inderdaad een stappenplan. Inmiddels had ik MySQL 5.7 server al geupgraded naar MySQL 8.0. Nice.

Allereerst moet je controleren welke versie van database server in gebruik is. Ga hiervoor naar het portaal van Strato en kies voor Databasebeheer. Op de pagina Databaseheer vind je het type. Staat daar MySQL 5.7, dan wordt deze dus al jaren niet meer ondersteund. Not nice!

WordPress op EOL server

Installatie gedaan door Strato via een script – WordPress op EOL server

Hoe kan het dat een WordPress site die nog niet zo heel lang in de lucht is door Strato ingericht wordt met een verouderde EOL database server? Dit komt waarschijnlijk door het script dat gebruikt wordt om de Website-apps te installeren. Om een Strato Website-app te installeren, ga je binnen het Strato panel naar Website-apps. Het lijkt erop dat de installatie een willekeurige database selecteert.

WordPress op EOL server

Gelukkig biedt ChatGPT soelaas. De procedure is, later ook bevestigd door Strato, als volgt.

  • Via phpMyAdmin exporteer je de huidige database van de huidige server via de Quick methode
  • Via Databasebeheer kies je voor Database aanmaken
    • Het is aan te raden om de naam van de host, de database, de gebruikersnaam en het wachtwoord te noteren, aangezien je deze later nodig hebt. 
  • Via phpMyAdmin importeer je het nieuw aangemaakte SQL bestand
    • Het nieuw aangemaakte SQL bestand bevindt zich in de volgende locatie %userprofile%\Downloads
    • Het nieuw aangemaakte bestand is genaamd database.sql waarbij database gelijk staat aan de database dat je kan vinden op de Databasebeheer pagina binnen het Strato portal
    • Het nieuw aangemaakte bestand is gedownload van een onveilige locatie en is door Windows geblokkeerd
Geblokkeerd bestand eerst unblokken
  • Pas de wp-config.php bij met de nieuwe waarden
Aanpassen doorvoeren binnen wp-config.php via FTP programma
Aanpassen doorvoeren binnen wp-config.php via FTP programma

Als alles werkt, vergeet niet de oude database te verwijderen.

Problemen die voor kunnen komen tijdens upgrade WordPress op EOL server

Het importeren van de backup van de Maria DB 10.6 versie in de nieuwe MySQL 8.0 database ging in een keer goed. Er waren wel wat problemen met het importeren van de MySQL 5.7 database in de nieuwe MySQL 8.0 database. Gelukkig kon ik deze oplossen met behulp van CoPilot. De betaalde versie van CoPilot vroeg iedere keer het volgende: “Wil je dat ik je help met het opschonen van je .sql bestand? Je kunt het uploaden, dan kijk ik ernaar en verwijder ik automatisch de problematische statements.”. Dat had ik kunnen doen, maar ik vind dit persoonlijk helemaal geen best practice om een backup van een database met gevoelige gegevens naar een CoPilot te uploaden via een website. Je leer te ook zo niets van.

Eerste probleem – #1227

This is the error:#1227 - Access denied; you need (at least one of) the SUPER or SET_USER_ID privilege(s) for this operation

Het juiste antwoord van CoPilot. De fout wordt meestal veroorzaakt door regels zoals:

CREATE DEFINER=`root`@`localhost` ...

Via Visual Studio Code kun je het SQL bestand openen en zoeken naar de betreffende foutmelding die door phpmyAdmin wordt weergegeven. Je vindt dan de volgende regel.

CREATE ALGORITHM=UNDEFINED DEFINER=`o<<DATABASENAME>>`@`%` SQL SECURITY DEFINER VIEW `xkbe_uap_action_logs_view`  AS SELECT `a`.`automator_action_id` AS `automator_action_id`, `a`.`date_time` AS `action_date`, `a`.`completed` AS `action_completed`, `a`.`error_message` AS `error_message`, `a`.`automator_recipe_id` AS `automator_recipe_id`, `a`.`ID` AS `action_log_id`, `a`.`automator_recipe_log_id` AS `recipe_log_id`, `r`.`date_time` AS `recipe_date_time`, `r`.`completed` AS `recipe_completed`, `r`.`run_number` AS `recipe_run_number`, `pa`.`post_title` AS `action_title`, `am`.`meta_value` AS `action_sentence`, `p`.`post_title` AS `recipe_title`, `u`.`ID` AS `user_id`, `u`.`user_email` AS `user_email`, `u`.`display_name` AS `display_name` FROM (((((`xkbe_uap_action_log` `a` left join `xkbe_uap_recipe_log` `r` on((`a`.`automator_recipe_log_id` = `r`.`ID`))) left join `xkbe_posts` `p` on((`p`.`ID` = `a`.`automator_recipe_id`))) join `xkbe_posts` `pa` on((`pa`.`ID` = `a`.`automator_action_id`))) left join `xkbe_uap_action_log_meta` `am` on(((`a`.`automator_action_id` = `am`.`automator_action_id`) and (`am`.`automator_action_log_id` = `a`.`ID`) and (`am`.`user_id` = `a`.`user_id`) and (`am`.`meta_key` = 'sentence_human_readable_html')))) left join `xkbe_users` `u` on((`a`.`user_id` = `u`.`ID`))) GROUP BY `a`.`ID``ID` ;

Na dit te hebben aangepast, zag het er als volgt uit.

CREATE ALGORITHM=UNDEFINED VIEW `xkbe_uap_api_logs_view`  AS SELECT `api`.`ID` AS `ID`, `api`.`date_time` AS `date`, `u`.`user_email` AS `user_email`, `u`.`display_name` AS `display_name`, `u`.`ID` AS `user_id`, `pr`.`post_title` AS `recipe_title`, `rl`.`automator_recipe_id` AS `automator_recipe_id`, `al`.`automator_recipe_log_id` AS `recipe_log_id`, `rl`.`date_time` AS `recipe_date_time`, `rl`.`completed` AS `recipe_completed`, `rl`.`run_number` AS `recipe_run_number`, `pa`.`post_title` AS `title`, `asen`.`meta_value` AS `sentence`, `al`.`automator_action_id` AS `item_id`, `al`.`completed` AS `completed`, `al`.`error_message` AS `error_message`, `api`.`type` AS `type`, `api`.`item_log_id` AS `item_log_id`, `api`.`status` AS `status`, `api`.`params` AS `params`, `api`.`price` AS `price`, `api`.`balance` AS `balance`, `api`.`notes` AS `notes`, `api`.`time_spent` AS `time_spent`, `api`.`endpoint` AS `endpoint` FROM ((((((`xkbe_uap_api_log` `api` left join `xkbe_uap_action_log` `al` on((`al`.`ID` = `api`.`item_log_id`))) left join `xkbe_uap_recipe_log` `rl` on((`al`.`automator_recipe_log_id` = `rl`.`ID`))) left join `xkbe_posts` `pr` on((`pr`.`ID` = `al`.`automator_recipe_id`))) join `xkbe_posts` `pa` on((`pa`.`ID` = `al`.`automator_action_id`))) left join `xkbe_uap_action_log_meta` `asen` on(((`asen`.`automator_action_log_id` = `al`.`ID`) and (`asen`.`meta_key` = 'sentence_human_readable_html')))) left join `xkbe_users` `u` on((`al`.`user_id` = `u`.`ID`))) WHERE (`api`.`type` = 'action') union select `api`.`ID` AS `ID`,`api`.`date_time` AS `date`,`u`.`user_email` AS `user_email`,`u`.`display_name` AS `display_name`,`u`.`ID` AS `user_id`,`pr`.`post_title` AS `recipe_title`,`rl`.`automator_recipe_id` AS `automator_recipe_id`,`tl`.`automator_recipe_log_id` AS `recipe_log_id`,`rl`.`date_time` AS `recipe_date_time`,`rl`.`completed` AS `recipe_completed`,`rl`.`run_number` AS `recipe_run_number`,`pt`.`post_title` AS `title`,`tsen`.`meta_value` AS `sentence`,`tl`.`automator_trigger_id` AS `item_id`,`tl`.`completed` AS `completed`,'' AS `error_message`,`api`.`type` AS `type`,`api`.`item_log_id` AS `item_log_id`,`api`.`status` AS `status`,`api`.`params` AS `params`,`api`.`price` AS `price`,`api`.`balance` AS `balance`,`api`.`notes` AS `notes`,`api`.`time_spent` AS `time_spent`,`api`.`endpoint` AS `endpoint` from ((((((`xkbe_uap_api_log` `api` left join `xkbe_uap_trigger_log` `tl` on((`tl`.`ID` = `api`.`item_log_id`))) left join `xkbe_uap_recipe_log` `rl` on((`tl`.`automator_recipe_log_id` = `rl`.`ID`))) left join `xkbe_posts` `pr` on((`pr`.`ID` = `tl`.`automator_recipe_id`))) join `xkbe_posts` `pt` on((`pt`.`ID` = `tl`.`automator_trigger_id`))) left join `xkbe_uap_trigger_log_meta` `tsen` on(((`tsen`.`automator_trigger_log_id` = `tl`.`ID`) and (`tsen`.`meta_key` = 'sentence_human_readable')))) left join `xkbe_users` `u` on((`tl`.`user_id` = `u`.`ID`))) where (`api`.`type` = 'trigger') ;

Tweede foutmelding – #1054

#1054 - Unknown column '187definer' in 'field list'

Het SQL bestand bevatte de volgende regel.

(6451, 'https://www.digitalemels.nl/controleren-spam-binnen-outlook/', 1915, 1934, 'internal', 187definer, 195, NULL, NULL, NULL, NULL, NULL),

Antwoord van CoPilot was om 187 definer als tekst waarde te definieren en deze tussen enkele quotes te zetten of het als een getal te zien. De gecorrigeerde regel ziet er als volgt uit.

(6451, 'https://www.digitalemels.nl/controleren-spam-binnen-outlook/', 1915, 1934, 'internal', 187, 195, NULL, NULL, NULL, NULL, NULL),

Derde foutmelding – #1054

#1054 - Unknown column 'a.ID`ID' in 'group statement'

Volgens CoPilot kwam dit door een syntaxfout in de GROUP BY-clausule. Ik zou per ongeluk een dubbele kolomnaam of een foutieve quote hebben gebruikt. Maar ik heb deze code niet zelf aangemaakt, dit komt uit de backup.

De regel waar het om gaat, was de volgende.

... left join `xkbe_users` `u` on((`a`.`user_id` = `u`.`ID`))) GROUP BY `a`.`ID``ID` ;

Gecorrigeerde versie vanuit CoPilot.

... left join `xkbe_users` `u` ON (`a`.`user_id` = `u`.`ID`))
GROUP BY `a`.`ID`;

Vierde probleem – #1064

Vierde probleem was een foutmelding op basis van de correcties vanuit CoPilot. CoPiot kon dit niet oplossen, vandaar dat ik later overgestapt ben naar ChatGPT. De nieuwe foutmelding was de volgende.

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1

Het gedeelte van de regel waar het om ging.


... ON ((`p`.`ID` = `r`.`automator_recipe_id`)))) ;

Correctie vanuit CoPilot.

ON (`p`.`ID` = `r`.`automator_recipe_id`);

En dan gaan we zo een tijdje door. ChatGPT to the rescue dan maar. De gecorrigeerde regel was volgens ChatGPT de volgende.

FROM
    ((`xkbe_uap_recipe_log` `r`
    LEFT JOIN `xkbe_users` `u` ON (`u`.`ID` = `r`.`user_id`))
    JOIN `xkbe_posts` `p` ON (`p`.`ID` = `r`.`automator_recipe_id`));

Uiteindelijk was het gelukt.

Droppen van tabellen na foutieve import

Omdat op een gegeven moment de tabellen wel geimporteerd waren, maar niet de views, moest alles gereset worden na correctie van het import bestand. Dit kun je ook weer heel gemakkelijk doen via phpMyAdmin. Selecteer alle tabellen en kies voor With selected, Drop en tot slot kies je voor Yes. Dit doe je voor zowel Tables als Views.

Wil je met de auteur van deze blog post in contact komen, dan kan dat met het contact formulier op deze site.

0 Shares:
You May Also Like
Vakantie USA 2024
Read More

Vakantie USA 2024

Tijdens deze vakantie in USA in 2024, zijn de ervaringen bijgehouden met Polarsteps. Polarsteps is een innovatieve reisapp…