Недавно я совершил огромную ошибку на своем сервере и закончил неудачной установкой и отсутствием резервных копий.
В основном у меня был plesk с несколькими сайтами wordpress, и по случайности у меня все еще был доступ к моим данным, хотя они больше не были пригодны для использования.
Вот как я восстановил свои файлы и смог получить .sql файл со структурой и данными.
Сначала извлеките данные
Итак, все мои данные mysql лежат на моем сервере в /var/lib/mysql
и организованы в
- по одной папке на имя базы данных
- внутри каждой из этих папок файлы
.frm
и.idb
.
Итак, давайте перенесем все на мой компьютер с помощью scp
.
mkdir mysql
scp -r root@<ip>:/var/lib/mysql/* .
Затем, восстановим версию mysql
Чтобы иметь возможность воссоздать базы данных, нам нужно использовать ту же версию mysql/mariadb.
Для этого запустите cat /var/lib/mysql/mysql_upgrade_info
на сервере.
Я получил что-то вроде 10.1.48-MariaDB
.
Запуск mysql/mariadb на локальном сервере
Поскольку мы знаем точную версию, которая нам нужна, теперь мы будем использовать docker
для запуска сервера mysql именно этой версии.
Итак, запустите на локальном компьютере:
docker pull mariadb:10.1.48
docker run -p 127.0.0.1:3307:3306 --name mariadbtest -e MYSQL_ROOT_PASSWORD=Password123! -d mariadb:10.1.48
Для этого мы запускаем docker на порт 3307 на случай, если другой сервер mysql уже запущен.
Теперь мы можем войти в базу данных, используя наш любимый mySQL explorer, для меня это Sequel Pro.
Вы можете подключиться к базе данных, используя
- хост: 127.0.0.1
- имя пользователя: root
- пароль: Password123!
- порт: 3307
🎉 Теперь у вас есть та же версия mysql, которая была на вашем сервере.
Скопируйте ваши старые базы данных на машину docker
Итак, теперь давайте перенесем каждую базу данных в docker, чтобы иметь к ней доступ:
docker cp dbname/ mariadbtest:/var/lib/mysql
dbname
начните папку, содержащую файлы .frm
и .idb
.
Оттуда, если вы обновите базы данных в Sequel Pro, вы должны увидеть свою базу данных, но при попытке открыть любую таблицу возникает ошибка.
Например, таблица 'dbname.mod844_icl_string_status' не существует
.
Исправьте ошибки
Для того чтобы исправить ошибку, необходимо скопировать предыдущий файл, резервную копию которого мы делали:
docker cp ibdata1 mariadbtest:/var/lib/mysql
После этого перезапустите вашу docker-машину, и вы сможете получить доступ к своим данным с помощью Sequel Pro.
Экспорт данных
Теперь вы можете спокойно экспортировать данные в файл .sql
и подумать о том, чтобы впредь всегда создавать систему резервного копирования!
Ваше здоровье
Меня зовут Мартин Ратино, я разработчик полного стека.
Я управляю криптовалютным компаратором, чтобы помочь вам найти лучшие ставки для любой криптовалюты.
И как удаленный работник с 2016 года, я также хочу, чтобы вы нашли свою «сладкую точку», основанную на ваших увлечениях, чтобы вы могли экспатриироваться и жить своей лучшей жизнью.