innobackupex: как восстановить секционированную таблицу? - PullRequest
0 голосов
/ 08 октября 2019

У меня есть таблица в mysql 14.14 (Percona) в Linux:

mysql> show create table game_action\G
*************************** 1. row ***************************
       Table: game_action
Create Table: CREATE TABLE `game_action` (
  `game_action_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `game_id` int(11) NOT NULL,
  `user_id` int(11) NOT NULL,
  `game_instance_id` bigint(20) unsigned DEFAULT NULL,
  `type` varchar(15) NOT NULL,
  `amount` decimal(18,2) NOT NULL,
  `currency` varchar(15) NOT NULL,
  `created_timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`game_action_id`,`created_timestamp`),
  KEY `GA_IX01` (`game_id`),
  KEY `GA_IX02` (`user_id`),
  KEY `GA_IX03` (`game_instance_id`),
  KEY `game_action_created_timestamp` (`created_timestamp`),
  KEY `ga_id_cur_tstmp` (`game_id`,`currency`,`created_timestamp`)
) ENGINE=InnoDB AUTO_INCREMENT=472477754 DEFAULT CHARSET=utf8
/*!50100 PARTITION BY RANGE ( UNIX_TIMESTAMP(created_timestamp))
(PARTITION pMIN VALUES LESS THAN (1388534400) ENGINE = InnoDB,
 PARTITION p2014_01 VALUES LESS THAN (1391212800) ENGINE = InnoDB,
...

Она была зарезервирована с использованием innobackex, что привело к большому количеству файлов:

# ll game_action*
-rw-rw---- 1 jan jan    12960 Sep 11  2017 game_action.frm
-rw-rw---- 1 jan jan      512 Sep 11  2017 game_action.par
-rw-rw-r-- 1 jan jan     1232 Oct  4 09:02 game_action#P#p2014_01.cfg
-rw-r----- 1 jan jan    16384 Oct  4 09:02 game_action#P#p2014_01.exp
...
-rw-rw-r-- 1 jan jan     1228 Oct  4 09:02 game_action#P#pMAX.cfg
-rw-r----- 1 jan jan    16384 Oct  4 09:02 game_action#P#pMAX.exp
-rw-rw---- 1 jan jan   147456 Sep 11  2017 game_action#P#pMAX.ibd
-rw-rw-r-- 1 jan jan     1228 Oct  4 09:02 game_action#P#pMIN.cfg
-rw-r----- 1 jan jan    16384 Oct  4 09:02 game_action#P#pMIN.exp
-rw-rw---- 1 jan jan   147456 Sep 11  2017 game_action#P#pMIN.ibd

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

# mysqlfrm --diagnostic game_action.frm
# WARNING: Cannot generate character set or collation names without the --server option.
# CAUTION: The diagnostic mode is a best-effort parse of the .frm file. As such, it may not identify all of the components of the table correctly. This is especially true for damaged files. It will also not read the default values for the columns and the resulting statement may not be syntactically correct.
# Reading .frm file for game_action.frm:
# The .frm file is a TABLE.
ERROR: Cannot read column data.

Есть ли способ сделать это, или это просто невозможно?

...