ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

优化MySQL导入(将详细的SQL转储转换为快速的SQL转储/使用扩展插入)

2019-11-23 09:16:20  阅读:195  来源: 互联网

标签:import text-processing mysql


我们将mysqldump与–complete-insert –skip-extended-insert选项一起使用,以创建保存在VCS中的数据库转储.我们使用这些选项(和VCS)可以轻松比较不同的数据库版本.

现在,导入转储需要花费相当长的时间,因为-当然,每个数据库行都有单个插入.

是否有一种简单的方法可以将这样的详细转储转换为一个,而每个表只有一个插入?有人可能已经手头上有一些脚本吗?

解决方法:

我写了一个小的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测试database dumps上运行,因此它可以处理不重要的转储文件.

无论如何,这是脚本:

#!/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

让我知道你是怎么办的!

标签:import,text-processing,mysql
来源: https://codeday.me/bug/20191123/2066529.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有