Main > Databases | MySQL > Перенос базы данных, debian-sys-maint и checking table

Перенос базы данных, debian-sys-maint и checking table

08.06.2013 0 comments » Views: 1,876

MySQL

Вчера переносил базу данных на новый сервер. База была в MyISAM поэтому просто скопировал бинарные файлы. После переноса и запуска mysql,  в процессах увидел что выполняется Checking table от пользователя debian-sys-maint...

Ну, я подумал, что может плохо остановил базу или что-о повредилось и процесс её восстанавливает. Однако, это восстановление затянулось.. После 6и часов, я все таки подумал что, что-то не так..

Проверил /var/log/mysql/mysql.err, он мне сообщил что следующее:

Это было странно..

Тогда я решил попробовать восстановить базу самостоятельно, с помощью myisamchk, и тут я обнаружил мой epic fail - я забыл поменять права на файлы базы. База работает от пользователя mysql:mysql, а при переносе я работал от root:root, соответственно такой владелец и остался и  права 0644 ограничили доступ mysql-у к файлам.

Конечно, это мой косяк, однако почему бы не писать в log, что-то типа: "чувак, не могу писать в файл, такой-то.." эхх..

Разобравшись с пользователем и нужными правами, я запустил myisamchk, с такими опциями:

На что получил сообщение, что быстрое восстановление невозможно, надо добавить опции -o -f, сказано - сделано:

На этот раз восстановление прошло успешно и я смог получить доступ к базе.

Вчера довольно долго пытался выбрать подходящую мне базу, под мои задачи. Основные требования были простые:

  • надо хранить хотя бы 10 млн записей, при размере базы в 30-50Гб
  • надо работать без потерь с many-to-many связями, а это значит чтобы избежать проблем при крахе (например сервер уйдет на перезагрузку), надо использовать транзакции.
  • надо иметь возможность переноса базы данных за разумное время
  • в будущем возможно нужна будет репликация и полнотекстовый поиск

Требования на мой взгляд не очень сложные, отбросив последний пункт, я решил все же подумать что мне нужно использовать: MySQL.MyISAM, MySQL.InnoDB или вообще перейти на Postgres. MySQL.MyISAM - не подходит т.к. в нем нет транзакций, MySQL.InnoDB - нет возможности переносить бинарные данные и слишком долгое восстановление дампов из дампов (30 Гб базу, я восстанавливал неделю на Core i7, с 30 Гб оперативы и винтами в зеркальном рейде - это кошмар). Postgres - вроде бы подходит, однако у меня с ним не большой опыт работы.

В итоге, я принял решение, написать все на связке MySQL.MyISAM + MySQL.InnoDB. А далее протестировать на тестовом объеме данных, скажем на 100.000 записях мои требования в MySQL и Postgres. Если Postgres меня удовлетворит, значит буду переходить полностью на него. Я уже проводил подобные испытания года 3-4 назад, тогда Postgres мне не подошел, к сожалению тогда практически не писал ничего в блоги, поэтому даже не помню причину..

На последок, хочу заметить: бывает конечно и инструмент тупой, однако, в большинстве случаев, виноват тот кто им не умеет пользоваться, либо пользуется не по назначению. Не злитесь на компьютер, помните, он выполняет только то, что вы его заставили делать 🙂

Author: | Rating: 4/5 | Tags:

Leave a Reply

Your email address will not be published. Required fields are marked *

Allowed HTML-tags: <a>, <code>, <i>, <em>, <strong>, <b>, <u>, <strike>