我发现自己正在照顾旧的testlink安装,所有负责人员都离开了,距我认真从事SQL工作已经有好几年了。
基础数据库为版本5.5.24-0ubuntu0.12.04.1
我没有所有密码,但是我有足够的权限进行无锁备份;
mysqldump --all-databases --single-transaction -u testlink -p --result-file=dump2.sql
我真的不想尝试恢复数据!
我们需要增加testlink中name字段的长度,各种页面使我增加了nodes_hierarchy表中字段的长度。
备份产生了这个结果
CREATE TABLE `nodes_hierarchy` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(100) DEFAULT NULL,
`parent_id` int(10) unsigned DEFAULT NULL,
`node_type_id` int(10) unsigned NOT NULL DEFAULT '1',
`node_order` int(10) unsigned DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `pid_m_nodeorder` (`parent_id`,`node_order`)
) ENGINE=MyISAM AUTO_INCREMENT=184284 DEFAULT CHARSET=utf8;
我只有一次真正的机会来解决这个问题,并且不会丢失任何数据。这看起来完全正确吗?
ALTER TABLE nodes_hierarchy MODIFY name VARCHAR(150) DEFAULT NULL;
答案 0 :(得分:1)
那是正确的语法。
备份
无论此操作多么安全,都应备份数据库。似乎您已经在计划它。您不太可能遇到问题。备份只是一种保险计划,可以解决不太可能发生的情况。
测试表
您似乎拥有约20万条记录。我建议您通过执行以下操作来复制此表:
CREATE TABLE `test_nodes_hierarchy` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(100) DEFAULT NULL,
`parent_id` int(10) unsigned DEFAULT NULL,
`node_type_id` int(10) unsigned NOT NULL DEFAULT '1',
`node_order` int(10) unsigned DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `test_pid_m_nodeorder` (`parent_id`,`node_order`)
) ENGINE=MyISAM AUTO_INCREMENT=184284 DEFAULT CHARSET=utf8;
填充测试表
在测试表中填充:
insert into test_nodes_hierarchy
select *
from nodes_hierarchy;
在此测试表上运行更改状态
查找alter语句将在测试表上花费多长时间。
ALTER TABLE test_nodes_hierarchy
MODIFY name VARCHAR(150) DEFAULT NULL;
重命名测试表
使用以下方法重命名测试表:
RENAME TABLE test_nodes_hierarchy TO test2_nodes_hierarchy;
一旦您知道花费的时间,就知道在主表上会发生什么。如果出现问题,您可以替换掉nodes_hierarchy表,然后重命名test_nodes_hierarchy表。
那只会建立起对该行动的信心。