This Might Be Useful

Archive for the ‘Shell’ Category

Восстановление удаленных записей в mySQL из binlog

Monday, January 12th, 2009 | Linux, SQL, Shell | No Comments »

Вчера я случайно удалил почти все записи из таблицы статистики просмотра видеозаписей Движущихся Картинок. Событие более чем печальное. До этого я предполагал, что восстановить удаленные записи практически невозможно. Оказалось, что можно. Если включены бинарные логи (для их включения в настройках mySQL надо указать параметр log-bin).
В результате некоторых раздумий получилась команда:
/usr/bin/mysqlbinlog --database=нужная_база_данных –start-datetime=”2008-01-01 00:00:00″ путь_ко_всем_binlog | tr “\t” ” ” | tr “\n” ” ” | tr “;”"\n” | grep “INSERT INTO \`побитая_таблица\`” > p.sql

Параметр start-datetime содержит в себе дату, с которой вынимаем логи. Можно еще указать время остановки (в моем случае это было неактуально).
Далее нужно указать не просто путь к логам, а все файлы логов (например, /var/lib/mysql/lalala-bin.*).
Несколько tr‘ов нужны потому, что запрос мой был многострочным, а надо было мне получать один запрос в одну строку.

В конечном счете в файле p.sql я получил нужные мне запросы. Единственное, что в конце строк не было точки с запятой. Это было исправное просто:
cat p.sql | sed "s/\"\)/\"\);/g" > p2.sq
Просто у меня каждый запрос оканчивался на ….”)

Когда я попытался скормить запросы mySQL’у оказалось, что из-за того, что были удалены не все записи, начались проблемы с уникальностью некоторых полей. Чтобы не копаться в дампе руками, сделал так:
cat p2.sql | sed "s/INSERT INTO/INSERT IGNORE INTO/g" > p3.sql

И уже p3.sql успешно скормил mySQL’у.

Отсюда выводы: во первых, всегда делайте бекапы (как можно чаще), и во вторых всегда включайте логирование.

P.S. Конечно же из binlog’ов можно вытащить все, что делалось с базой. И Восстановить то состояние, которое нужно.

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

Сохраняем звуковую дорожку из видеофайла

Friday, August 22nd, 2008 | Linux, Shell | No Comments »

ffmpeg -i videofile.ext -acodec copy -y soundtrack.mp3

Под videofile.ext может скрываться и .avi, .flv и другие форматы. На выходе тоже может быть и не mp3 - формат зависит от того, какой кодек использован для сжатия звуковой дорожки.

Конвертация DOS/Windows batch-файлов в *nix shell-скрипты и обратно

Tuesday, March 27th, 2007 | Shell | No Comments »

Многие программисты постигали азы скриптового программирования создавая batch-скрипты под DOS. Позже вестма похожие скрипты стали делаться и для Windows. Несмотря на то, что язык batch-сценариев в DOS очень беден, сделать можно было довольно много полезного. И часть этого иногда хочется перенести под *nix (а бывает, что и наоборот). В целом процесс переноса не очень сложен.
(more…)