- ИТ База знаний
- Полезно
- Навигация
- Серверные решения
- Телефония
- Корпоративные сети
- Курс по сетям
- 15 примеров команды PING для диагностики сети
- Руководство по команде grep в Linux
- Рекурсивно найти слово в файлах и папках Linux
- Как изменить пароль root в CentOS 8
- Руководство по использованию команды wget с примерами
- Как установить или изменить User-Agent с помощью curl
- Рекурсивно найти слово в файлах и папках Linux
- Как сделать резервную копию и восстановить базу данных MySQL с помощью Mysqldump
- Синтаксис команды Mysqldump
- Резервное копирование одной базы данных MySQL
- Резервное копирование нескольких баз данных MySQL
- Резервное копирование всех баз данных MySQL
- Резервное копирование всех баз данных MySQL в отдельные файлы
- Создание сжатой резервной копии базы данных MySQL
- Создать резервную копию с отметкой времени
- Восстановление дампа MySQL
- Восстановление одной базы данных MySQL из полного дампа MySQL
- Экспорт и импорт базы данных MySQL одной командой
- Автоматизация резервного копирования с помощью Cron
- Заключение
- Восстановление базы данных и пароля root в MySQL
- Восстановления базы из дампа
- Через phpMyAdmin
- Как увеличить объем импортируемых баз данных
- Способы увеличения лимитов на исполнение php-скриптов
- Восстановление новой базы данных
- Восстановление баз данных с помощью таблиц
- Форматы таблиц
- Общий принцип восстановления
- Замена значений параметра
- Восстановление пароля
- Использование init-file
- Использование skip-grant-tables
ИТ База знаний
Курс по Asterisk
Полезно
— Узнать IP — адрес компьютера в интернете
— Онлайн генератор устойчивых паролей
— Онлайн калькулятор подсетей
— Калькулятор инсталляции IP — АТС Asterisk
— Руководство администратора FreePBX на русском языке
— Руководство администратора Cisco UCM/CME на русском языке
— Руководство администратора по Linux/Unix
Навигация
Серверные решения
Телефония
FreePBX и Asterisk
Настройка программных телефонов
Корпоративные сети
Протоколы и стандарты
Популярное и похожее
Курс по сетям
15 примеров команды PING для диагностики сети
Руководство по команде grep в Linux
Рекурсивно найти слово в файлах и папках Linux
Как изменить пароль root в CentOS 8
Руководство по использованию команды wget с примерами
Как установить или изменить User-Agent с помощью curl
Рекурсивно найти слово в файлах и папках Linux
Еженедельный дайджест
Как сделать резервную копию и восстановить базу данных MySQL с помощью Mysqldump
Делай бекапы — не будет факапов
В этом руководстве мы рассказываем, как выполнить резервное копирование и восстановление баз данных MySQL или MariaDB из командной строки с помощью утилиты mysqldump.
Обучайся в Merion Academy
Пройди курс по сетевым технологиям
Начать
Файлы резервных копий, созданные утилитой mysqldump, представляют собой набор операторов SQL, которые можно использовать для воссоздания исходной базы данных. Команда mysqldump также может генерировать файлы в формате CSV и XML. Вы также можете использовать утилиту mysqldump для переноса вашей базы данных MySQL на другой сервер MySQL.
Синтаксис команды Mysqldump
Прежде чем приступить к использованию команды mysqldump, начнем с обзора основного синтаксиса.
Выражения утилиты mysqldump имеют следующую форму:
- options — параметры mysqldump
- file.sql — дамп (резервная копия) файла
Для использования команды mysqldump сервер MySQL должен быть доступен и запущен.
Резервное копирование одной базы данных MySQL
Наиболее распространенный вариант использования инструмента mysqldump — резервное копирование одной базы данных.
Например, чтобы создать резервную копию базы данных с именем database_name , используя пользователя root , и сохранить ее в файл с именем database_name.sql , вы должны выполнить следующую команду:
Вам будет предложено ввести пароль root. После успешной аутентификации начнется процесс дампа. В зависимости от размера базы данных процесс может занять некоторое время.
Если вы вошли в систему как тот же пользователь, которого вы используете для выполнения экспорта, и этот пользователь не требует пароля, вы можете пропустить опции -u и -p :
Резервное копирование нескольких баз данных MySQL
ля резервного копирования нескольких баз данных MySQL одной командой вам нужно использовать параметр —database , за которым следует список баз данных, которые вы хотите сделать резервную копию. Каждое имя базы данных должно быть разделено пробелом.
Команда выше создаст файл дампа, содержащий обе базы данных.
Резервное копирование всех баз данных MySQL
Используйте опцию —all-database для резервного копирования всех баз данных MySQL:
Как и в предыдущем примере, команда выше создаст один файл дампа, содержащий все базы данных.
Резервное копирование всех баз данных MySQL в отдельные файлы
Утилита mysqldump не предоставляет возможность резервного копирования всех баз данных в отдельные файлы, но мы легко достигаем этого с помощью простого цикла bash FOR:
Команда выше создаст отдельный файл дампа для каждой базы данных, используя имя базы данных в качестве имени файла.
Создание сжатой резервной копии базы данных MySQL
Если размер базы данных очень большой, рекомендуется сжать вывод. Для этого просто перенаправьте вывод в утилиту gzip и перенаправьте его в файл, как показано ниже:
Создать резервную копию с отметкой времени
Если вы хотите сохранить более одной резервной копии в одном месте, вы можете добавить текущую дату в имя файла резервной копии:
Команда выше создаст файл в следующем формате database_name-20200223.sql
Восстановление дампа MySQL
Вы можете восстановить дамп MySQL с помощью инструмента mysql. Общий синтаксис команды выглядит следующим образом:
В большинстве случаев вам необходимо создать базу данных куда вы будете производить импорт. Если база данных уже существует, сначала вам нужно удалить ее.
В следующем примере первая команда создаст базу данных с именем database_name , а затем импортирует в нее дамп database_name.sql :
Восстановление одной базы данных MySQL из полного дампа MySQL
Если вы создали резервную копию всех своих баз данных с помощью параметра -all-database и хотите восстановить одну базу данных из файла резервной копии, который содержит несколько баз данных, используйте параметр —one-database , как показано ниже:
Экспорт и импорт базы данных MySQL одной командой
Вместо того, чтобы создавать файл дампа из одной базы данных и затем импортировать резервную копию в другую базу данных MySQL, вы можете использовать следующую однострочную команду:
Команда выше передаст вывод клиенту mysql на удаленном хосте и импортирует его в базу данных с именем remote_database_name . Перед выполнением команды убедитесь, что база данных уже существует на удаленном сервере.
Автоматизация резервного копирования с помощью Cron
Автоматизация процесса резервного копирования баз данных так же проста, как создание задания cron, которое будет запускать команду mysqldump в указанное время.
Чтобы настроить автоматическое резервное копирование базы данных MySQL с помощью cronjob, выполните следующие действия:
- Создайте файл с именем .my.cnf в вашем домашнем каталоге пользователя: Скопируйте и вставьте следующий текст в файл .my.cnf . Не забудьте заменить dbuser и dbpasswd на пользователя базы данных и пароль пользователя.
- Ограничьте права доступа к файлу учетных данных, чтобы только ваш пользователь имел к нему доступ, используя команду cmod (подробнее про которую можно прочесть тут):
- Создайте каталог для хранения резервных копий при помощи комадны mkdir (про нее тоже есть статья):
- Откройте ваш пользовательский файл crontab: Добавьте следующее задание cron, которое будет создавать резервную копию имени базы данных mydb каждый день в 3 часа ночи: Не забудьте заменить username вашим реальным именем пользователя. Вы также можете создать еще один cron job, чтобы удалить любые резервные копии старше 30 дней: Конечно, вам нужно настроить команду в соответствии с вашим местоположением резервной копии и именами файлов. Чтобы узнать больше о команде find, ознакомьтесь с нашим Руководством по поиску файлов в Linux с помощью командной строки.
Заключение
Это руководство охватывает только основы, но оно должно быть хорошим началом для тех, кто хочет научиться создавать и восстанавливать базы данных MySQL из командной строки с помощью утилиты mysqldump. Если вы хотите найти больше материалов про базы данных, то просто наберите sql в нашем поиске!
Восстановление базы данных и пароля root в MySQL
Восстановления базы из дампа
Через phpMyAdmin
В основном, пользователи работают с MySQL через панель phpMyAdmin, поэтому ниже приведен наиболее простой способ сделать восстановление из бэкапа вручную. Чтобы восстановить базу из дампа, нужно выполнить несколько действий:
- Открыть phpMyAdmin и выбрать требуемую БД.
- Затем перейти по ссылке «Импорт» – она находится в главном меню.
- В ней нужно найти и открыть раздел «Импортируемый файл», где нужно указать источник бэкапа базы.
- Подтвердить операцию нажатием «Вперед».
- Теперь остается только перезагрузить сервер MySQL.
Как увеличить объем импортируемых баз данных
К сожалению, описанный выше способ восстановить базу данных MySQL подходит в основном для небольших баз данных. Ведь в phpMyAdmin «из коробки» установлены ограничения на максимальный размер загружаемых файлов на сервер в 2 Мб.
Чтобы обойти дефолтные ограничения phpMyAdmin, нужно увеличить размер разрешенных к загрузке файлов. Это можно сделать как в настройках самой программы, так и на стороне сайта/сервера.
Во втором случае (в файлах php.ini / .htaccess ) потребуется увеличить значения по умолчанию ряда опций, влияющих на загрузку:
- upload_max_filesize («максимальный размер загружаемого файла»). Первоначальное значение: «2Mб».
- post_max_size («максимальный размер POST-запросов»). Значение параметра должно быть больше, чем у «upload_max_filesize».
- max_execution_time («время исполнения скрипта»). Чтобы снять ограничения с параметра, ему нужно присвоить значение «0».
- max_input_time («время обработки входящих запросов»).
Способы увеличения лимитов на исполнение php-скриптов
- В настройках конфигурационного файла phpMyAdmin ( config.inc.php ). В файл нужно добавить строки:
После чего добавить туда же переменную, снимающую ограничения со времени исполнения скриптов (после загрузки базы данных ее лучше убрать):
- В пользовательском файле сайта ( php.ini ), где хранятся настройки исполнения php-скриптов. Файл «php.ini» можно найти, если открыть в браузере ранее добавленный (в корень сайта) php-файл. Например, ввести запрос вида «https://mysitename.com/myphpinfo.php», где «mysitename.com» — имя сайта, а «myphpinfo.php» — название php-файла. В открывшемся окне нужно найти параметры «Loaded Configuration File» или «Configuration File (php.ini) Path», где и будет указан путь к «php.ini».
Добавляем в конце файла строки:
- В конфигурационном файле сервера ( .htaccess ), отвечающем, в том числе, за настройку обработки файлов на определенном сайте. Чтобы изменения сработали для всех файлов сайта, «.htaccess» должен обязательно находится в его корневой папке.
Добавляем в файл строки:
Восстановление новой базы данных
1. Если нужно восстановить БД MySQL как новую, порядок действий будет отличаться. Сначала нужно создать базу данных, с тем же названием, как и на сервере.
2. Далее следует загрузить файл дампа SQL с помощью команды «mysql»:
3. В случае, когда дамп был сделан до того, поможет следующая команда:
Следовательно, этими командами можно осуществить восстановление базы данных MySQL без особых трудностей.
Восстановление баз данных с помощью таблиц
Если пользователь не смог сделать бэкап в нужный момент, ему ничего не остается, как приступать к восстановлению утерянных или поврежденных таблиц. Этот процесс можно существенно упростить, если руководствоваться предложенными ниже инструкциями.
Форматы таблиц
Чаще всего, если требуется провести восстановление таблиц в MYISAM-формате, трудностей возникнуть не должно. В интерфейсе phpMyAdmin доступны штатные средства, позволяющие в короткие сроки вернуть базу данных в рабочее состояние.
Другой популярный формат таблиц — InnoDB. Он обладает более высоким быстродействием, снабжен функцией автоматического восстановления и устойчив к сбоям. Однако, для его ручного ремонта потребуется приложить некоторые усилия.
Общий принцип восстановления
Восстановление базы с использованием формата InnoDB можно выполнить благодаря опции innodb_force_recovery. Она будет находиться в конфигурационном файле MySQL.
Перед тем, как ее запустить, можно попытаться получить результат при помощи команды select … into out file . В большинстве случаев она дает возможность сохранить информацию, не прибегая к дополнительным операциям.
Однако, если select … into out file не сработала (например, помешали незаконченные процессы), чтобы восстановить базу из файлов .frm, остается прибегнуть к расширенному параметру innodb_force_recovery.
1. Сначала нужно прописать в конфигурационном файле MySQL опцию innodb_force_recovery.
Расположение конфигурационного файла может отличаться в зависимости от операционной системы. Искать его нужно по следующим путям, согласно указанному приоритету — сверху вниз.
- %WINDIR%\my.ini (%WINDIR%\my.cnf)
- C:\my.ini (C:\my.cnf)
- BASEDIR\my.ini (BASEDIR\my.cnf)
«WINDIR» — папка установки Windows. Обычно, путь к ней выглядит так: C:\WINDOWS .
«BASEDIR» — папка, где установлена база MySQL. Например, для MySQL 8.0 полный путь к ней выглядит так: C:\PROGRAMDIR\MySQL\MySQL 8.0 Server (где «PROGRAMDIR» — папка c программами Windows, обычно это Program Files).
В дистрибутивах Linux:
«SYSCONFDIR» — подкаталог, который использовался для компилирования MySQL (по умолчанию — etc ).
В файле предусмотрена возможность установить для innodb_force_recovery несколько параметров. По умолчанию опция будет иметь вид «innodb_force_recovery = 0». Если установить другие числа (от 1 до 3) можно не только восстановить данные таблицы MySQL, но и процессы, незавершенные из-за аварийной остановки.
2. После открытия my.cnf или my.ini необходимо найти в нем блок [mysqld] , куда и нужно прописать innodb_force_recovery. Пример:
Чтобы применить данный параметр, следует перезапустить сервер MySQL.
Восстановить структуру таблицы MySQL подобным образом можно только в случае, если имеются сохраненные копии файлов данных, журнала InnoDB и таблиц .frm InnoDB, а также конфигурационного файла my.cnf или my.ini.
Замена значений параметра
Главное, чего нужно придерживаться во время работы с innodb_force_recovery – последовательно менять значения параметров от 1 до 3 и перезапускать после этого сервер.
Работать с изменением значений максимально осторожно. Чем выше выбрано значение, тем большее количество информации будет сохранять система. Соответственно, вырастет нагрузка на сервер MySQL и риск потери данных без возможности их восстановить.
- 1 (SRV_FORCE_IGNORE_CORRUPT) — позволит серверу запуститься даже в случае обнаружения поврежденной таблицы.
- 2 (SRV_FORCE_NO_BACKGROUND) — предотвращает запуск основного процесса и других процессов очистки. Иными словами, если случится сбой во время операции очистки фоновых процессов он будет предотвращен благодаря этому значению.
- 3 (SRV_FORCE_NO_TRX_UNDO) — не происходит откат транзакций по завершению восстановления после сбоя.
- 4 (SRV_FORCE_NO_IBUF_MERGE) — предотвращает операции объединения вставленных данных из буфера, при этом не собираются данные статистики. Устанавливается режим InnoDB «только для чтения».
- 5 (SRV_FORCE_NO_UNDO_LOG_SCAN) — не учитываются логи отмены (undo logs) при запуске базы данных. InnoDB учитывает даже незавершенные операции как выполненные. Устанавливается режим InnoDB «только для чтения».
- 6 (SRV_FORCE_NO_LOG_REDO) — отключение ведения логов отката изменений (redo logs) в связи с восстановлением. Оставляет таблицы в неактуальном состоянии, что в свою очередь может внести больше повреждений в Б-деревья и другие структуры базы данных. Устанавливается режим InnoDB «только для чтения».
Пользоваться значениями 4, 5 и 6 не стоит тем, кто не имеет достаточного опыта работы с MySQL таблицами. С их применением в несколько раз возрастает вероятность полной потери информации.
Восстановление пароля
Ситуации, когда может потребоваться сброс и восстановление пароля root, также встречаются часто. Для решения этой проблемы можно воспользоваться одним из предложенных ниже способов.
Использование init-file
Во время запуска MySQL есть возможность сообщить сервису о файле, в котором находятся исполняемые команды SQL. Его адрес следует указать с помощью параметра «init-file».
1. В первую очередь необходимо создать файл «init-file»:
2. Далее нужно добавить в файл следующую строку:
3. Далее следует отключить сервис, если он работает:
4. Затем можно запустить свой файл:
5. Остается подождать немного, пока все будет работать, как надо, и далее остановить данный процесс. В терминале будет отображен вывод «started as proccess» и PID (номер-идентификатор) процесса. Последний как раз и нужно выключить. К примеру*:
* Значение PID приведено для примера. Следует заменить его на актуальное.
6. Теперь можно запустить MySQL стандартным способом и попробовать авторизоваться с помощью нового пароля:
Использование skip-grant-tables
Помимо — init-file можно выполнить сброс пароля с использованием другого параметра —skip-grant-tables . Если запустить с ним сервис, будет пропущена загрузка данных пользователей, что позволяет войти без необходимости вводить логин и пароль.
1. Здесь также сначала требуется отключить базу данных:
2. Дальше нужно запустить вручную MySQL следующей командой:
3. Теперь можно открыть консоль для работы с MySQL:
4. Поскольку загрузка была осуществлена без привилегий пользователей, таблицы с ними теперь нужно подгрузить:
5. На этой стадии можно менять пароль пользователя root:
6. Можно закрывать консоль управления:
7. Остается выключить сервис*, как и в приведенном выше способе:
* Значение PID приведено для примера. Следует заменить его на актуальное.
8. И, наконец, запустить MySQL в стандартном режиме работы:
9. После этого появится возможность авторизации с помощью нового пароля:
Начни экономить на хостинге сейчас — 14 дней бесплатно!