kiltum (kiltum) wrote,
kiltum
kiltum

Category:
Родился баобабом и будешь баобабом тыщу лет, пока помрешь! © В.Высоцкий
Дурная голова рукам покоя не дает © Народная мудрость
$1 за удар. А $99 - за знание, куда ударить! © Анекдот/байка

Полез я как-то руками в mysql ... и сказал update table set column=value; А через миллисекунду после нажатия кнопки Enter я громко и отчетливо сказал много нехороших и непечатных слов, перемежаемых местными идиоматическими выражениями, описывающими мои пристрастия к копанию в базе данных руками. Ибо забыл поставить where id=value;

И как не трудно догадаться, вся таблица приобрела совершенно восхитительное и однообразное значение. Сразу стал думать чего делать. Это не транзакция - не откатишь. Бекапы как всегда вчерашние и терять наработки за день не охота.

Но чукча - он умный. У него mysql реплицируется. А добрый mysql все изменения в базе пишет в спец-файлики, который потом раздает подчиненным серверам. А в тех спец-файликах все изменеия в виде обычных sql комманд. Ну и что, что файлик бинарный ...

Выдираем все sql, относящиеся к убитой таблице в отдельный файл

cd /var/lib/mysql
strings mysql-data*|grep table > file.sql

Добавляем в начало команду использовать временную таблицу и к каждой строчке в конце ";", что бы соответствовать sql

echo "use table_temp;" > file1.sql
cat file.sql |while read line; do echo ${line}";" >> file1.sql; done;

И проверяем несколько раз
mysql -u root -p < file1.sql

Из-за особенностей работы strings в концах некоторых строчек появляется небольшой символьный мусор - его и убираем.

После уборки мусора, меняем первую строчку на use table; и перезаливаем заново таблицу ...

Как это ... Вуаля! 15 минут работы и жисть спасена :)
Tags: mysql
Subscribe
  • Post a new comment

    Error

    default userpic

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 14 comments