Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Optymalizacja importu MySQL (konwertowanie pełnego zrzutu SQL do szybkiego / użyj rozszerzonych wstawek)

Napisałem mały skrypt w Pythonie, który konwertuje to:

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');

do tego:

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');

Nie jest zbyt ładna ani dobrze przetestowana, ale działa na Sakili test zrzuty bazy danych , dzięki czemu może obsługiwać nietrywialne pliki zrzutów.

W każdym razie, oto skrypt:

#!/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(';')

Oczekuje potoków wejściowych na stdin i wydruków na standardowe wyjście. Jeśli zapisałeś skrypt jako mysqldump-convert.py , użyjesz go w ten sposób:

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

Daj mi znać, jak sobie radzisz!




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wielokrotne połączenie lewe z sumą

  2. Lepszy sposób na wybranie wszystkich kolumn z pierwszej tabeli i tylko jednej kolumny z drugiej tabeli na sprzężeniu wewnętrznym

  3. MySQL:prosty sposób na przełączanie wartości pola int

  4. Wywołanie procedury składowanej , gdy nazwa procedury w zmiennej w mysql

  5. Jak używać przy usuwaniu kaskadowym w mysql?