Если случайно был удален том lvm (или специально, но потом понадобилось восстановление) — механизм резервного копирования метаданных vloume group может спасти ситуацию.
Настройка архивирования находится в /etc/lvm/lvm.conf в секции backup.
По умолчанию (в debian) архивирование включено, папка для архивов — /etc/lvm/archive и содержит архивы изменения vg за 30 дней.
Посмотреть чего менялось можно командой vgcfgrestore -l VG

#vgcfgrestore -l VG..... skipped .....
  File:         /etc/lvm/archive/VG_00390.vg
  VG name:      VG
  Description:  Created*before* executing 'lvremove /dev/VG/lv_name_1'
  BackupTime:  MonOct1516:22:502012

  File:         /etc/lvm/archive/VG_00391.vg
  VG name:      VG
  Description:  Created*before* executing 'lvremove /dev/VG/lv_name_2'
  BackupTime:  MonOct1516:22:552012

  File:         /etc/lvm/archive/VG_00392.vg
  VG name:      VG
  Description:  Created*before* executing 'lvremove /dev/VG/lv_name_3'
  BackupTime:  MonOct1516:23:182012

  File:         /etc/lvm/archive/VG_00393.vg
  VG name:      VG
  Description:  Created*before* executing 'lvremove /dev/VG/lv_name_4'
  BackupTime:  MonOct1516:23:202012
  File:         /etc/lvm/archive/VG_00394.vg
  VG name:      VG
  Description:  Created*before* executing 'lvcreate -L20g -nsome_new_lv VG'
  BackupTime:  TueOct1600:32:402012

Здесь видно имя файла архива и команда, перед (или иногда после) которой архивирование метаданных VG было выполнено.
В данном случае были удалены некоторые LV и после них создан новый.
Чтобы узнать, попал новый LV поверх старых (тогда естественно данные будут перезаписаны, зависит от количества записей в новый LV) надо посмотреть в архиве до удаления параметры extent_count и stripes нужного LV. stripes это номер начала блока на PV, extent_count — количество.
LV может состоять из нескольких сегментов, в каждом будет свой набор extent_count и stripes.
Потом посмотреть эти же параметры нового LV, но в архиве поcле создания нового LV.
Если эти регионы не пересеклись — значит новый LV создался в другом месте, чем удаленные LV.
Восстановить метаданные просто —

vgcfgrestore -f /etc/lvm/backup/VG_00390.vg VG

это откатит все изменения с текущего момента до нужного архива, предшествующего указанной в vgcfgrestore -l команде.
Дальше остается только активировать восстановленные LV командой

lvchange -a y /dev/VG/lv_name

Для начала установим bind9:
apt-get install bind9

Находим файл /etc/bind/named.conf.options и добавляем (сети, которым будет разрешено посылать запросы через наш DNS-сервер):
acl «corpnets» { 192.168.1.0/24; 127.0.0.1; };
Ниже раскомментируем строчку и добавим (к какому DNS серверу будет обращатся наш сервер):
forwarders {
194.187.48.2;
82.144.192.30;
195.189.246.18;
193.193.193.100;
};
Continue Reading

Истинная сила *nix систем в командном интерпретаторе, который позволяет пользователю понятно излагать свои мысли для ОС.

Поэтому для более быстрого, удобного и продуктивного общения можно овладеть искусством общения с собеседником в виде эффективного управления происходящим в командной оболочке.
Continue Reading

Mysqldump — это одна из утилит, входящих в пакет с клиентскими программами mysql-client. Используется для создания дампа одной или нескольких баз данных, отдельных таблиц или только их структуры с целью резервирования нужной информации и дальнейшего его восстановления в будущем. Дамп содержит в себе набор SQL-команд, которые выполняются последовательно при разворачивании.

При запуске mysqldump в качестве аргумента передается название базы данных либо ее определенные таблицы или перечисляются несколько баз с помощью ключа «—databases -B» либо все «—all-databases -A». Также можно указывать дополнительные опции, наиболее полезными из которых являются:
—quick -q – дамп непосредственно направляется на stdout (стандартный вывод — экран), не используя буфер;
—opt – соответствует заданию опций —quick —add-drop-table —add-locks —extended-insert —lock-tables, которые максимально ускоряют создание дампа;
—add-drop-table – в полученном дампе перед SQL-командами создания добавляется команда удаления таблицы (drop table);
—add-locks – добавляются строки для блокирования «LOCK TABLES» и разблокирования «UNLOCK TABLE» таблиц при их создании чтобы не получить какие-либо противоречия в результате;
—extended-insert -e – используется определенный синтаксис SQL-команды INSERT для более быстрого разворачивания данных;
—lock-tables -l – заблокировать все таблицы перед стартом дампа, что благоприятно влияет на паралельные вставки при типе таблиц MyISAM;
—all -a – включить все MySQL-специфичные параметры SQL-команды CREATE;
—complete-insert -с – используется в команде INSERT задание имен столбца;
—force -f – не останавливаться, если получаем SQL-ошибку;
—no-data -d – для получения дампа только структуры таблиц;
—no-create-db -n – ‘CREATE DATABASE /*!32312 IF NOT EXISTS*/ db_name;’ не будет помещена в вывод;
—no-create-info -t – не писать информацию для создания таблицы (CREATE TABLE);
—password=password -ppassword, -P 3306 —port=3306, -S /var/lib/mysql/mysql.sock —socket= /tmp/mysql.sock, -u user —user=user – указать пароль, порт или сокет, пользователь для подключения к mysql-серверу;

В самом обычном и стандартном случае используется:

mysqldump —opt database > backup_database.sql – для создания дампа БД database;
mysql database < backup_database.sql – для подключения к серверу mysqld и БД database с помощью клиента mysql, разворачивая туда созданный дамп.
Также возможен непостредственный перенос данных на другой сервер с помощью задания в командной строки:
mysqldump —opt database|mysql —host=remote_mysqld -C database
а если необходимо получить полную копию сервера баз данных вместе с базой mysql, хранящей информацию о пользователях и доступе, нужно остановить СУБД, заархивировать каталог данных и развернуть архив на другом сервере с аналогичной версией mysqld.

Пример скрипта для создания дампа определенных БД с помщью mysqldump:

touch mysql_backup.sh
chmod u+x mysql_backup.sh
cat > mysql_backup.sh
#!/bin/sh
# задаем переменные, с помощью которых потом будет удобно вносить
#корректировки
DATE=`/bin/date "+%Y%m%d"`
dbs="DB1 DB2"
dump_user="root"
dump_pass="password123"
dest_dir="/tmp/backup"
dump_flags="--add-drop-table --add-locks --all --extended-insert
--quick --force"
# собственно сам процесс:
for db in $dbs
do
echo "Dumping now MySQL database $db..."
/usr/bin/mysqldump --user=$dump_user --password=$dump_pas
$dump_flags -B $db >> $dest_dir/$db.$DATE.sql
tar czvf $dest_dir/$db.$DATE.tgz $dest_dir/$db.$DATE.sql
echo "$db sql-file and tgz-archive locate in $dest_dir"
done
exit
^D

 

Можно еще бекапить бд сразу в архив.

gzip:

mysqldump -uuser -ppass dbase | gzip -cf9 > dbase_date.sql.gz

bzip2:

mysqldump -uuser -ppass dbase | bzip2  > dbase_date.sql.bz2

Для восстановления базы из архива.

gzip:

gunzip < dbase_date.sql.gz | mysql -u root -p dbase

bzip2:

bunzip2 < dbase_date.sql.bz2 | mysql -u root -p dbase
Пример использование некоторых параметров

Для того чтобы сделать дамп несколько баз данных, необходимо использовать параметр --databases (или сокращенно -B), пример:

mysqldump -uroot -h192.168.1.22 -p -B database1 database2 database3 > databases.sql

Например, нам нужны данные с «продакшен версии базы» для «версии разработчика», то есть нам нужна «песочница». Выбираем не более 100 записей:

mysqldump -uroot -h192.168.1.22 -p --where="true limit 100" database > database.sql

Или нам нужна только структура, без данных:

mysqldump -uroot -h192.168.1.22 -p --no-data database > database.sql

Делаем дамп только триггеров, процедур и событий:

mysqldump --no-create-info --no-data --triggers --routines --events -uroot -p database | gzip > ~/database.sql.gz

Шпаргалка по параметрам Приведу некоторые параметры, которые могут понадобится при работе с утилитой mysqldump.

--add-drop-database
Добавляет оператор DROP DATABASE перед каждым оператором CREATE DATABASE.
--add-drop-table
Добавляет оператор DROP TABLE перед каждым оператором CREATE TABLE.
--add-locks
Добавляет оператор LOCK TABLES перед выполнением и UNLOCK TABLE после выполнения каждого дампа таблицы (для ускорения доступа к MySQL).
--all-databases, -A
Сохраняет все таблицы из всех баз данных, которые находятся под управлением текущего сервера.
--allow-keywords
Разрешить создавать имена столбцов, которые совпадают с ключевыми словами. Отсутствие конфликтов обеспечивается прибавлением имени таблицы в качестве префикса к имени каждого столбца.
--comments, -i
Данный параметр позволяет добавить в дамп дополнительную информацию, такую, как версия mysqldump, версия MySQL, имя хоста, на котором расположен сервер MySQL.
--compact
Данный параметр требует от mysqldump создать дамп, используя как можно более компактный формат. Параметр является противоположным --comments.
--compatible=name
Параметр генерирует вывод, который совместим с другими СУБД или более старыми версиями MySQL. Вместо ключевого слова name можно использовать: «ansi», «mysql323», «mysql40», «postgresql», «oracle», «mssql», «db2», «maxdb», «no_key_options», «no_table_options», «no_field_options». Можно использовать несколько значений, разделив их запятыми.
--complete-insert, -c
Используется полная форма оператора INSERT (с именами столбцов).
--create-options
Добавляет дополнительную информацию в операторы CREATE TABLE. Это может быть тип таблицы, начальное значение AUTO_INCREMENT и другие параметры.
--databases, -B
Параметр позволяет указать имена нескольких баз данных, для которых необходимо создать дамп.
--delayed
Использовать команду INSERT DELAYED при вставке строк.
--delete-master-logs
На главном сервере репликации автоматически удаляются бинарные логи (logbin) после того, как дамп был успешно создан при помощи mysqldump. Этот параметр автоматически включает параметр «--master-data».
--disable-keys, -K
Для каждой таблицы, окружает оператор INSERT выражениями /*!40000 ALTER TABLE tbl_name DISABLE KEYS */; и /*!40000 ALTER TABLE tbl_name ENABLE KEYS */; в выводе результата дампа. Это ускорит загрузку данных на сервер для таблиц типа MyISAM, так как индексы создаются после внесения всех данных.
--extended-insert, -e
Использовать команду INSERT с новым многострочным синтаксисом (повышает компактность и быстродействие операторов ввода).
--flush-logs, -F
Записать на диск данные системного журнала из буфера MySQL-сервера перед началом выполнения дампа.
--force, -f
Продолжать даже если в процессе создания дампа произошла ошибка.
--hex-blob
Параметр позволяет представить бинарные данные в полях типа BINARY, VARBINARY, BLOB и BIT в шестнадцатеричном формате. Так последовательность «abc» будет заменена на 0×616263.
--ignore-table=db_name.tbl_name
Позволяет игнорировать таблицу tbl_name базы данных db_name при создании дампа. Если из дампа необходимо исключить несколько таблиц, необходимо использовать несколько параметров «--ignore-table», указывая по одной таблице в каждом из параметров.
--insert-ignore
Добавляет ключевое слово IGNORE в оператор INSERT.
--lock-all-tables, -x
Указание этого параметра приводит к блокировке всех таблиц во всех базах данных на время создания полного дампа всех баз данных.
--lock-tables, -l
Указание этого параметра приводит к блокировке таблиц базы данных, для которой создается дамп.
--no-autocommit
Включает все операторы INSERT, относящиеся к одной таблице, в одну транзакцию, что приводит к увеличению скорости загрузки данных.
--no-create-db, -n
Подавляет создание в дампе операторов CREATE DATABASE, которые автоматически добавляются при использовании параметров --databases и --all-databases.
--no-data, -d
Подавляет создание операторов INSERT в дампе, что может быть полезно при создании дампа структуры базы данных без самих данных.
--opt
Параметр предназначен для оптимизации скорости резервирования данных и является сокращением, включающим следующие опции: --quick --add-drop-table --add-locks --create-options --disable-keys --extended-insert --lock-tables --set-charset. Начиная с MySQL 4.1, параметр --opt используется по умолчанию, т.е. все вышеперечисленные параметры включаются по умолчанию, даже если они не указываются. Для того чтобы исключить такое поведение, необходимо воспользоваться параметров --skip-opt
--order-by-primary
Указание параметра приводит к тому. что каждая таблица сортируется по первичному ключу или первому уникальному индексу.
--port, -P
Номер TCP порта, используемого для подключения к хосту.
--protocol={TCP|SOCKET|PIPE|MEMORY}
Параметр позволяет задать протокол подключения к серверу.
--quick, -q
Позволяет начать формирование дампа, не дожидаясь полной загрузки данных с сервера и экономя тем самым память.
--quote-names, -Q
Помещает имена баз данных, таблиц и столбцов в обратные апострофы `. Начиная с MySQL 4.1, данный параметр включен по умолчанию.
--replace
Добавляет ключевое слово REPLACE в оператор INSERT. Данный параметр впервые появился в MySQL 5.1.3.
--result-file=/path/to/file, -r /path/to/file
Параметр направляет дамп в файл file. Этот параметр особенно удобен в Windows, без использования командной строки. когда можно перенаправить результат в файл при помощи последовательностей > и >>.
--routines, -R
Данный параметр создает дамп хранимых процедур и функций. Доступен с MySQL 5.1.2.
--single-transaction
Параметр создает дамп в виде одной транзакции.
--skip-comments
Данный параметр позволяет подавить вывод в дамп дополнительной информации.
--socket=/path/to/socket, -S /path/to/socket
Файл сокета для подсоединения к localhost.
--tab=/path/, -T /path/
При использовании этого параметра в каталоге path для каждой таблицы создаются два отдельных файла: tbl_name.sql, содержащий оператор CREATE TABLE, и tbl_name.txt, который содержит данные таблиц, разделенные символом табуляции. Формат данных может быть переопределен явно с помощью параметров --fields-xxx и --lines-xxx.
--tables
Перекрывает действия параметра --databases (-B). Все аргументы, следующие за этим параметром, трактуются как имена таблиц.
--triggers
Создается дамп триггеров. Этот параметр включен по умолчанию. для его отключения следует использовать параметр --skip-triggers.
--events, -E
Создается дамп событий. Смотрите MySQL Event Scheduler или встроенный диспетчер событий в MySQL.
--tz-utc
при использовании данного параметра в дамп будет добавлен оператор вида SET TIME_ZONE='+00:00', который позволит обмениваться дампа в различных временных зонах.
--verbose, -v
Расширенный режим вывода. Вывод более детальной информации о работе программы.
--version, -V
Вывести информацию о версии программы.
--where='where-condition', -w 'where-condition'
Выполнить дамп только выбранных записей. Обратите внимание, что кавычки обязательны.
--xml, -X
Представляет дамп базы данных в виде XML.
--first-slave, -x
Блокирует все таблицы во всех базах данных.
--debug=..., -#
Отслеживать прохождение программы (для отладки).
--help

Вывести справочную информацию и выйти из программы.

 

Еще пару слов о бекапе в MySQL

 

mysqlhotcopy для MyISAM

Для быстрого резервирования БД с типом таблиц ISAM и MyISAM можно использовать «mysqlhotcopy», которая скопирует файлы *.frm, *.MYD и *.MYI:

# mysqlhotcopy db_name /path/to/dir

Для InnoDB не подойдет данный способ, потому что при этом типе не обязательно все файлы будут храниться в директории базы данных.

xtrabackup для InnoDB

Для InnoDB есть xtrabackup, рекомендую посмотреть! UPD: XtraBackup — резервное копирование для innoDB

Бин-лог и репликации

Для репликации «mysqldump» не предназначена, для этого есть бин-лог (--log-bin):

# mysqlbinlog binlog.[0-9]* | mysql

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

Ротация (rotate) — это замена текущего открытого, т. е. используемого приложением для записи в данный момент, лог-файла новым и переименование (возможно с архивированием) старого, который замещает еще более старый, существовавший до этого лог. Самый старый файл удаляется.
Continue Reading

Bruteblock — написан на C, на основе анализа лога auth.log блокирует злоумышленников, которые пробуют подобрать пароль по ssh.

1. Ставим.

# cd /usr/ports/security/bruteblock && make install clean

2. Редактируем. /usr/local/etc/bruteblock/ssh.conf
Continue Reading