Задавайте вопросы, мы ответим
Вы не зашли.
В связи с предыдущей моей темой, возник еще один вопрос.
Есть большая таблица (>2 Гб, около 500 тыс записей). Нужно изменить структуру таблицы, заменив TEXT на BLOB.
НО при изменении структуры такой большой таблицы через PHPmyadmin сервер не справляется.
В связи с этим возник вопрос:
Каким образом изменить структуру такой большой таблицы чтобы сервер не ушёл в даун?
Неактивен
Оператор ALTER TABLE работает, создавая временную копию исходной таблицы. Изменения осуществляются на копии, затем исходная таблица удаляется и новая переименовывается.
Так что логично, что в случае большой таблицы этот процесс окажется не быстрым.
В чем у вас проявляется "сервер не справляется"?
Неактивен
Ну и в данном случае Вам может оказаться полезным таки разобраться в кодировках
Я бы начал с изучения SHOW CREATE TABLE на двух машинках, есть ощущение, что
там разные кодировки на сжатых колонках.
Неактивен
По идее, не зависит, через какой клиент давать команду на изменение таблицы (если, конечно, PHPMyAdmin не изобрел в этом плане что-нибудь своё, но это вряд ли).
При любом изменении структуры таблицы делаются одни и те же операции: создаётся и заполняется копия таблицы, потом она переименовывается, а старая удаляется, так что тут дело не в конкретной структуре таблицы, а в самой необходимости внесения изменений.
Вообще это не очень большая, если честно. Может быть связано с активным её использованием. Сколько запросов идёт к ней в секунду и какого они характера?
Неактивен
В чем у вас проявляется "сервер не справляется"? написал:
SQL-запрос:
ALTER TABLE `имя_таблицы` CHANGE `имя_столбца` `имя_столбца` BLOB NOT NULL
Ответ MySQL:
#1053 - Server shutdown in progress
Ошибка
SQL-запрос:
SHOW FULL FIELDS FROM `имя_таблицы` FROM `имя_базы` LIKE 'имя_столбца';
Ответ MySQL:
#2006 - MySQL server has gone away
Оператор ALTER TABLE работает, создавая временную копию исходной таблицы. Изменения осуществляются на копии, затем исходная таблица удаляется и новая переименовывается. написал:
Теперь понятно в чем дело. Просто на хостинге, где находится база, максимальный размер базы данных предоставляется 3 Гб. Так как таблица занимает около 2 Гб, то структуру я сам поменять не смогу. Придется писать в техподдержку, может там помогут.
Неактивен
Ну, Ваш запрос просто прибивается со стороны сервера (возможно, там стоит
watchdog какой-то?), поэтому он и не отрабатывает.
Если разберетесь с кодировками, то и конвертировать будет не нужно.
Неактивен
To paulus
А что такое "watchdog"? Я представлял себе это как прогу, которая мониторит состояние сервера и если он повис, то делает ему restart. Вопрос в том, как он может прибить конкретный запрос к базе? Или имеется в виду что-то другое?
Неактивен
Watchdog — это такая собака, которая сидит и сторожит. Что она сторожит — это отдельный
вопрос. Тут, например, она может сторожить, чтобы люди не запускали запросы, которые
выполняются больше, скажем, 30 секунд.
Неактивен
Вот что мне предложили в техподдержке:
А в бинарном формате дамп не подойдёт? Можете скачать его и произвести необходимые операции хоть локально..
Не могли бы Вы пояснить про дамп в бинарном формате?
У меня в свою очередь возникла идея:
Нельзя ли скачать саму папку с базой где находятся файлы *.myd, *.myi, *.frm ну и пр. По умолчанию они находятся в /var/lib/mysql/имя_базы. Если перенести эти файлы на другой хост по идее должно всё работать. Будет ли это работать на самом деле?
Неактивен
Они это Вам и предложили; должно работать.
Неактивен