Дурная голова рукам покоя не дает © Народная мудрость
$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 минут работы и жисть спасена :)