
MySQL 8 is al een tijdje uit en langzaam aan beginnen servers-packages ook te upgraden van MySQL 5.7 naar MySQL 8. Op m'n development-omgeving test ik reeds geruime tijd met MySQL 8. Migratie loopt in de regel soepel, er zijn echter een aantal punten waar regelmatig tegen aan wordt gelopen,
- performance
- SQL-Queries werken niet meer
- authenticatie
1. Performance
Regelmatig willen databases nog wel eens met 'MyISAM'-tables werken. Dit is o.a. op te vragen met het commando 'SHOW CREATE TABLE `<table-name>`'. De laatste lijn is dan iets als: ) ENGINE=MyISAM AUTO_INCREMENT=807 DEFAULT CHARSET=utf8.
MyISAM tabellen werken onder MySQL 8 een stuk trager dan onder 5.7. Ook zijn MyISAM-tabellen vanaf MySQL 8 deprecated, wat aangeeft dat deze in de toekomst niet meer ondersteund gaan worden. Geadviseerd is dan ook te upgraden naar InnoDB. Tabellen omzetten van MyISAM naar InnoDB kan via het volgende commando,
ALTER TABLE `<table-name>` ENGINE=InnoDB;
Issues die wel eens voor kunnen komen hebben voornamelijk betrekking op indexes. Meer informatie hierover is te vinden op https://mariadb.com/kb/en/converting-tables-from-myisam-to-innodb/
2. SQL-Queries werken niet meer
MySQL was in het verleden erg tolerant met waardes die werden ingevoerd. Van onjuiste datum/tijd-waardes werd altijd het beste gemaakt en als het onjuist was werd er teruggevallen op 'null' waardes of algemene waardes als '0000-00-00 00:00:00'. Nieuwe versies zijn stukje bij beetje steeds stricter geworden. Er wordt nog wel ondersteuning geboden voor de oude manier door de 'sql_mode' in te stellen.
Mocht u een oude applicatie hebben die SQL-fouten genereerd na een upgrade is het de moeite waard het volgende commando te gebruiken nadat er verbonden is,
SET SQL_MODE='';
3. Authenticatie
Nieuwe MySQL-versies maken gebruik van andere authenticatie-methodes (authenticatie-plugins), waardoor het kan zijn dat uw applicatie geen verbinding meer kan maken met de MySQL server. Zorg er voor dat u een gebruiker aanmaakt met de oude 'mysql_native_password'-plugin en probeer dan opnieuw verbinding te maken.