Il est toujours intéressant, lorsque l’on a de gros dump mysql, de pouvoir extraire une table précise au milieu du fichier. Et de préférence sans avoir à tout ré-insérer ou a ouvrir le fichier et a sélectionner dans le fichier à la main … 🙂

Je prends pour exemple le fichier SQL compressé : mysql_dump.sql.gz .

La première étape est de récupérer la liste des CREATE TABLE ainsi que leur position dans le fichier. Grep (et zgrep) va nous aider :

$ zgrep -ni '^CREATE TABLE' mysql_dump.sql.gz
25:CREATE TABLE `admin_database` (
62:CREATE TABLE `admin_db_server` (
95:CREATE TABLE `admin_server` (
125:CREATE TABLE `agregat_client` (
174:CREATE TABLE `agregat_client_domain` (
202:CREATE TABLE `agregat_client_themes` (
232:CREATE TABLE `agregat_collect_tool` (
261:CREATE TABLE `agregat_consent` (
298:CREATE TABLE `agregat_coreg` (
331:CREATE TABLE `agregat_filter_collect_tool` (
355:CREATE TABLE `agregat_import` (
383:CREATE TABLE `agregat_segment` (
414:CREATE TABLE `business_line` (
439:CREATE TABLE `campaign` (
...

On récupère ensuite le numéro de ligne de la table que l’on veux récupérer, par exemple agregat_collect_tool, ainsi que le numéro de la ligne de la table suivante, ce qui nous donne : 232 et 261.

Vu que mysqldump ajoute quelques instructions et des commentaires avant, on retire 5 à la ligne de départ.

Pour extraire la table agregat_collect_tool, on retrouve les 2 nombres : 232 et 261 . Le début des lignes à récupérer est 232 – 5 = 227 Le nombre de lignes à récupérer est 261 – 232 = 29

Et voici la ligne de commande pour extraire la table :

$> zcat mysql_dump.sql.gz | tail -n + 227 | head -n 29 > extract.sql

Il ne reste plus qu’à vérifier rapidement le fichier et à le réimporter dans mysql …