Вам бонус- начислено 1 монета за дневную активность. Сейчас у вас 1 монета

MySQL: восстановление базы данных из резервной копии (из backup)

Практика



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

Существует два метода:
  • из дампа базы - если бекап выполнялся через mysqldump
  • из архива базы - если бекап делали просто архивированием каталога с базой данных


Метод 1: из дампа

Этот метод предполагает наличие файла резервной копии, сделанного утилитой mysqldump. Этот файл имеет ни много не мало формат SQL - т.е. в нем банально прописаны команды для пересоздания базы данных с использованием обычных MySQL команд.

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

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

CREATE DATABASE IF NOT EXISTS `mydatabase`;
USE mydatabase;

-- MySQL dump 10.13  Distrib 5.1.56, for debian-linux-gnu (i486)
--
-- Host: localhost    Database: mydatabase
-- ------------------------------------------------------
-- Server version       5.1.56-0.dotdeb.0

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;

--
-- Table structure for table `mytable`
--

DROP TABLE IF EXISTS `mytable`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `mytable` (
...
...
...

Обратите внимание на первую строчку: дописываем ее (полюбому такой строчки у Вас в файле нет), где меняем название базы данных на то, которое Вам нужно:

CREATE DATABASE IF NOT EXISTS `mydatabase`;

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

Видите второй строчкой "USE mydatabase;"? Вот убедитесь, что такая команда есть (а ее нет, полюбому, т.ч. дописывайте) и вместо "mydatabase" указывайте название восстанавливаемой базы.

Ну и дальше - записываем файл и выходим обратно в шел.

3) Восстанавливаем:

$ mysql -u root -p < mydatabase.bak

где вместо "mydatabase.bak" указывайте имя файла бекапа (который Вы только что правили).

В общем-то, все.


Метод 2: из архива

Работает в случае, если базу данных Вы бекапили простым копированием ее каталога и его архивации в tar (или не архивации).

1) Останавливаем MySQL сервер.

для Debian/ubuntu:
$ sudo /etc/init.d/mysql stop

для CentOS/redhat:
$ sudo /etc/init.d/mysqld stop

для FreeBSD:
$ sudo /usr/local/etc/rc.d/mysql-server stop

2) Распаковываем базу из tar (если она запакована в tar-архив)

$ tar -xf mydatabase.bak.tar

3) Копируем извлеченный архив (вместе со всеми файлами внутри) по пути, где размещаются все базы данных MySQL. Лучше при этом старый каталог удалить (каталог базы данных, а не весь каталог MySQL, конечно).

4) Проверяем атрибуты - дабы владельцем базы был MySQL. Лучше просто выполнить команду применения атрибутов:

$ sudo chown -R mysql:mysql mydatabase

где mydatabase - это имя каталога базы данных (при этом предполагается, что Вы находитесь в каталоге баз данных MySQL).

5) Запускаем MySQL сервер обратно.

для Debian/ubuntu:
$ sudo /etc/init.d/mysql start

для CentOS/redhat:
$ sudo /etc/init.d/mysqld start

для FreeBSD:
$ sudo /usr/local/etc/rc.d/mysql-server start


На этом все - база восстановлена.

 

Актуально для: MySQL 5.x+
 
 
 
создано: 2017-05-09
обновлено: 2020-10-31
3760



Рейтиг 9 of 10. count vote: 2
Вы довольны ?:


Поделиться:

Найди готовое или заработай

С нашими удобными сервисами без комиссии*

Как это работает? | Узнать цену?

Найти исполнителя
$0 / весь год.
  • У вас есть задание, но нет времени его делать
  • Вы хотите найти профессионала для выплнения задания
  • Возможно примерение функции гаранта на сделку
  • Приорететная поддержка
  • идеально подходит для студентов, у которых нет времени для решения заданий
Готовое решение
$0 / весь год.
  • Вы можите продать(исполнителем) или купить(заказчиком) готовое решение
  • Вам предоставят готовое решение
  • Будет предоставлено в минимальные сроки т.к. задание уже готовое
  • Вы получите базовую гарантию 8 дней
  • Вы можете заработать на материалах
  • подходит как для студентов так и для преподавателей
Я исполнитель
$0 / весь год.
  • Вы профессионал своего дела
  • У вас есть опыт и желание зарабатывать
  • Вы хотите помочь в решении задач или написании работ
  • Возможно примерение функции гаранта на сделку
  • подходит для опытных студентов так и для преподавателей

Комментарии


Оставить комментарий
Если у вас есть какое-либо предложение, идея, благодарность или комментарий, не стесняйтесь писать. Мы очень ценим отзывы и рады услышать ваше мнение.
To reply

Базы данных - MySql (Maria DB)

Термины: Базы данных - MySql (Maria DB)