Случилось - необходимо восстановить базу данных из резервной копии, предварительно сделанной. Что-ж, бывает.
Существует два метода:
- из дампа базы - если бекап выполнялся через 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+
Комментарии
Оставить комментарий
Базы данных - MySql (Maria DB)
Термины: Базы данных - MySql (Maria DB)