Fork me on GitHub

The WebDevil

Enjoy development

My fail with MySQL

April 9th, 2009

Сегодня сделал глупость – поторопился. И уложил MySQL. А дело было так…

Создал таблицу test1 с хранилищем InnoDB, и начал делать в нее load data infile. Но процесс затянулся, и я решил убить его. Зря. Убить процесс в мускуле не удалось, и я злостно его перезапустил.

После перезапуска MySQL запусти фоновое восстановление таблицы, и не отзывался ни на что. Потому был потушен еще раз.

Затем вместо того чтоб прописать в my.cnf

innodb_force_recovery = 4

я остановил его и… грохнул test1.frm. Руками, на диске.

После перезапуска ничего не изменилось. И я уже запустил MySQL с указаной опцией. И тут я понял свою ошибку. А ведь надо было не удалять файл, а перезапуститься с innodb_force_recovery и сделать уже оттуда

DROP TABLE test1;

В результате поисков было найдено решение: дампить БД, убивать БД, выкатывать БД из дампа. Так tablespace в InnoDB почистится.

Вывод: не торопиться и не пороть гарячку. Доки прийдется читать в любом случае, зато не нервничая при этом.

UPD: еще большей глупостью было убить логи не дожидаясь clean shutdown. Теперь лишь mysqldump –all-databases, убить, restore…

UPD2: удалением БД дело не ограничилось. Пришлось дампить все InnoDB таблицы, затем удалять /var/lib/ib*, в том числе и ibdata (при остановленом мускуле), запускать его и вкатывать дамп обратно.

На заметку:
forcing-recovery
Recovery howto

CSS Layout

March 9th, 2009

Все время забываю название шаблона для админки сайтов – mollio.
Так что это просто заметка чтоб не искать долго в следующий раз.

Ссылки на другие лайауты приветствуются ;)

OpenVZ on Ubuntu 8.10

March 1st, 2009

Только-что закончил эксперименты с OpenVZ на Ubuntu 8.10 (intrepid). Успешно.

Итак, задача: создать виртуальную (для начала одну) машину с Ubuntu 8.10, которая будет доступна в локальной сети. Хост-система – Ubuntu 8.10, выступает в роли роутера для локальной сети, имеет на себе DHCP-сервер. Настройки сети виртуальная машинка должна получать по DHCP, роутиться другим роутером (два провайдера). Задача осложняется тем, что из intrepid убрали поддержку виртуализации посредством OpenVZ и сделали упор на KVM. Так как имеем машинку на базе AMD Duron (900MHz) то приходится выкручиваться. Опыт, как говорится, бесценен.

Как мне это удалось…

LVM Rocks

March 1st, 2009

Давно заметил что в Ubuntu (server edition) во время инсталляции начали предлагать использовать LVM. Но я все не решался поставить production на него. Затем пообщался со теми кто его использовал, почитал доку – и последний год стал его использовать, так как постиг скрытую в нем мощь :)

Одним из примеров я и хочу поделиться.

git, gitosis, tailor, and bzr

December 9th, 2008

git

До общения с Oleganza я не видел у git каких-либо ярких преимуществ перед bzr.
И, наверное, не увидел бы, если бы не Олег.

Первое что было самым необычным – git полностью децентрализованый. И привычный svn-like workflow тут не работает. Надо было привыкать к branch-style.

Второе – это то, что команды с теми же названиями что и у svn имеют другой смысл.

Жутко понравилось что ветки git держит в себе, то есть не надо плодить по 3-4 папки для разных фичей.

gitosis

Также я задумался о совместной работе. github – это, конечно, хорошо, но у меня уже есть багтракер понимающий git. Отчего бы не попробовать git на своем сервере?

Был заведен юзерь git без пароля

sudo adduser --shell /bin/sh --gecos 'git version control' --disabled-password --home /home/git git

поставлен gitosis

sudo apt-get install gitosis

сделаны небольшие правки его сорсов (дело в том, что по умолчанию gitosis создает репо с маской 0750, мне же надо было с 0755 – чтоб www-data мог его читать):
правим

/var/lib/python-support/python2.5/gitosis-0.2-py2.5.egg/gitosis/repository.py

и заменяем 0750 на 0755.

Подробнее описано в блоге разработчика gitosis.

tailor and bzr

Когда все взлетело с git, решил попробовать отконвертировать при помощи утилиты tailor старые репо из bzr в git.
Конфиг получился примерно такой (замечания приветствуются):

[DEFAULT]
verbose = True

[project]
target = git:target
start-revision = INITIAL
root-directory = /home/dm/tmp/bzr2git
state-file = tailor.state
source = bzr:source
subdir = bzr2git.tmp

[bzr:source]
repository = /home/dm/bzr/BZR_PROJECT_HERE

[git:target]
repository = /home/dm/tmp/bzr2git/tmp/.git

и после запуска

tailor bzr2git.conf

в /home/dm/tmp/bzr2git/bzr2git.tmp появляется вполне живой git-репозитарий. Его я уже стягивал к себе и вливал в gitosis от себя.

Примечание

git не отслеживает пустые папки, и в процессе конвертации теряются “log”, “tmp”, etc… Чтоб отслеживал достаточно

mkdir log
touch log/.empty

5 new toolz

November 23rd, 2008

Получил эстафету от bsn и задумался, что же у меня появилось за последнее время. Скажу честно – не все полезное, но как бы там ни было…

  1. PSP – эта маленькая консоль помогает мне в те моменты когда становится совсем скучно и уныло. Спасибо Genn за то что подбил меня таки на ее покупку.
  2. Git – Женя уже описал все его вкусности которые зацепили и меня, так что повторяться не буду. Спасибо oleganza за пинок в нужную сторону.
  3. gitosis – весьма неплохое решение для хостинга git-репозиториев. Жаль нету такого для bzr.
  4. Navicat MySQL/PostgreSQL – по-моему, это две самых приятных софтины из всего что есть для быстрого и комфортного просмотра данных в БД. Да, могло быть и лучше – но я не нашел. ODBC и всякие подобные костыли меня не привлекают, хочется чистого и светлого…
  5. PostgreSQL – всерьез думаю переходить на эту СУРБД. Не то чтоб я упирался в какие-то косяки MySQL, но хочется попробовать что-то новое. Пока читаю книжку, копаюсь, пробую.

В связи с переходом на git был выброшен Versions.app – штука хорошая, но больно дорогая. А бэта проэкспайрилась. И пользуюсь svn я ну уж очень редко в последнее время.

PS: я не кому не навязываю написать свой список. Но если возникнет желание – вы знаете что делать ;)

DDoS

October 10th, 2008

Привалило мне сие несчастье некоторое время назад. Ничем не примечательный сайт, ДДоСят уже неделю. В процессе борьбы выросло небольшое детище на Ruby, именуемое Bananoid. От слова bann. И живет оно на Github’е. Пока оно меня спасает, но непростительно есть 50-100% CPU. Ну что ж, будем лечить.

Хочу особо поблагодарить Критика, Devil’a и Andrew за помощь в бою.

just for fun

September 25th, 2008

Textmate, Pastie and Adium 1.3

September 3rd, 2008

Есть у редактора TextMate замечательная фича – можно выделить текст и при помощи нехитрой комбо отправить его прямо на pastie.textmate.org, а при этом получить ссылку на этот код в clipboard или другое приложение.

И все было чудесно, TextMate выпущен давно… А Adium обновился. Вместе с обновлением сменилось и API, и теперь эта комбо не может выполниться при запущеном Adium.

Искал я долго… но нашел. Идем в репозитарий бандлов для TextMate, а точнее сразу сюда.
Понадобится два файла – get_destinations.scpt и paste_to_destinations.scpt. Это AppleScript’ы, которые передают бандлу списки окон, и они же вставляют в доступные приложения ссылку на pastie.
Этими файлами заменяем существующие в

/Applications/TextMate.app/Contents/SharedSupport/Bundles/TextMate.tmbundle/Support

и да будет щастье.

UPDATED
А лучше класть бандлы в ~/Library/Application Support/TextMate/Bundles.

Multilingual site on Rails

August 29th, 2008

Задавался давно уже вопросом о том, как сделать многоязычный сайт на рельсах. Сначала нехватало знаний, потом времени.
Недавно понадобилось таки реализовать такой сайт. Сразу скажу, получилось.
Read the rest of this entry »