gpt4 book ai didi

mysql - 在 MySQL 5.5 中安全地更改列

转载 作者:行者123 更新时间:2023-11-29 09:44:40 24 4
gpt4 key购买 nike

我发现自己正在维护一个旧的 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;

最佳答案

这是正确的语法。

备份

无论此操作有多安全,您都应该备份数据库。看来你已经在计划了。您不太可能会遇到问题。备份只是一种保险政策,以应对不太可能发生的情况。

测试表

您似乎有约 200K 条记录。我建议您通过执行以下操作来复制此表:

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;

一旦你知道了需要的时间,你就知道主 table 上会发生什么。如果出现问题,您可以替换删除nodes_hierarchy表并重命名test_nodes_hierarchy表。

这只会建立对运营的信心。

关于mysql - 在 MySQL 5.5 中安全地更改列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55903041/

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