Mysql backup

В чём идея резервного копирования с одного сервера на другой?

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

Ок, и как мы это сделаем?

А теперь пару слов о том, как будет проходить процесс резервного копирования. Допустим у нас есть сервер «А», на котором находится база данных, бекапы которой мы хотим создавать. И есть сервер «Б», на который мы эти бекапы будем сохранять. Чтобы сделать дамп БД достаточно выполнить следующую команду в командной строке на сервере:

А чтобы подключиться к базе данных на другом сервере, достаточно добавить параметр -h, например вот так:

Ну и чтобы всё это работало автоматически, надо создать задание в cron и написать небольшой скрипт на php, который будет поддерживать в директории дампов определённое количество файлов (зачем нам сотни дампов?).

Приступаем к настройке автоматического резервного копирования бд MySQL

Для работы нам понадобится совсем немного:

  1. Два сервера
  2. Cron
  3. Доступ к серверу по ssh
  4. Утилита mysldump на сервере
  5. 20 минут свободного времени 🙂

Устанавливаем скрипт на сервер

Запишите код ниже в файл database_backup.php и сохраните его на сервере, который будет хранилищем дампов, в любой папке, пусть это будет папка /var/database_backups. Затем создайте папку, в которой будут храниться ваши дампы, пусть это будет следующая папка  /var/database_backups/sitename.

  $config = [  	// ip адрес сервера, с которого будем копировать базу  	'ip' => '11.11.111.11',  	// Путь до папки в которой будут лежать дампы баз  	'path' => '/var/database_backups/sitename',  	// Шаблон имени файла дампа базы. Вместо <date> подставится дата в формате 2015-04-19  	'filenamePattern' => 'dump_<date>.sql',  	// Максимальное количество дампов, хранящихся на сервере  	'maxFilesCount' => 3,  	// Настройка подключения к БД  	'db' => [  		'name' => 'site',  		'user' => 'root',  		'password' => 'mysql',  	],  ];    $ip = !empty($config['ip']) ? "-h $config[ip]" : '';  $filename = str_replace('<date>', '$(date +%Y-%m-%d)', $config['filenamePattern']);  $command = "mysqldump $ip -u {$config['db']['user']} -p{$config['db']['password']} --extended-insert=false {$config['db']['name']} > {$config['path']}/$filename";    exec($command);    if (!empty($config['maxFilesCount'])) {  	cleanDirectory($config['path'], $config['maxFilesCount']);  }    /**   * Clears the directory of the files, leaving no more than $maxFilesCount number of files   *   * @param string $dir   * @param string $maxFilesCount   */  function cleanDirectory($dir, $maxFilesCount)  {  	$filenames = [];    	foreach(scandir($dir) as $file) {  		$filename = "$dir/$file";  		if (is_file($filename)) {  			$filenames[] = $filename;  		}  	}    	if (count($filenames) <= $maxFilesCount) {  		return;  	}    	$freshFilenames = array_reverse($filenames);  	array_splice($freshFilenames, $maxFilesCount);  	$oldFilenames = array_diff($filenames, $freshFilenames);    	foreach ($oldFilenames as $filename) {  		unlink($filename);  	}  }  

Создаём задание в cron’е

Почти всё! Дело за малым — создать задание в кроне. Для этого на сервере-хранилище выполните следующий скрипт:

У вас должен открыться текстовый редактор в котором мы пропишем задание для cron:

Этой самой строчкой мы сказали cron’у выполнять наш скрипт каждый день в час ночи.
Вот и всё! Теперь ваша база данных будет ежедневно копироваться на сервер-хранилище.

А что дальше?

Ковальски варианты

Вы можете дополнить и улучшить данный скрипт, например, реализовать отправку письма администратору, или же добавить дополнительные параметры в исполняемую команду, главное — у вас есть основа, которую можно модифицировать. Пишите в комментариях свои идеи по резервному копированию!

zabolotskikh.com

Как создать резервную копию базы данных MySQL

Чтобы создать резервную копию одной базы данных достаточно использовать стандартную команду, которая описана выше:

# mysqldump –u[пользователь] –p[пароль_пользователя] [имя_базы] › [название_файла_резервной_копии_базы].sql

Например:

# mysqldump -uroot -pqwerty my_db > my_db-dump1.sql

Резервная копия нескольких баз данных

Прежде чем создавать резервную копию нескольких баз данных одновременно, идентифицируйте наличие баз данных.

Для этого введите команду show databases (в Workbench)

или # mysqlshow –uroot -p (в консоли).

Командная строка: mysqlshow –uroot -p

Если необходимо одновременно создать резервную копию нескольких баз данных (например, my_db и test), то для этого необходимо выполнить такую команду:

# mysqldump -uroot -pqwerty –databases my_db test › my_db_test_backup.sql

Командная строка: mysqldump -uroot -pqwerty --databases my_db test › my_db_test_backup.sql

Резервная копия всех баз данных

Если есть необходимость создать бэкап всех баз данных вашего профайла MySQL, то это можно сделать с помощью параметра –all-databases.

# mysqldump -uroot -pqwerty –all-databases › all-databases_backup.sql

Командная строка: mysqldump -uroot -pqwerty --all-databases › all-databases_backup.sql

Резервная копия отдельной таблицы

Также можно создать резервную копию отдельной таблицы базы данных. В случае, если необходимо создать копию таблицы wp_commentmeta из базы данных my_db, то команда будет выглядеть следующим образом:

# mysqldump -uroot -p my_db wp_commentmeta › table_ my_db-wp_commentmeta.sql

Командная строка: mysqldump -uroot -p my_db wp_commentmeta › table_ my_db-wp_commentmeta.sql

Примечание. Чтобы просмотреть список таблиц базы, введите команду:
#mysqlshow –uroot –p my_db

Командная строка: mysqlshow –uroot –p my_db

Как восстановить базу данных MySQL из резервной копии

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

Командная строка: mysql -uroot -pqwerty my_db ‹ my_db-dump1.sql

hetmanrecovery.com

Резервное копирование и восстановление баз MySQL

В данном документе подробно рассматриваются принципы и процедуры, которые необходимо соблюдать для реализации стратегии резервного копирования MySQL на уровне предприятия при использовании агента Bacula Enterprise Edition для MySQL.

Данное руководство пользователя содержит описание различных методов и стратегий, чтобы проводить резервное копирование баз MySQLи их восстановление с помощью агента версии Enterprise. Эти методы также позволяют адаптировать и настраивать ПО с целью улучшения производительности, эффективности, скорости и масштабируемости различных подходов к резервному копированию баз MySQL и соответствующих данных.

Автоматическое резервное копирование MySQL разработано с целью упростить и ускорить процедуру резервного копирования баз MySQL, а также восстановление MySQL. Программное обеспечение для бэкапа базы данных MySQL и ее восстановления создано таким образом, что администратору не требуется ни знать, как работают встроенные инструменты резервного копирования MySQL, ни уметь создавать сложные скрипты. Автоматический бэкап MySQL с помощью Bacula автоматически создаст резервную копию важной информации, например конфигурации или определений пользователя. Бэкап базы данных MySQL также поддерживает два метода: резервное копирование с помощью дампа и бинарных логов.

Резервное копирование MySQL доступно для платформ Linux 32 и 64 бита (платформы Debian, Ubuntu, CentOS и др.), и поддерживает MySQL 4.0.x, 4.1.x, 5.0.x, 5.5.x, 5.6.x.

Как сделать бэкап MySQL: дамп или бинарный лог?

Таблица, приведенная ниже, поможет вам выбрать один из методов резервного копирования баз MySQL. Для того чтобы выбрать, как сделать бэкап базы данных MySQL, необходимо решить, хотите ли вы иметь возможность восстанавливать MySQL до определенной контрольной точки, или фильтровать объекты во время создания резервной копии или восстановления MySQL. Также можно комбинировать оба метода резервного копирования MySQL для одного сервера.

 

Возможности автоматического бэкапа MySQL Дамп файл Бинарный лог
Возможность восстановления единичного объекта MySQL (таблица, схема…) Да[1] Нет
Скорость резервного копирования MySQL Медленно Быстро
Скорость восстановления MySQL Очень медленно Быстро
Размер бэкапа базы MySQL Маленький Большой
Возможность восстановления MySQL до контрольной точки Да Да
Поддержка инкрементального/дифференциального бэкапа MySQL Да Да
Онлайн бэкап MySQL Да Да
Согласованность Да Да
Восстановление MySQL до предыдущей основной версии Да[2] Нет
Возможность восстановить MySQL до новой основной версии Да Нет

[1] Чтобы восстановить единичный объект MySQL, необходимо отредактировать дамп файл.

[2] Чтобы восстановить базу MySQL до предыдущей версии, Вам, возможно, потребуется отредактировать SQL файл, если вы используете функции, недоступные в предыдущей версии. Как правило, восстановление MySQL до предыдущей версии не поддерживается и не гарантируется.

Автоматический бэкап MySQL с внутренним агентом

Автоматический бэкап базы данных MySQL в режиме дампа

На протяжении всего срока существования БД MySQL создает логи, которые можно использовать для репликации и/или защиты БД с помощью технологии P.I.T.R (восстановление MySQL до заданной контрольной точки).
По умолчанию агент MySQL создает дамп каждой БД отдельно. Это значит, что, если вам нужно восстановить весь сервер, все БД будут согласованы по-отдельности, но их резервные копии не не будут создаваться в одно и тоже время. Значит базы данных MySQL не будут согласованы глобально. Чтобы решить данную проблему, агент для резервного копирования MySQL также будет сохранять лог файлы, создаваемые во время резервного копирования. Эти лог файлы можно будет считать впоследствии, чтобы гарантировать согласованность баз данных на определенный момент времени.

На рисунке 1, показан процесс создания бэкапов баз данных MySQL БД1, БД2 и БД3 (процесс занимает несколько часов). Во время данного процесса генерируются 3 лог файла. Эти файлы включаются в полный бэкап MySQL. Следующий инкрементальный или дифференциальный бэкап MySQL сохранит только бинарные логи, созданные после полного бэкапа. Чтобы гарантировать, что только одна копия каждого лог файла включена в бэкап, необходимо активировать функцию Accurate для выполнения задачи.

В примере выше, первый инкрементальный бэкап, созданный после полного бэкапа, будет включать логи 5 и 6, второй инкрементальный бэкап будет включать логи 7 и 8. Дифференциальный бэкап включал бы лог файлы 5, 6, 7 и 8.
При использовании функции all_databases будут создаваться дампы всех БД одновременно. При этом лог файлы , созданные по завершении полного бэкапа, не будут включаться в него, а логи, сгенерированные до завершения задачи, будут включены в полный бэкап. В примере на рисунке 2 показано, что полный бэкап сгенерирует единый дамп файл «all-databases.sql», который будет включать лог файлы 2 и 3. Первый последующий инкрементальный бэкап будет включать логи 4, 5 и 6.

Как сделать бэкап базы данных MySQL в режиме бинарных логов

В режиме бинарных логов инструмент MySQL использует программу Percona XtraBackup, которая представляет собой утилиту для создания горячего бэкапа серверов MySQL, которая не блокирует БД во время резервного копирования. Технология Percona использует методы, гарантирующие согласованность всего бэкапа MySQL.

Утилита бэкапа MySQL может создавать резервные копии данных из хранилищ InnoDB, XtraDB, и MyISAM на немодифицированных серверах MySQL 5.0, 5.1 и 5.5, также как это делает утилита Percona Server с XtraDB.
Более подробную информацию об утилите Percona вы найдете на сайте:

http://www.percona.com/doc/percona-xtrabackup.

Оценка информации при бэкапе таблицы MySQL

Команда estimate позволяет отобразить всю информацию, найденную агентом MySQL. В случае режима дампа, наше ПО не может оценить размер дамп файла для БД. Вместо этого оно отобразит размер БД.

Информация о резервном копировании MySQL в режиме дампа

Агент MySQL сгенерирует следующие файлы в каталоге Bacula для сервера, имеющего единую БД “test”.

Mysql backup

 

Файл Тип Пояснение
global-grants.sql глобальный Список пользователей, их пароли и специальные функции
settings.txt глобальный Текущие переменные для mysql сервера
my.cnf глобальный Конфигурация MySQL
createdb.sql БД Скрипт создания БД
schema.sql БД Скрипт создания схемы БД
data.sql БД Данные БД в формате дампа
grants.sql БД Список всех пользователей, связанных с БД

Таблица 2. Содержание бэкапа MySQL в режиме дампа

Восстановление MySQL

Bacula позволяет восстановить бэкап MySQL в нескольких режимах восстановления:

  • Восстановление MySQL из дамп файла или бинарных логов
  • Восстановление пользователей и ролей
  • Восстановление единой БД MySQL
  • Восстановление MySQL до контрольной точки

Чтобы восстановить бэкап MySQL в режиме бинарных логов, агент использует утилиту percona.

Как сделать бэкап базы данных MySQL без использования плагина бесплатно

Создание дампа базы данных MySQL

Данный способ полностью бесплатен, поскольку позволяет делать бэкап MySQL с помощью open source версии Bacula Community и без дополнительных плагинов. Для резервного копирования небольших баз данных MySQL можно использовать простые bash-скрипты для резервного копирования баз данных. Для случая с резервным копированием баз MySQL можно сделать скрипт бэкапа MySQL, который будет запускаться на клиенте и делать dump базы данных MySQL.

#!/bin/bash  

mysqldump -uuser -ppassword —all-databases | gzip > /opt/mysql_backup/backup.`date +%F`.sql.gz 

find /home/bacula-backup/ -type f -mtime +3 -exec rm -f {} ;

Этот скрипт бэкапа MySQL сохранит дамп всех БД MySQL в директорию /opt/mysql_backup/ из которой мы и будем делать резервные копии дампов базы данных, при помощи директивы Client Run Before Job.

Пример задачи на бэкап базы MySQL:

Job {

   Name = «BackupSmallMysqlServer»

   Type = Backup

   Level = Incremental

   Client = mysqlserver1

   FileSet = «mysqlserver»  

   Schedule = «WeeklyCycle»  

   Storage = SD1  

   Messages = Standard

   Pool = Mysql

   ClientRunBeforeJob = «/opt/sbin/mysql.sh»

   SpoolAttributes = yes

   Priority = 10

   Write Bootstrap = «/var/lib/bacula/%c.bsr»

     }

   FileSet {  

     Name = «mysqlserver»  

     Include {    

        Options {      

          signature = MD5      

          compression = GZIP    

                }

     File = /opt/mysql_backup/  

              }

            }

Этот способ применим для бэкапа ненагруженных баз данных MySQL, например баз данных небольших сайтов, для которых блокировка таблиц во время дампа не критична

www.backup-solutions.ru

Если вы храните данные в БД MySQL и вам важно не потерять их, то вам нужно регулярно делать бэкапы. Эта статья научит вас быстро через консоль делать бэкапы и восстанавливать их в БД MySQL. Также вы сможете перенести данные на другой сервер.

  • Как сделать бэкап через командную строку (используя mysqldump)
  • Как сделать бэкап MySQL БД со сжатием
  • Как восстановить БД MySQL из бэкапа
  • Бэкап и восстановление через adminer

Как сделать бэкап через командную строку (используя mysqldump)

Если у вас есть доступ к серверу через консоль (SSH) вы можете быстро делать бэкапы и разварачивать их обратно. Эта позволяет быстро создавать дамп базы данных (дамп — это текстовый вариант БД) и восстанавливать их обратно, быстрее чем через phpmyadmin, adminer и прочее. Дамп базы будет состоять из SQL-команд для создания копии вашей БД. Вот команда создания дампа: 

$ mysqldump --opt -u [uname] -p[pass] [dbname] > [backupfile.sql] 

[uname] — Имя пользователя БД (возможно root)
[pass] — пароль к вашему пользователю, можно писать слитно если он без каких-то особых знаков и пробелов, например -proot, -ppassword
[dbname] — имя вашей БД
[backupfile.sql] — имя файлу куда будет сохранен бэкап
[—opt] — опции к команде mysqldump, можно пропустить и не писать

Допустим у вас есть база данных Drupal, а имя пользователя root с паролем password и имя файла будет backup.sql, тогда команда будет такая:

$ mysqldump -u root -ppassword DrupalDB > backup.sql 

Можно опустить пароль или пароль содержит пробелы и другие особые знаки (#!,-_), то тогда вам придется вводить пароль отдельно и команда будет такая: 

$ mysqldump -u root -p DrupalDB > backup.sql 

Вы можете также бэкапить отдельные таблицы, для этого нужно перечислять таблицы через пробел, например nodes users: 

$ mysqldump -u root -p DrupalDB nodes users > backup.sql

Помимо того чтобы бэкапить отдельные таблицы, можно бэкапить сразу несколько БД, для этого нужно указать параметр —databases это позволит через пробел указать нужные БД:

$ mysqldump -u root -p --databases DrupalDB Drupal7 Drupal8 > backup.sql 

Если вы хотите перенести сервер MySQL полностью, то вы можете скопировать все данные с помощью параметра —all-databases:

$ mysqldump -u root -p --all-databases > alldb_backup.sql 

Команда mysqldump имеет также несколько полезных параметров:

—add-drop-table — позволяет удалять таблицы перед разварачиваем этого бекапа (то есть в дамп будет добавлены SQL-запросы DROP TABLE перед CREATE TABLE той же таблицы).

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

—add-lock — позволяет добавить LOCK TABLES и UNLOCK TABLES. Если размер БД большой то таблицы могут быть залочены на продолжительное время.

 Как сделать бэкап MySQL БД со сжатием

Пожалуй наиболее подходящий варинт, потому что сжать удается в 10-20 раз и бэкапы из больших баз данных становится вполне небольших размеров. Для сжатия мы будем пользоваться командой gzip:

$ mysqldump -u root -p DrupalDB | gzip -9 > backup.sql.gz 

Если вы хотите разархивировать файл (не восстановить БД, а просто разархивировать), то воспользуйтесь этой командой:

$ gunzip backup.sql.gz

Как восстановить БД MySQL из бэкапа

Для восстановления БД из дампа, вам нужна чистая БД, можете удалить таблицы с помощью adminer’а или phpmyadmin’а. Если вы использовали параметр —add-drop-table, то таблицы сами удаляться и зальются и ничего удалять прежде не нужно. Вот команда чтобы восстановить БД из дампа:

$ mysql -u root -p DrupalDB < backup.sql 

Если у вас был сжатый бэкап, то воспользуйтесь этой командой:

gunzip < backup.sql.gz | mysql -u root -p DrupalDB 

drupalbook.ru

You May Also Like

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.