MySQL, PhpMyadmin, Console – Scinder des tables MySQL trop importantes, les bonnes pratiques pour la migration d’une base de données MySQL


Un petit amendement à l’article précèdent, en effet, les tables d’une base MySQL sont parfois bien plus volumineuses que la limite d’importation via PhpMyadmin offerte par un hébergement mutualisé. Sur OVH, on le rappelle, cette limite est souvent de 16 Mo, c’est à dire rien du tout.

Vous pouvez donc être amené(e) à scinder (spliter) une BDD notamment des tables en un plus petit nombre de fichiers .sql pour la même table d’une base*. On va donc voir comment à l’aide des commandes SQL dans la console, on peut scinder une table volumineuse en plus une série de plus petits fichiers .sql.

* par analogie macabre et de mauvais goût, totalement assumé, il est toujours plus facile de faire disparaitre un corps en petit morceaux que d’essayer d’enterrer le cadavre entier de votre forfait :):) C’est une vraie technique d’equarrissage de Base de données

On vous invite à lire le premier article sur la scission des BDD

Commande MySQL pour la découpe d’une table

Pour se faire, on va reprendre notre installation sous WordPress dont la table wp_posts est très importante et enfonce largement la limite des 16 Mo offert par notre espace d’hébergement mutualisé. On va donc scinder la table wp_posts en 4 fichiers distincts qui permettront de reconstruire la table wp_posts dans notre nouvel espace d’hébergement mutualisé.

Bien vider la nouvelle table de votre nouvelle BDD (on dirait une recette de cuisine, c’est à peu près cela !!!)

TRUNCATE wp_posts;

Le plus sage est de la faire carrément disparaître. Du passé faisons table rase… Nous allons la récréer ensuite au moment de l’injection du premier fichier de dump.

DROP TABLE fr_posts;

Faire une requête de sélection limitée à une plage d’ID

Une des choses les plus importantes est bien de scinder à part égale l’ensemble des enregistrements de votre table sans en omettre aucun. Il existe deux façons en SQL de faire ce type de requête. Le mieux est de pouvoir prendre un échantillon de rows ou d’enregistrement à l’aide des 2 types de requête de sélection.

La clause BETWEEN
Vous allez utiliser la clause BETWEEN pour sélectionner, les 500 premiers enregistrements puis les 500 suivants… et ainsi de suite.

	# Sélectionner les 500 premiers enregistrements de la TABLE wp_posts
	SELECT * FROM wp_posts WHERE ID BETWEEN 0 AND 500;
	# Sélectionner les enregistrements 501 à 1000 de la TABLE wp_posts
	SELECT * FROM wp_posts WHERE ID BETWEEN 501 AND 1000;

La clause LIMIT
Vous pouvez aussi utiliser la clause LIMIT pour sélectionner, les 500 premiers enregistrements puis les 500 suivants… et ainsi de suite.

		# Sélectionner les 500 premiers enregistrements de la TABLE wp_posts
		SELECT * FROM wp_posts ORDER BY ID ASC LIMIT 0, 500;
		# Sélectionner les enregistrements 501 à 1000 de la TABLE wp_posts
		SELECT * FROM wp_posts ORDER BY ID ASC LIMIT 500, 500;

Une fois vaut requête prête, vous allez pouvoir “équarrir” la grosse table, en l’espèce la table wp_posts d’un site WP. Voilà la marche à suivre.

  1. Le 1er fichier de dump va emporter les premiers enregistrements de votre table ainsi que la structure.
  2. Le 2ème fichier de dump va emporter uniquement les données d’enregistrement sur la plage d’ID que vous aurez choisi. On progresse sur un échantillon de 2500 enregistrements.
  3. Le 3ème fichier de dump va emporter uniquement les données d’enregistrement sur la plage d’ID que vous aurez choisi. On progresse sur un échantillon de 2500 enregistrements.
  4. Le 4ème fichier de dump va emporter uniquement les données d’enregistrement sur la plage d’ID que vous aurez choisi. On progresse sur un échantillon de 2500 enregistrements.

La structure et les 2500 premières données

	# DUMP STRUCTURE AND datas part 1
	/Applications/MAMP/Library/bin/mysqldump -c -u root -p  --single-transaction --opt --where="ID BETWEEN 0 AND 2500" h3wdoc wp_posts > /Users/nom-de-user/Documents/le-chemin-vers-vos-datas-de-migration/wp_posts_part_1_datas_and_structure.sql

Envoi de la première commande d’export
MySQL, PhpMyadmin, Console - Scinder des tables MySQL trop importantes, les bonnes pratiques pour la migration d'une base de données MySQL

L’import sous phpMyadmin sur OVH
MySQL, PhpMyadmin, Console - Scinder des tables MySQL trop importantes, les bonnes pratiques pour la migration d'une base de données MySQL

Les 2500 données suivantes plage 2, le --no-create-db --no-create-info évite de prendre la structure.

	# DUMP ONLY datas part 2
	/Applications/MAMP/Library/bin/mysqldump -c -u root -p --no-create-db --no-create-info --single-transaction --opt --where="ID BETWEEN 2501 AND 5000" h3wdoc fr_posts > /Users/nom-de-user/Documents/le-chemin-vers-vos-datas-de-migration/wp_posts_part_2_datas.sql

Les 2500 données suivantes plage 3, le --no-create-db --no-create-info évite de prendre la structure.

	# DUMP ONLY datas part 3
	/Applications/MAMP/Library/bin/mysqldump -c -u root -p --no-create-db --no-create-info --single-transaction --opt --where="ID BETWEEN 5001 AND 7500" h3wdoc fr_posts > /Users/nom-de-user/Documents/le-chemin-vers-vos-datas-de-migration/wp_posts_part_3_datas.sql

Les 2500 données suivantes plage 4, le --no-create-db --no-create-info évite de prendre la structure.

	# DUMP ONLY datas part 4
	/Applications/MAMP/Library/bin/mysqldump -c -u root -p --no-create-db --no-create-info --single-transaction --opt --where="ID BETWEEN 7501 AND 10000" h3wdoc fr_posts > /Users/nom-de-user/Documents/le-chemin-vers-vos-datas-de-migration/wp_posts_part_4_datas.sql

Une fois l’ensembles des commandes d’export passé en local dans la client MySQL
MySQL, PhpMyadmin, Console - Scinder des tables MySQL trop importantes, les bonnes pratiques pour la migration d'une base de données MySQL

Conclusion : On se retrouve donc avec 4 fichiers .sql de petites tailles. Il ne reste alors plus qu’à les injecter, dans l’ordre croissant pour recréer votre table volumineuse et l’affaire sera jouée.

En savoir plus