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 …