Безопасно изменить столбец в MySQL 5.5 - PullRequest
0 голосов
/ 29 апреля 2019

Я обнаружил, что присматриваю за старой установкой testlink, все ответственные лица ушли, и прошло много лет с тех пор, как я серьезно занимался SQL.

Базовая база данных - версия 5.5.24-0ubuntu0.12.04.1

У меня нет всех паролей, но у меня достаточно прав для резервного копирования без блокировок;

  mysqldump --all-databases --single-transaction -u testlink -p --result-file=dump2.sql

Я действительно не хочу попытки восстановить данные!

Нам нужно увеличить длину поля имени в testlink, различные страницы приводят меня к увеличению длины поля в таблице node_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;

1 Ответ

1 голос
/ 29 апреля 2019

Это правильный синтаксис.

Резервное копирование

Вы должны сделать резервную копию базы данных независимо от того, насколько безопасна эта операция. Кажется, вы уже планируете это. Вряд ли у вас будут проблемы. Резервное копирование - это просто страховой полис на случай непредвиденных ситуаций.

Тестовый стол

Кажется, у вас ~ 200К записей. Я бы порекомендовал вам сделать копию этой таблицы, выполнив:

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;

Как только вы знаете, сколько времени занимает, вы знаете, чего ожидать на главном столе. Если что-то идет не так, как надо, вы можете заменить удаление таблицы node_hierarchy и просто переименовать таблицу test_nodes_hierarchy.

Это только укрепит доверие к операции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...