MariaDB : passage des tables système en InnoDB

Pour ceux d’entre vous qui ne seraient pas férus de MySQL / MariaDB en particulier, sachez que ce moteur de bases de données relationnelles contient un schéma – une database – dans lequel sont stockées toutes les tables dites système. Les données stockées dans la base mysql concernent avant tout la gestion des droits, à l’image des tables mysql.user et mysql.db. Au fil des versions et des évolutions fonctionnelles, elles se sont étoffées de données complémentaires à l’image des tables innodb_table_stats et innodb_index_stats. Et puis, vous y trouverez également les tables general_log et slow_log au format CSV qui consignent l’activité sur la base lorsque vous affectez la valeur ‘TABLE’ à la variable système log_output.

MariaDB : passage des tables système en InnoDB

La procédure de conversion des tables du schéma mysql au format InnoDB

Cinq bases ne peuvent pas être converties en InnoDB :

Les tables user, db et host peuvent être converties en Aria.

Ce script a été mis en œuvre sur MariaDB 10.2 ! La procédure convert_mysql_innodb est créée ici dans le schéma tools.

CREATE DATABASE tools;
USE tools;
-- DROP PROCEDURE IF EXISTS convert_mysql_innodb;
DELIMITER //
CREATE PROCEDURE convert_mysql_innodb()
BEGIN
	DECLARE done INT DEFAULT FALSE;
	DECLARE strTable VARCHAR(255);
	DECLARE curTables CURSOR FOR
		SELECT TABLE_NAME FROM information_schema.TABLES
		WHERE table_schema ='mysql' AND table_type='BASE TABLE' AND TABLE_NAME NOT IN ('db','host','user','general_log','slow_log');
	DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
	OPEN curTables;
	read_loop: LOOP
		FETCH curTables INTO strTable;
	    IF done THEN
	      LEAVE read_loop;
	    END IF;	
		SET @t=strTable;
		SET @sql=CONCAT('ALTER TABLE `mysql`.`',@t,'` ENGINE=InnoDB');
		PREPARE stmt FROM @sql;
		EXECUTE stmt;
		DEALLOCATE PREPARE stmt;
	END LOOP;
	CLOSE curTables;
END;
//
DELIMITER ;

Exécution de la procédure de conversion

Sous MySQL / MariaDB, l’exécution d’une procédure se fait à l’aide de l’instruction CALL :

CALL tools.convert_mysql_innodb();

MariaDB  / InnoDB MySQL Procédures stockées 

Commentaires

Pas encore de commentaire.

Laisser un commentaire

(requis)

(requis)