sql >> Database >  >> RDS >> Mysql

MySQL-import optimaliseren (een uitgebreide SQL-dump converteren naar een Speedy One / extended-inserts gebruiken)

Ik heb een klein python-script geschreven dat dit omzet:

LOCK TABLES `actor` WRITE;
/*!40000 ALTER TABLE `actor` DISABLE KEYS */;
INSERT INTO `actor` (`actor_id`, `first_name`, `last_name`, `last_update`) VALUES (1,'PENELOPE','GUINESS','2006-02-15 12:34:33');
INSERT INTO `actor` (`actor_id`, `first_name`, `last_name`, `last_update`) VALUES (2,'NICK','WAHLBERG','2006-02-15 12:34:33');
INSERT INTO `actor` (`actor_id`, `first_name`, `last_name`, `last_update`) VALUES (3,'ED','CHASE','2006-02-15 12:34:33');

hierin:

LOCK TABLES `actor` WRITE;
/*!40000 ALTER TABLE `actor` DISABLE KEYS */;
INSERT INTO `actor` VALUES(1,'PENELOPE','GUINESS','2006-02-15 12:34:33'),(2,'NICK','WAHLBERG','2006-02-15 12:34:33'),(3,'ED','CHASE','2006-02-15 12:34:33');

Het is niet erg mooi of goed getest, maar het werkt op de Sakila test databasedumps , zodat het niet-triviale dumpbestanden aankan.

Hoe dan ook, hier is het script:

#!/usr/bin/env python
# -*- coding: utf-8 -*- #

import re
import sys

re_insert = re.compile(r'^insert into `(.*)` \(.*\) values (.*);', re.IGNORECASE)

current_table = ''

for line in sys.stdin:
    if line.startswith('INSERT INTO'):
        m = re_insert.match(line)
        table = m.group(1)
        values = m.group(2)

        if table != current_table:
            if current_table != '':
                sys.stdout.write(";\n\n")
            current_table = table
            sys.stdout.write('INSERT INTO `' + table + '` VALUES ' + values)
        else:
            sys.stdout.write(',' + values)
    else:
        if current_table != '':
            sys.stdout.write(";\n")
            current_table = ''
        sys.stdout.write(line)

if current_table != '':
    sys.stdout.write(';')

Het verwacht doorgesluisde invoer op stdin en prints naar stdout. Als je het script hebt opgeslagen als mysqldump-convert.py , zou je het als volgt gebruiken:

cat ./sakila-db/sakila-full-dump.sql | python mysqldump-convert.py > test.sql

Laat me weten hoe het je vergaat!




  1. Adminer - Een geavanceerde webgebaseerde databasebeheertool voor Linux

  2. Hoe voeg ik op de juiste manier meerdere rijen in PG in met node-postgres?

  3. Dynamische variabelenamen in MySQL

  4. Een getal naar boven afronden naar het dichtstbijzijnde gehele getal in SQL