Мануал по созданию и востоновлению резервных копий баз данных с помощью Mysqldump - Форум администраторов игровых серверов
Форум администраторов игровых серверов StormWall - Защита от DDos атак
Регистрация Мнения Справка Пользователи Календарь Все разделы прочитаны
Вернуться   Форум администраторов игровых серверов > MMO > Lineage II > Тех-документация

Тех-документация Статьи по редактированию, компиляции и настройки ява серверов Lineage 2

Ответ
Опции темы
Непрочитано 22.08.2010, 23:06   #1
Аватар для [Red Dragon]
Пользователь

Автор темы (Топик Стартер) Мануал по созданию и востоновлению резервных копий баз данных с помощью Mysqldump

Создание резервных копий баз данных с помощью Mysqldump

В общем случае, команда для создания резервной копии базы данных, с помощью программы Mysqldump, выглядит следующим образом:
Цитата:
vds-admin/# mysqldump -u [ имя пользователя ] -p [ пароль ] --databases [ название базы данных ] > [ файл резервной копии ]
Цитата:
-u [ имя пользователя ] - имя пользователя с правами, достаточными для создания резервной копии.
-p [ пароль ] - пароль пользователя, указывается без пробела перед ним
--databases [ название базы данных ] - Короткий вариант -B, название одной или нескольких баз данных для дампа. При создании резервной копии одной базы данных, опцию --databases, писать не обязательно, здесь я использовал ее для большей наглядности и однозначности. То есть название базы данных можно прописать сразу за паролем пользователя.
> - перенаправление вывода команды mysqldump, в файл дампа.
Создадим резервную копию одной базы данных:
Цитата:
vds-admin/# mysqldump -u dbadmin -pdbadminpass -B workdb > /backup/workdb.sql
Обратите внимание на отсутствие пробела после опции -p, сразу указываем пароль. В данном случае будет создан файл резервной копии, содержащий структуру и данные, /backup/workdb.sql. Если вам не нужны данные из этой базы, а достаточно просто сохранить структуру таблиц, можно воспользоваться следующим вариантом:
Цитата:
vds-admin/# mysqldump -u dbadmin -pdbadminpass --no-data -B workdb > /backup/structure_workdb.sql
Ключ --no-data ( сокращенный вариант -d ), указывает Mysqldump, не скидывать данные в дамп.

Так-же есть возможность создавать дампы, только необходимых таблиц, определенной базы данных:
Цитата:
vds-admin/# mysqldump -u dbadmin -pdbadminpass -B drupal --tables access users > /backup/drupal2tables.sql
Вышеприведенная команда, создает резервную копию таблиц access и users, указанных вслед за опцией --tables, из базы данных drupal и сохраняет в файл /backup/drupal2tables.sql.

Для создания дампа только структуры таблиц, без данных, используется та-же опция --no-data.
Цитата:
vds-admin/# mysqldump -u dbadmin -pdbadminpass --no-data -B drupal --tables access users > ./drupal2tables_nodata.sql
Для создания резервной копии нескольких баз данных, достаточно перечислить их названия после опции --databases ( -B ):
Цитата:
vds-admin/# mysqldump -u dbadmin -pdbadminpass -B drupal cacti > /backup/drupal_cacti.sql
Что-бы создать резервную копию всех имеющихся баз данных, нужно использовать опцию --all-databases или ее сокращенный вариант: -A.
Цитата:
vds-admin/# mysqldump -u dbadmin -pdbadminpass -A > /backup/all_databases.sql
После выполнения данной команды, будет создана резервная копия всех имеющихся баз данных
Восстановление данных из резервной копии

Восстановить базу данных или таблицу из сохраненного ранее дампа, еще проще, чем этот дамп создать. Для этого достаточно воспользоваться стандартной программой-клиентом Mysql, перенаправив в нее файл резервной копии. Делается это так:
Цитата:
vds-admin/# mysql -u dbadmin -pdbadminpass < /backup/all_databases.sql
После выполнения команды, будут восстановлены все базы данных, из резервной копии, которую мы создали несколькими строками выше. Таким-же способом происходит и восстановление отдельных баз данных или таблиц. Обратите внимание, при восстановлении таблиц, нужно указать в какую именно базу данных вы ее хотите поместить.
Цитата:
vds-admin/# mysql -u dbadmin -pdbadminpass test < test_table.sql
В приведенном примере, мы восстанавливаем из резервной копии, таблицу test_table, помещая ее в базу test.

Вообще с помощью программы Mysqldump, очень удобно копировать таблицы с данными или только структуры таблиц, из одной базы данных в другую. Небольшой пример:
Цитата:
vds-admin/# mysqldump -u dbadmin -pdbadminpass --no-data -B test --tables test_table > /struct_test_table.sql
Скидываем в дамп структуру таблицы, test_table из базы данных test.
Цитата:
vds-admin/# mysql -u dbadmin -pdbadminpass other_testdb < struct_test_table.sql
Восстанавливаем структуру таблицы, из только что созданной, резервной копии и разворачиваем ее в базу данных other_testdb.
Параметры программы Mysqldump
--help, -?
Вывод справки по опциям и используемым переменным.
--add-drop-database
Добавляет команду, DROP DATABASE перед каждой командой CREATE DATABASE
--add-drop-table
Добавляет команду, DROP TABLE перед каждой командой CREATE TABLE
--add-locks
Обрамляет дамп командами LOCK TABLES и UNLOCK TABLES, для ускорения операций вставки.
--all-databases, -A
Создает полную резервную копию всех баз данных, текущего сервера.
--allow-keywords
Разрешить имена столбцов, совпадающие с зарезервированными ключевыми словами. К имени такого столбца, добавляется префикс таблицы.
--character-sets-dir= путь
Директории с установленными наборами символов кодировок
--comments, -i
Добавить в файл дампа, дополнительную информацию ( например, версию программы, версию MySQL, имя хоста ), отменяется опцией --skip-comments
--compact
Создает более компактный дамп. Использование данного параметра, автоматически включает опции: --skip-add-drop-table, --skip-add-locks, --skip-comments, --skip-disable-keys и --skip-set-charset.
--compatible= имя
Данная опция, пытается повысить совместимость создаваемого дампа, с базой данных другого типа или с более старой версией MySQL. Возможные значения: ansi, mysql323, mysql40, postgresql, oracle, mssql, db2, maxdb, no_key_options, no_table_options или no_field_options. Можно использовать несколько значений, разделенных запятыми.
--complete-insert, -c
Использовать полную форму оператора INSERT, включая имена столбцов.
--compress, -C
Использовать компрессию, при пересылке данных между клиентом и сервером, при условии, что они оба поддерживают компрессию.
--create-options
Включать все MySQL опции при использовании оператора CREATE TABLE.
--databases, -B
Делать дамп нескольких баз данных, перечисленных после данной опции. Без этого параметра, mysqldump, воспринимает в качестве имени базы данных, первое значение, остальные интерпретируются как имена таблиц.
--default-character-set= кодировка
Донная опция устанавливает кодировку по-умолчанию. Если не определена, используется utf8, в ранних версиях latin1.
--delayed-insert
Вместо оператора INSERT, использовать INSERT DELAYED.
--delete-master-logs
Удалять бинарный лог на основном сервере репликаций после создания дампа. При использовании этой опции, автоматически включается опция --master-data.
--disable-keys, -K
Оператор INSERT для каждой таблицы, обрамляется выражением /*!40000 ALTER TABLE tbl_name DISABLE KEYS */ и /*!40000 ALTER TABLE tbl_name ENABLE KEYS */. Данная опция ускоряет загрузку при восстановлении из дампа, для таблиц типа MyISAM, за счет того, что индексы создаются после вставки всех данных.
--dump-date
Если включена опция --comments, добавлять дату создания дампа.
--extended-insert, -e
Использовать многострочный синтаксис оператора INSERT. Уменьшает размер дампа и ускоряет последующую вставку данных.
--flush-logs, -F
Переоткрыть лог файлы, перед созданием резервной копии. Старый файл будет сохранен с суффиксом -old. При использовании с опцией --all-databases ( сокращенный вариант -A ), будут переоткрыты лог-файлы каждой базы данных, для которой делается дамп.
--flush-privileges
Выполнять команду FLUSH PRIVILEGES после создания дампа базы данных.
--force, -f
Продолжать создание резервной копии даже в случае возникновения ошибки.
--host= имя_хоста, -h имя_хоста
Указывает хост MySQL сервера. По-умолчанию резервная копия делается для хоста localhost
--hex-blob
Представлять бинарные данные полей BINARY, VARBINARY, BLOB и BIT в шестнадцатиричном формате ( hex ).
--ignore-table= имя_базы.имя_таблицы
Не скидывать в дамп таблицу "имя_таблицы" из базы "имя_базы". Опцию нужно использовать повторно, для каждой игнорируемой таблицы.
--insert-ignore
Дописывать в оператор INSERT, опцию IGNORE.

--lock-all-tables, -x Блокировка всех таблиц, во всех базах, на время создания резервной копии. Данная опция автоматически отключает --single-transaction и --lock-tables.
--lock-tables, -l
Блокировка таблиц базы данных, на время создания резервной копии. При дампе всех баз данных с этой опцией, таблицы каждой базы блокируются отдельно. Для транзакционных таблиц, типа InnoDB и BDB, предпочтительней использовать опцию --single-transaction.
--log-error= имя_файла
Писать ошибки и предупреждения в файл "имя_файла".
--no-autocommit
Включает операторы INSERT для каждой таблицы, в операторы SET AUTOCOMMIT и COMMIT, для увеличения скорости выполнения большого количества запросов INSERT
--no-create-db, -n
Данная опция подавляет вывод в дамп оператора CREATE DATABASE, при использовании опций --databases и --all-databases.
--no-create-info, -t
Не писать оператор CREATE TABLE, для пересоздания каждой таблицы из резервной копии.
--no-data, -d
Не скидывать в дамп содержимое таблиц. Оставляет только операторы CREATE TABLE для создания структуры.
--opt
Групповая опция. Синоним включения опций, --add-drop-table, --add-locks, --create-options, --disable-keys, --extended-insert, --lock-tables, --quick, --set-charset. Ускоряет общий процесс создания резервной копии, включена по-умолчанию. Отключается опцией --skip-opt.
--order-by-primary
Сортировать ряды таблиц по первичному ключу или по первому уникальному индексу, если индекс существует. Полезна в случае создания дампа таблиц MyISAM с последующей вставкой в таблицы типа InnoDB.
--password[=password], -p[password]
Пароль пользователя, для подключения к серверу. Не забывайте, что имя должно идти сразу за опцией, без разделяющего пробела. Если указаны только сама опция, без пароля, пароль будет запрошен из командной строки.
--port= номкр_порта, -P номкр_порта
Номер порта, для подключения к серверу по протоколу TCP/IP.
--protocol={TCP|SOCKET|PIPE|MEMORY}
Использовать для подключения к серверу MySQL, указанный протокол.
--quick, -q
Данная опция вынуждает Mysqldump, восстанавливать строки, по одной за раз, вместо того что-бы скидывать весь объем строк в буфер памяти и выписывать их оттуда. Очень полезна при создании резервных копий больших таблиц.
--quote-names, -Q
Обрамлять имена баз данных, таблиц и колонок, ковычками. Включена по-умолчанию.
--replace
Использовать оператор REPLACE вместо INSERT. Начиная с версии MySQL 5.1.3.
--result-file= имя_файла, -r имя_файла
Вывод результатов в указанный файл. Имейте в виду, если файл с таким именем уже существует, он будет перезаписан и в случае возникновения ошибки, данные могут быть потеряны.
--routines, -R
Записывать в дамп хранимые процедуры и функции. Для использования данной опции, необходимы права SELECT на таблицу proc, системной базы данных mysql. Дамп будет содержать операторы CREATE PROCEDURE и CREATE FUNCTION. При использовании этой опции, эти операторы не будут содержать атрибутов времени создания и модификации хранимых процедур и функций и после восстановления дампа они будут равны времени восстановления. Если вам необходимо сохранить исходные атрибуты времени, вместо использования данной опции, сделайте отдельный дамп таблицы mysql.proc, под именем пользователя, который имеет на это достаточные права. Опция появилась с версии MySQL 5.1.2.
--set-charset
Добавляет в дамп оператор SET NAMES со значением кодировки по-умолчанию. По-умолчанию, данная опция включена, что-бы подавить, используйте --skip-set-charset.
--single-transaction
Выполняет оператор BEGIN SQL, перед началом создания резервной копии. Опция используется только для транзакционных таблиц, типа InnoDB. Только этот тип таблиц может быть сохранен в дамп в актуальном состоянии, после выполнения BEGIN SQL, и без блокирования приложения. Например таблицы типа MyISAM или MEMORY, могут измениться в процессе создания резервной копии с использованием данной опции, в итоге, информация в дампе будет противоречивой, неактуальной. Опции --single-transaction и --lock-tables, являются взаимоисключающими.
--socket= путь_к_файлу_сокета, -S путь_к_файлу_сокета
Использовать файл unix-сокета, для подключения к localhost.
--tables
Имена идущие за этой опцией, считаются именами таблиц.
--triggers
Включать в резервную копию триггеры, для каждой таблицы. Отменить действие опции можно с помощью --skip-triggers.
--user= имя_пользователя, -u имя_пользователя
Имя пользователя для подключения к MySQL серверу.
--verbose, -v
Вывод служебной информации о ходе выполнения программы.
--where='where_условие', -w 'where_условие'
Скидывать в дамп информацию, выбранную по условию WHERE.
--xml, -X
Создать дамп в формате XML
__________________

Последний раз редактировалось [Red Dragon]; 23.08.2010 в 00:13.
[Red Dragon] вне форума Отправить сообщение для [Red Dragon] с помощью ICQ Ответить с цитированием
Непрочитано 25.09.2010, 08:11   #2
Аватар для drakola
Пользователь

По умолчанию Re: Мануал по созданию и востоновлению резервных копий баз данных с помощью Mysqldump

а как сделать что бы база авт сохранялось например каждый 1час
__________________
http://www.la2fort.ru
drakola вне форума Отправить сообщение для drakola с помощью ICQ Ответить с цитированием
Непрочитано 04.05.2011, 01:14   #3
Пользователь

По умолчанию Re: Мануал по созданию и востоновлению резервных копий баз данных с помощью Mysqldump

Цитата:
Сообщение от drakola Посмотреть сообщение
а как сделать что бы база авт сохранялось например каждый 1час
Нужно использовать cron
Если Линукс, то должен быть здесь -- /etc/crontab
Если Виндовс, то там есть служба автозапуска

Относительно бекапов, я использую backup-manager for linux. Проблем с конфигами нет совсем! Отлично бекапит как всю БД, так и может бекапить ФС. Огромний плюс в том, что после бекапа она может заливать весь бекап на другой либо по ФТП либо по ССШ + еще много разных фич.
ZhukV вне форума Ответить с цитированием
Непрочитано 04.05.2011, 11:22   #4
Аватар для TieLay
Герой

По умолчанию Re: Мануал по созданию и востоновлению резервных копий баз данных с помощью Mysqldump

Мне кстати всегда было интересно: при подаче команды на полный дамп БД умеет ли MySQL Demon отслеживать изменения в базе, с момента начала отдачи первого элемента и до окончания самого процесса с последующей отдачей накопившихся изменений.
К примеру:
- живой сервер онлайн на 10-20 человек, которые активно бегают бьют МОБ'ов, крафтят дуэлятся и прочее к тому же и сам сервер периодически скидывает кэш и оно приходится как раз на середину процесса копирования.
- запускаем снятие дампа
- операция длится 10 минут
- за эти 10 минут происходят изменения как в ещё не сохрянённых таблицах так и в уже сохрянённых
- как ведёт себя MySQL и таком случает?
- Можно ли дать команду javaServer - скинуть кэш и следом запустить создание дампа?
Вот Oracle, вроде, умеет по началу создания резервной копии открывать буфер и все операции по записи в базу складывает в него до окончания бэкапа или до достижения определённой наполненности буфера, а в 10й версии, вроде, может отслеживает какие из сохранённых в буфере запросов на запись можно применить т.к. эти таблицы уже сохранены и соответственно накладывает на базу в процессе.
Что имеем по итогу - действительный снимок базы на начало выполнения резервного копирования, а не винегрет из таблиц частично от начала резервирования и частично от изменённых в процессе записи.
З.Ы. Может кто просветит неуча, как с этим в MySQL?
TieLay вне форума Ответить с цитированием
Непрочитано 04.05.2011, 13:16   #5
Пользователь

По умолчанию Re: Мануал по созданию и востоновлению резервных копий баз данных с помощью Mysqldump

На мой взляд нет.
Даже по логике действий МуСКЛ...
Любой дампер начинает считывать сначала БД, после того, переходит каждую БД и достает все таблицы и т.д. по цепочке.
Припустим есть две БД -- бд1, бд2, у нех есть куча таблиц.
Сначала читает бд1. Прочитал, создал бекап. Читает бд2. На это время, все, что будет подано в бд1, не будет в бекапе, поскольку бекап уже создан. Также происходит из таблицами.

Если нужно бекапить все бд, то лучше делать это крном, где-то в часом 5 утра, когда онлайна на сервере будет очень мало, и потери будут незначительные, тем более, лучше делать бекап прямо на сервере!!! Из-за того, что если делать с удаленного хоста, то огромные БД будут очень долго бекапится.
Был собственный пример.
На серве БД -- 148 МБ.
Друг бекапил из своего компа, зайняло приблизительно -- 10 мин.
Я бекапил при помощи -- backup-manager, и минуты не зайняло.

Добавлено через 11 часов 28 минут
Да, еще один совет.

В любой БД есть множество таблиц, записи которых давно уже не используются!!!
Желательно после бекапа производить чистку таблиц, чтобы они не засорялись и на время следующего бекапа не были по 1 Гб.
Сделать можно просто (только алгоритм):
1. Делаем бекап.
2. Проверям БД собственными скриптами, поскольку автоматизировать такой процес под всех не возможно. Припустим если у нас запись уже не будет использоватся, и она там стоит уже 1 месяц, так нах она.
3. Варианта два - Удаляем запись, либо переносим в резервное хранилище (таже копия БД, то в ней сохраняются старые записи)

В результате, старые записи будет удалены из активной БД, что ускорит работу БД + уменьшит нагрузку при более сложных запросах + в любой момент Вы сможете востоновить то или инное поле с резервной БД.

На заметку:
Если на сервере БД используются сложные запросы, то тогда нужно проставлять индексы в таблицах, что достаточно ускорит поиск. Дело в том, что если установлен первичный индекс, то при поиске [WHERE], если искомое поле совпадает с названием индекса, первоначально проверяются индексы, а аж потом вся таблица.
Для элементарного примера:
Некая таблица
id, iw, im
11 12 13
21 22 23
31 32 33
41 42 43

Предположим, что индекса нет, то при запросе типа -- SELECT * FROM table WHERE id=41 -- буду проверятся все ячейки по порядку (11 - 12 - 13 - 21 - 22 - 23 ...). А если записей милион, и полей 100?
Предположим, что индекс -- id. При таком же запросе, сначала проверится поле индекса так же по порядку (11 - 21 - 31 - 41), а потом, если уже не найдет, начнет искать далее.
--------------
ПРИ УСЛОВИИ, ЧТО ЕСТЬ НЕСКОЛЬКО ВЫБОРОК
--------------
Также следует знать, что есть замечательная фича, как Views.
Припустим в запросе Вы очень часто юзаете LEFT JOIN | RIGHT JOIN, либо делаете груповые запросы. Такие запросы дают нагрузку на серв, и иногда даже фатальную.
Виход. Создать вюшку (в инете есть документации), а потом обращатся к вюшке как к обычной таблице -- SELECT * FROM name_view WHERE `field` = '123123';
Когда вюшка создается она проверяет таблицы, достает результаты и формирует вюшку. Данные вюшки летят в кеш. После, при запросе, все берется с кеша, а не а активным таблицам. Также при создании вюшки создаються типа тригеры (в МуСКЛ они тоже есть, но не то) на редактирование таблиц, которые принадлежат вюшке. В результате, при редактировании одной из таблиц, кеш немного перезапишется (именно то что было поправлено).
Результат: При более сложных запросах и при их ОГРОМНОМ количестве, можно снизить нагрузку БД в 2, а то и более раз.

P.S.
С БД нужно быть немного острожным, поскольку на ней держится все -- сервер, сайт, фтп, квоты и т.д (кто что придумает). И если впадет мускула, можно сказать, УПАЛО ВСЕ!!!

Последний раз редактировалось ZhukV; 05.05.2011 в 01:01. Причина: Добавлено сообщение
ZhukV вне форума Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Мануал по созданию скилла (из аден в кол) ZaiMen Работа со скриптами 17 29.10.2012 17:32
Мануал по созданию портала! ALeKsIuS Серверная часть 14 12.09.2010 13:59
Мануал по созданию кв lancelotxzx Aion 0 14.07.2010 12:31
Мануал по созданию WoW 3.0.9 под Linux MooN Документация 5 30.03.2009 09:52


© 2007–2024 «Форум администраторов игровых серверов»
Защита сайта от DDoS атак — StormWall
Работает на Булке неизвестной версии с переводом от zCarot
Текущее время: 17:55. Часовой пояс GMT +3.

Вверх