Создайте резервную копию / снимок таблицы table1 с отметкой времени в имени, затем выберите * из таблицы table1 в table1.YYYYMMDDHHMM.backup - PullRequest
0 голосов
/ 04 октября 2019

У меня есть таблица1, в которую ежедневно загружаются данные. Источник может быть ненадежным по формату и структуре, поэтому, чтобы избежать головной боли и простоев, я хочу делать снимок таблицы 1 каждый день перед запуском загрузки. Я хочу назвать резервные копии table1.YYYYMMDDHHMM.backup. Прямые переменные не работали, поэтому я попытался использовать оператор prepare (который для меня совершенно новый). Вот что не работает ... Буду признателен за мудрый совет.


set @a = concat('CREATE TABLE `ops_weekly_sla.',@yyyymmdd,'.backup` like `ops_weekly_sla`;');

set @b = concat('SELECT * from `ops_sla_weekly` INTO `ops_weekly_sla.',@yyyymmdd,'.backup`;');

PREPARE stmt from @a;
EXECUTE stmt;

PREPARE stmt from @b;
EXECUTE stmt;

DEALLOCATE PREPARE stmt;


1 Ответ

0 голосов
/ 04 октября 2019

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

create table backup like ops_weekly_sla;

INSERT INTO backup
select * from ops_weekly_sla;

SET @yyyymmdd = DATE_FORMAT(NOW(), '%Y%m%d%H%i');
SET @a = concat('RENAME TABLE `backup` to `ops_weekly_sla.',@yyyymmdd,'.backup`;');

PREPARE stmt from @a;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

Мало того, что это достигло моей цели, бонусной функцией было то, что она непотревожить мои метки времени для вставки оригинальных данных или обновления строк. / Wewt!

...