Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Mengoptimalkan Impor MySQL (Mengonversi Verbose SQL Dump menjadi Speedy One/menggunakan sisipan yang diperluas)

Saya menulis skrip python kecil yang mengubah ini:

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

menjadi ini:

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

Ini tidak terlalu cantik atau teruji dengan baik, tetapi berfungsi pada Sakila uji database dump , sehingga dapat menangani file dump non-sepele.

Berikut scriptnya:

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

Ia mengharapkan input yang disalurkan pada stdin dan mencetak ke stdout. Jika Anda menyimpan skrip sebagai mysqldump-convert.py , Anda akan menggunakannya seperti ini:

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

Beri tahu saya cara Anda melakukannya!




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. masukkan kueri dengan ajax tanpa memuat ulang seluruh halaman

  2. Penggeser Formulir HTML

  3. Jadikan mysql case sensitif?

  4. Periksa nilai di baris MySQL

  5. Pelajari tentang Izin Tingkat Tabel MySQL