Пришел клиент с задачей восстановить определенный столбец в определенной таблице MySQL с тем вариантом, что бы добавленные данные со времени бекапа остались в базе.
Пишу краткую заметку для себя.
Мне повезло, клиент бекапил таблицы отдельно и был бекап нужной таблицы, если же у Вас полный бекап базы, то можно получить нужный дамп таблицы, например так.
Берем бекап таблицы users.sql.
Столбец нужно восстановить - status.
Переименовываем в дампе таблицу с users на users2:
# sed -i 's/users/users2/g' users.sql
После чего в нашей базе есть таблица users (актуальная версия таблицы) и users2 (версия таблицы из бекапа).
Подключаемся к базе и выполняем запрос:
mysql# UPDATE users SET
users.status = (SELECT users2.status
FROM users2
WHERE users.id = users2.id);
И удаляем временную таблицу users2:
mysql# DROP TABLE users2;
Пишу краткую заметку для себя.
Мне повезло, клиент бекапил таблицы отдельно и был бекап нужной таблицы, если же у Вас полный бекап базы, то можно получить нужный дамп таблицы, например так.
Берем бекап таблицы users.sql.
Столбец нужно восстановить - status.
Переименовываем в дампе таблицу с users на users2:
# sed -i 's/users/users2/g' users.sql
После чего в нашей базе есть таблица users (актуальная версия таблицы) и users2 (версия таблицы из бекапа).
Подключаемся к базе и выполняем запрос:
mysql# UPDATE users SET
users.status = (SELECT users2.status
FROM users2
WHERE users.id = users2.id);
И удаляем временную таблицу users2:
mysql# DROP TABLE users2;
Комментариев нет:
Отправить комментарий