Php восстановление из дампа

Как снять бекап базы в Битрикс?

Всем привет. В данной статье мы рассмотрим способы снятия дампа базы данных двумя популярными способами: с помощью Битриксового механизма и консольными командами.

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

С помощью механизма Битрикс

Выполняется очень просто с помощью механизма создания бекапа Настройки / Инструменты / Резервное копирование

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

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

Восстановление дампа

Для восстановления дампа понадобится файл restore.php. Его необходимо положить в корень сайта и запустить процедуру восстановления. Затем, загрузить архив с дампом и восстановить базу данных.

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

После восстановления, не забудьте проверить, что файл restore.php удален с сайта.

С помощью консольных команд

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

  • Нужно исключить тяжелые таблицы из дампа (фасеты, таблицы HL и т.п.). В Битриксовом механизме создания бекапа нельзя исключать таблицы, кроме поискового индекса, логов и статистики.
  • Владелец отказывается пускать в админку и не дает доступы от сайта. Но у вас есть ssh доступ.
  • Нужно по-быстрому сделать дамп базы данных на всякий случай.

Как снять дамп

Для процедуры снятия дампа нужного сайта берем доступы к MySQL из файла /bitrix/php_interface/dbconn.php

Затем в консоли вводим команду, подставляя доступы базы данных:

Убедитесь перед операцией, что места на диске хватит для создания дампа

Исключение таблиц из дампа

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

В моем случае мне попадалась тяжелейшая таблица с фасетными индексами. Тогда у меня битриксовое создание бекапа занимало 8-10 часов только из-за этой таблицы.Учитывая, что у меня мощное железо и на сайте 100+ тысяч товаров.Тогда этот способ оказался действительным.

Восстановление дампа

Восстановление дампа выполняется очень просто

Заключение

Прибегнуть к способу создания бекапа базы с помощью консоли – дело хитрое и для экспертов. Поэтому без особой причины лучше обойтись созданием бекапа с помощью механизма Битрикс.

Новые записи

Источник

Как восстановить базу MySQL

Обновлено

Обновлено: 13.04.2023 Опубликовано: 25.10.2016

В данном примере показано восстановление из заранее сделанного dump-файла (с помощью mysqldump). Если нужна инструкция по созданию резервной копии, читайте Как сделать дамп базы MySQL.

Подготовка базы

Подключаемся к командной оболочке mysql:

* данной командой мы подключимся к СУБД под пользователем root. Опция -p потребует ввода пароля.

Для восстановления базы сначала необходимо ее создать:

> CREATE DATABASE db DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;

* подробнее про создание баз читайте на странице Создание и удаление баз в MySQL/MariaDB.

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

> CREATE USER ‘dbuser’@’localhost’ IDENTIFIED BY ‘password’;

> GRANT ALL PRIVILEGES ON db.* TO ‘dbuser’@’localhost’;

Из файла через командную строку

Если при создании дампа использовалась gzip, сначала распаковываем архив:

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

Команда выполняется из UNIX-shell:

* где root — учетная запись, от которой идет подключение к серверу баз данных; DNBAME — имя базы, которую необходимо восстановить (переменная, которую мы задали ранее); /tmp/recovery.sql — файл дампа, из которого восстанавливаем базу.
* можно также добавить опцию -v — она позволит показать на экране ход процесса, однако, она очень сильно снижает скорость восстановления — не рекомендуется ее использовать для больших баз.

На самом деле, если внутри дампа есть указание на переход к конкретной таблице (USE table), то восстановление будет выполняться в нее, а не ту таблицу, которую мы указали в переменной DBNAME. Как это проверить и изменить сказано ниже.

Если у нас много файлов, которые нужно импортировать, можно выполнить следующую команду:

cat /tmp/*.sql | mysql -u root -p db

* в данном случае мы прочитаем из каталога /tmp все файлы, заканчивающиеся на .sql и импортируем их содержимое в базу.

С помощью phpMyAdmin

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

Восстановление базы при помощи phpMyAdmin

Выбираем файл с резервной копией.

Нажимаем по OK и ждем восстановления данных.

Пропускать ошибки

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

Суть сводится к простому добавлению ключа —force или -f:

Восстановление в другую базу

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

* где database_name — имя конкретной базы.

Для смены базы просто редактируем это значение на любое другое, например, строка:

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

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

sed ‘s/USE `database_name`;/USE `new_database_name`;/’ -i /tmp/dump.sql

* в данном примере мы заменим имя базы database_name на new_database_name в файле /tmp/dump.sql.

Восстановление в другую таблицу

Команда mysql не предусматривает возможности восстановить дамп только для одной таблицы. Есть два варианта это обыграть.

1. Восстановление с применением временной базы.

Чтобы выполнить развертывание конкретной таблицы, нам нужно сначала сделать восстановление в отдельную базу, после чего скопировать таблицу в нужную базу командой на подобие этой (должна выполняться в среде SQL):

> INSERT INTO database_name.table_name SELECT * FROM new_database_name.table_name;

* в данном примере выполняется копирование содержимого таблицы table_name из базы данных new_database_name в базу database_name.

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

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

mysqldump -uroot -p database_name table_name > /tmp/dump_base_table.sql

После чего уже выполняем восстановление из дампа.

Возможные ошибки

В процессе восстановления мы можем столкнуться с разными ошибками. Рассмотрим их примеры.

MySQL server has gone away

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

ERROR 2006 (HY000) at line xxx: MySQL server has gone away.

Как правило, ее причина в низком значении параметра max_allowed_packet, который отвечает за ограничение выполнения команд из файла. Посмотреть текущее значение можно командой в mysql:

> SHOW VARIABLES LIKE ‘max_allowed_packet’;

Чтобы увеличить значение параметра, открываем конфигурационный файл my.cnf:

* в некоторых версиях СУБД конфиг может находится по пути /etc/my.cnf.d/server.cnf.

В разделе [mysqldump] редактируем или добавляем:

[mysqldump]
.
max_allowed_packet = 512M

* значение для данного параметра не обязательно должно быть таким большим.

Перезапускаем mysql одной из команд:

systemctl restart mariadb

Row size too large

Ошибка выскакивает после небольшого времени работы восстановления. Более полный текст выглядит, примерно, так:

ERROR 1118 (42000) at line 608: Row size too large (> 8126). Changing some columns to TEXT or BLOB may help. In current row format, BLOB prefix of 0 bytes is stored inline.

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

Для решения проблемы мы можем добавить опцию innodb_strict_mode со значением 0. Данная опция регламентирует более строгий режим работы СУБД. Это грубое решение, которое позволит нам добиться результата, но мы можем выполнить настройку тонко — об этом можно прочитать на соответствующей странице блога mithrandir.ru.

Мы же сделаем все по-быстрому. Открываем конфигурационный файл СУБД — его местоположение зависит от версии и реализации, например:

* это пример расположения для базы MariaDB 10. Более точное расположение можно найти в файле /etc/my.cnf.

Приводим опцию innodb_strict_mode к виду:

[mysqld]
.
innodb_strict_mode = 0

systemctl restart mariadb

* в данном примере мы перезапустили сервис для mariadb.

Источник

Импорт mysql дампа средствами php

Импорт mysql дампа средствами php

В моем примере база была InnoDB, поэтому пример привожу с ее фишками:

//читаем файл с дампом $str = file_get_contents("dump.sql"); //если есть CREATE TABLE, тогда создаем таблицы if( preg_match_all("/\-\- Table.*?\s\-\-\s(.*?)\-\-/s", $str, $p) ) < $er = false; foreach( $p[1] as $v ) < if( trim($v) != '' ) < if(!mysql_query(trim($v), $link)) < echo 'Ошибка запроса:'.$v.''; $er = true; > > > > //если есть инсерты, инсертим ;) if(preg_match_all("/\-\- Dumping data.*?\s\-\-\s(.*?)\-\-/s", $str, $p))  foreach( $p[1] as $v ) < if( trim($v) != '' ) < if(!mysql_query(trim($v), $link)) < echo 'Ошибка запроса:'.$v.''; $er = true; > > > > //создаем связи между таблицами if(preg_match_all("/\-\- Constraints.*?\s\-\-\s(.*?)\-\-/s", $str, $p))  foreach( $p[1] as $v ) < if( trim($v) != '' ) < if(!mysql_query(trim($v), $link)) < echo 'Ошибка запроса:'.$v.''; $er = true; > > > > if( $er !== false ) < echo ''.gettext("Дамп базы данных установлен.").''; > else < echo ''.gettext("Дамп базы данных установлен с ошибками.").''; >
А ещё по теме
Класс для работы с изображениями PHP

Введение в класс ImageResize В этой статье опишем простой класс для работы с изображениями. Уже…

Функция Preg_quote

Функция Preg_quote экранирует символы в регулярных выражениях. string preg_quote( string $str [, string $delimiter =…

Функция Imagecreatefrompng

Функция Imagecreatefrompng создает новое изображение из PNG файла или URL. resource imagecreatefrompng( string $filename )…

Функция Floor

Функция Floor округляет дробь в меньшую сторону. mixed floor( float $value ) Функция Floor возвращает…

Директива Session.cookie_lifetime

Директива Session.cookie_lifetime указывает время жизни в секундах сессионного Cookies, отправляемого в браузер клиента. session.cookie_lifetime integer…

Функция Array_pop

Функция Array_pop извлекает последний элемент массива. mixed array_pop( array &$array ) Функция Array_pop извлекает и…

Источник

Vadiok / dump_db.php

This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters

$ user = ‘homestead’ ;
$ password = ‘secret’ ;
$ db = ‘homestead’ ;
$ file = ‘dump.sql.gz’ ;
$ command = sprintf(
‘mysqldump -u %s -p\’%s\’ %s | gzip -9 > dump.sql.gz’ ,
$ user ,
$ password ,
$ db ,
$ file
);
if (!empty( $ _GET [ ‘delete_dump’ ]))
unlink(dirname(__FILE__) . ‘/’ . $ file );
echo ‘Файл дампа удален’ ;
exit();
>
exec( $ command );
echo sprintf( ‘Скачать
‘ , $ file );
echo sprintf( ‘Удалить дамп
‘ , basename(__FILE__));
  • пользователь homestead
  • пароль secret
  • база данных work_db_name
  • файл дампа dump.sql

Восстановление базы из дампа

Выполнение дампа для параметров, указанных выше:

mysql -u homestead -psecret work_db_name  dump.sql

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

Создание дампа в .gz архиве

mysqldump -u homestead -psecret work_db_name | gzip -9 > dump.sql.gz

Источник

Читайте также:  Html list style line
Оцените статью