Mysql
 sql >> база данни >  >> RDS >> Mysql

Оптимизиране на MySQL Import (Преобразуване на подробен SQL Dump в Speedy One / използване на разширени вмъквания)

Написах малък скрипт на python, който преобразува това:

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

в това:

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

Не е много красив или добре тестван, но работи на Sakila тествайте думпове на база данни , така че може да обработва нетривиални дъмп файлове.

Както и да е, ето скрипта:

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

Той очаква въвеждане по канали на stdin и отпечатва към stdout. Ако сте запазили скрипта като mysqldump-convert.py , бихте го използвали така:

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

Кажете ми как се справяте!




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. къде е грешката в моя sql код?

  2. Как да извлечем поле от резултат от MySQL заявка в bash

  3. mysql ГРЕШКА 2002 (HY000):Не може да се свърже с локален MySQL сървър чрез сокет '/var/run/mysqld/mysqld.sock' (2)

  4. Как да ограничим резултатите в MySQL, PostgreSQL и SQLite

  5. MySQL динамична кръстосана заявка:Избиране на дъщерни записи като допълнителни колони