gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 08:19:59 26 4
gpt4 key购买 nike

我们使用带有选项 --complete-insert --skip-extended-insert 的 mysqldump 来创建保存在 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

告诉我你过得怎么样!

关于mysql - 优化 MySQL 导入(将详细的 SQL 转储转换为快速的一个/使用扩展插入),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16569429/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com