• Mysql бэкап всех баз. Бэкап базы данных MySQL на сервере Ubuntu

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

    Казалось бы, что такого важного в подобной теме? Подумаешь, какая-то копия сайта, ведь мы же платим деньги за хостинг и он обязан отвечать за сохранность содержимого обслуживаемых сайтов.

    В этом есть доля правды, но от форс-мажора никто не защищен и представьте свое удивление, когда в один прекрасный день вы переходите на свой сайт и видите вместо подобное сообщение об ошибке.

    А знаете что само страшное? Это то, что вы не сделали его резервную копию (файлы и база данных).

    Невозможно представить, что все ваши труды и постоянный доход прекратили существование по такой глупости.

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

    Но покатим-то причинам сервер, где расположен винчестер с вашим сайтом перестал работать, чтоб вы знали хостинг это всего лишь виртуальное хранилище данных, а в реале где-то на земле сооружено специальное помещение с множеством современных компьютеров и тысячами Гб памяти.

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

    Хостинг-провайдер пришлет вам извинения и больше ничего. Ну а вам естественно придется начинать карьеру онлайн предпринимателя с самого нуля. (

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

    Лично я на собственной шкуре сам несколько дней назад испытал страх, что в один миг могу все потерять, когда у моего хостинга полетели DNS сервера и мой блог был недоступен для посетителей какое-то время.

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

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

    Причины, из-за которых может пропасть сайт:

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

    Резервная копию фалов сайта на хостинге

    Начнем с того что практически каждый хостинг провайдер ежедневно создан бэкапы всех данных клиентов.

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

    Я поставил периодичность 1 раз в день и завел для этого отдельных почтовый аккаунт, чтобы не захламлять рабочий адрес архивами копий баз блога. Как видите, нет ничего сложного!

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

    Лучше потратить пару минут времени, чем несколько месяцев на восстановления проекта из веб-архивов. Пока

    Организовываем автоматические бэкапы базы данных MySQL.

    Каждая база данных должна быть подстрахована резервным копированием или бэкапом (backup). Если вы все еще делаете это вручную, то можете радоваться, потому что есть простое решение автоматического бэкапа на PHP. С помощью данного скрипта вы можете передавать конкретные таблицы для резервного копирования или сделать резервное копирование всей базы данных.

    Как реализовать mysql backups?

    Лучше всего скопировать код предоставленного скрипта и поместить его в папку «database_backups», как показано на скриншоте ниже. Затем при вызове файла backup. php , он будет создавать резервную копию базы данных на вашем сервере. Я бы рекомендовал периодически копировать все файлы бэкапов себе на компьютер или другое хранилище, что бы перестраховаться на случай потери хостинга.

    Автоматизация mysql backups с помощью CRON

    CRON является проверенным планировщиком заданий, который позволяет запускать скрипты в определенное время. Например, можно делать бэкапы базы данных ночью, когда падает трафик. Вы можете легко настроить CRON, если его поддерживает ваш хостинг. Для этого вам необходимо выполнить следующую команду, в которой нужно просто изменить ссылку на ваш файл создающий бэкапы.

    Wget -O /dev/null http://your-site.com/database_backup/backup.php

    PHP код файла

    Мы рассмотрели простой пример реализации автоматического бэкапа базы данных mysql. Да, способ дубовый, но он приемлем для маленьких сайтов. Если у вас большой проект, то использование php очень медленное в сравнении с использованием mysqldump . Убедительная просьба к тем, кто знает как организовать резервное копирование лучше, напишите в комментариях.

    Сегодня мне понадобилось настроить автоматический бэкап базы данных с одного хостинга на другой. Я рассмотрел несколько вариантов создания резервных копий баз данных и остановился на самом простом — с помощью утилиты mysqldump. Сейчас я расскажу как это сделал.

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

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

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

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

    mysqldump -u <ПОЛЬЗОВАТЕЛЬ> -p<ПАРОЛЬ> --extended-insert=false <БАЗА> > site-$(date +%Y-%m-%d).sql

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

    mysqldump -h 92.53.114.27 -u <ПОЛЬЗОВАТЕЛЬ> -p<ПАРОЛЬ> --extended-insert=false <БАЗА> > site-$(date +%Y-%m-%d).sql

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

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

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

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

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

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

    $config = [ // ip адрес сервера, с которого будем копировать базу "ip" => "11.11.111.11", // Путь до папки в которой будут лежать дампы баз "path" => "/var/database_backups/sitename", // Шаблон имени файла дампа базы. Вместо подставится дата в формате 2015-04-19 "filenamePattern" => "dump_.sql", // Максимальное количество дампов, хранящихся на сервере "maxFilesCount" => 3, // Настройка подключения к БД "db" => [ "name" => "site", "user" => "root", "password" => "mysql", ], ]; $ip = !empty($config["ip"]) ? "-h $config" : ""; $filename = str_replace("", "$(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:

    0 1 * * * php /var/database_backups/database_backup.php

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

    А что дальше?

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

    Для этого в командной строке вашего shell выполним:

    # mysqldump -u root -p -h localhost -x -F base >

    где флаги обозначают:
    -u
    -h
    -p – указывает на то, что для входа в MySQL привилегированному пользователю (root) требуется ввести пароль;
    -x – блокируем все таблицы бэкапируемой базы данных от изменений на время работы выгрузки дампа;
    -F – сбрасываем на диск журнал регистрации сервера MySQL прежде, чем запустить дамп;
    base – имя бекапируемой базы данных MySQL;
    /var/backups/base_`date +%Y-%m-%d%n`.sql – путь и имя файла дампа бэкапируемой базы данных MySQL, где `date +%Y-%m-%d%n` припишет к имени файла дату его создания.

    В результате работы это команды мы получим файл дампа необходимой нам базы base, который будет выглядеть как:

    # ls -Al /var/backups/ | grep base -rw-r--r-- 1 root wheel 2738944 13 апр 10:03 base_2010-04-13.sql

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

    # mysql -u root -h localhost -p

    где флаги обозначают:
    -u – указываем привилегированного пользователя на базы MySQL (в данном примере это root);
    -h – указываем имя хоста, на котором работает MySQL (в данном примере это localhost);
    -p – указывает на то, что для входа в MySQL привилегированному пользователю (root) требуется ввести пароль.

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

    Mysql> CREATE DATABASE base;

    Для просмотра результата дадим команду, которая отобразит существующие базы:

    Mysql> SHOW DATABASES;

    Теперь нам осталось только войти во вновь созданную нами базу данных и загрузить в нее дамп выгрузки из архивного файла нужной даты:

    Mysql> USE base; Database changed mysql> source /var/backups/base_2010-04-13.sql;

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

    Mysql> exit Bye

    Существует еще один способ восстановления из архива. Для этого откроем необходимый нам файл бэкапа и внесем в самое его начало следующие строки:

    # nano -w /var/backups/base_2010-04-13.sql CREATE DATABASE base; USE base;

    Сохраним внесенные изменения, сделанные в nano, нажав CTRL +x , и подтвердим, нажав по запросу y . Теперь в командной строке вашего shell выполните команду:

    # mysql -u root -h localhost -p < /var/backups/base_2010-04-13.sql

    введите пароль привилегированного пользователя root, чтобы импортировать бекап в прописанную нами вновь созданную базу base.

    От автора: что-то сегодня настроение какое-то лирически-меланхолическое. Наверное, на прошлогодний осенний лист я наступил, и от этого поплыл.… Так, лирику в сторону! Сегодня мы научимся, как сделать бэкап базы данных MySQL. Но все-таки жаль, что нельзя сделать «бэкап» времени!

    Бэкапим легонько

    Не будем сразу кидаться «в кусты с крапивой», и рассмотрим тему резервных копий с легких методов. Как всегда, начнем с нашей любимой графической оболочки phpMyAdmin. Рассмотрим, какими средствами создания в MySQL бэкапа базы обладает эта программа.

    Заходим на сервер СУБД под учетной записью администратора. Затем слева выбираем базу, на которой будет тренироваться. Переходим на вкладку «Экспорт», и в разделе «Способ экспорта» отмечаем второй вариант («Обычный»).

    После этого для редактирования станут доступны все возможные параметры бэкапа MySQL. Ниже в окне можно отметить конкретные таблицы базы, и создать только их копии. В поле «Вывод» активируйте вариант «Вывод в файл», и нажмите внизу «Ок». Копия базы данных сохранится в папке загрузки браузера.

    Если честно, «господа-профессионалы программных наук», phpMyAdmin мне (как и вам) уже наскучил. Конечно, это «знатная» программная оболочка, обладающая «выдающимися» способностями в сфере администрирования СУБД. Но уже приелась!

    Раз пошли такие «пляски», предлагаю испробовать что-то новенькое, и в качестве эксперимента для бэкапа базы данных MySQL использовать другую оболочку. Например, MySQL Admin.

    Программная оболочка от авторов СУБД

    Странно, но создатели столь популярной системы управления базами долгое время не пытались разработать для нее собственной графической оболочки. Но несколько лет назад появилась MySQL Admin. Хотя в данный момент поддержка программы ее создателями прекращена, но все-таки она обладает хорошим функционалом для бэкапа таблиц данных MySQL.
    Чаще всего MySQL Admin используется как альтернатива phpMyAdmin, если размер резервируемой базы превышает 2 Мб. Это максимальный размер бэкапа, который поддерживается phpMyAdmin.

    Скачиваем MySQL Admin, устанавливаем ее в файловую систему своего компьютера. Затем запускаем программу, и заполняем все поля параметров, которые нужны для подключения к серверу БД: название соединения, пароль, пользователя, хост и порт. Обратите внимание на последние два параметра. Их значение может отличаться для вашего ПК в зависимости от типа подключения (удаленно или локально) и используемой сборки.

    Теперь переходим непосредственно бэкапу БД MySQL. В меню слева выбираем пункт «Backup».

    Внизу нажимаем «New Project», в разделе «Schemata» выделяем нужную БД. Затем кнопкой с указателем направления перемещаем выделенный элемент в «Backup Content». Еще раз жмем на название базы, выделяем нужные таблицы и затем переходим по ссылке «Execute Backup Now».

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

    Копия базы данной сохранена в указанной папке. Загляните в нее, и убедитесь в этом самостоятельно. Доверяй, но наличие бэкапа базы проверяй! Извините, последствие «наступа» на осенний лист

    Использования MySQLDump

    В набор встроенных средств СУБД входит MySQLDump, которая пригодится, чтобы сделать бэкап базы MySQL, когда «под рукой» нет специализированного ПО. Данная утилита не имеет собственного интерфейса, поэтому вся работа с ней происходит через командную строку. Запускаем cmd и переходим на тот диск и директорию, где хранится исполняемый файл утилиты:

    Давайте немного поэкспериментируем с утилитой MySQLDump. Например, с помощью MySQL сделаем бэкап базы world и разместим его на рабочем столе. Код запроса:

    mysqldump -uroot wordpress>C:\Users\домашний\Desktop\dump\world_copy.sql

    mysqldump - uroot wordpress > C : \ Users \ домашний\ Desktop \ dump \ world_copy . sql

    Теперь заглянем на свой рабочий стол (в указанную папку), проверим ее содержимое.

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

    Многим покажется, что я привожу слишком простые примеры реализации, Конечно, можно рассмотреть бэкап MySQL rsync, но соваться без подготовки в «неизвестные дебри» новичкам не стоит. Как-нибудь в другой раз, когда мы все окрепнем в своих

    Создание резервных копий средствами PHP

    С самого первого знакомства с языком PHP он показался мне очень сложным, и даже неприветливым. Но затем, освоив правила синтаксиса, все стало на свои места. И теперь я и PHP стараемся дружить. Опять с меня лирика «прет»! Пардон, друзья.

    Сейчас рассмотрим простейший пример бэкапа MySQL в PHP. Для этого мы будет использовать не совсем «средства языка». Из файла PHP мы запустим уже хорошо нам знакомую утилиту MySQLDump и передадим ей все нужные параметры для создания копии указанной базы.

    Код примера занимает всего несколько строк, и все благодаря PHP-функции system(), которая запускает на выполнению внешнюю (системную) программу, переданную ей в качестве основного параметра. Ее синтаксис:

    string system (string $commandа [, int &$return_variable ])

    string system (string $ command а[ , int & $ return _ variable] )

    В общем, это полезная функция, которая нам пригодиться для создания MySQL бэкапа в Cети. Пример кода:

    C:/Users/домашний/Desktop/dump/world_copy.sql"; system($commanda); ?>

    $commanda = "mysqldump -uroot wordpress>C:/Users/домашний/Desktop/dump/world_copy.sql" ;

    system ($commanda ) ;

    До боли знакомый код! И результат тоже почти идентичен предыдущему. Но ведь это PHP, и его возможности почти безграничны. Давайте немного «подшаманим» пример, и сделаем так, чтобы код бэкапа MySQL скрипта создавал копию БД, имя которой включает в себя дату ее «сотворения».