我有两个mysql数据库,它们具有几乎相同的结构,并代表同一个web应用程序的数据,但其中一个代表当前版本,另一个是很久以前制作的。
如何创建包含两个转储的数据库,但对第一个数据库中的表使用old_前缀,对第二个数据库中的表使用new_前缀?
是否有任何mysqldump选项来设置前缀或其他解决方案?
发布于 2010-03-22 10:21:35
这个sed脚本可能更安全一些。将其保存到一个文件中,并使用sed -f过滤转储文件。
s/\(-- Table structure for table `\)\([^`]\+\)\(`\)/\1xyzzy_\2\3/
s/\(DROP TABLE IF EXISTS `\)\([^`]\+\)\(`\)/\1xyzzy_\2\3/
s/\(CREATE TABLE `\)\([^`]\+\)\(` (\)/\1xyzzy_\2\3/
s/\(-- Dumping data for table `\)\([^`]\+\)\(`\)/\1xyzzy_\2\3/
s/\(\/\*!40000 ALTER TABLE `\)\([^`]\+\)\(` DISABLE KEYS \*\/\)/\1xyzzy_\2\3/
s/\(LOCK TABLES `\)\([^`]\+\)\(` WRITE\)/\1xyzzy_\2\3/
s/\(INSERT INTO `\)\([^`]\+\)\(` VALUES (\)/\1xyzzy_\2\3/
s/\(\/\*!40000 ALTER TABLE `\)\([^`]\+\)\(` ENABLE KEYS \*\/\)/\1xyzzy_\2\3/
搜索xyzzy_并将其替换为所需的表前缀。
发布于 2009-12-17 03:51:19
将它们导入到不同的数据库中。假设他们被称为newdb
和olddb
。然后,您可以将table1复制到old_table1,如下所示:
insert into newdb.old_table1
select *
from olddb.table1
如果您有大量的表,请生成一个脚本来复制它们:
select concat('insert into newdb.old_', table_name,
'select * from olddb.', table_name, ';')
from information_schema.tables
where table_schema = 'olddb'
发布于 2009-12-17 04:00:56
我以前使用mysqldump
和sed
做过以下事情,但我承认它一次可能只对一个表有效。
$ mysqldump -u user --password=mypass MyDB MyTable | sed s/MyTable/old_Mytable/ | mysql -u other_user -p NewDB
您可以创建一个shell脚本,其中包含一系列命令,每个表一个,或者另一个用户可以修改此脚本,以便在一次操作中有效地处理多个表。
同级
https://stackoverflow.com/questions/1917021
复制相似问题