Потерянное соединение при восстановлении базы данных - PullRequest
0 голосов
/ 28 января 2020

Я пытаюсь восстановить свою базу данных из файла SQL, который выглядит следующим образом (это только исключение; файл больше):

DROP TABLE IF EXISTS `customer_visitor`;
CREATE TABLE `customer_visitor` (
  `visitor_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT 'Visitor ID',
  `customer_id` int(11) DEFAULT NULL COMMENT 'Customer Id',
  `session_id` varchar(64) DEFAULT NULL COMMENT 'Session ID',
  `last_visit_at` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp() COMMENT 
'Last Visit Time',
  PRIMARY KEY (`visitor_id`),
  KEY `CUSTOMER_VISITOR_CUSTOMER_ID` (`customer_id`),
  KEY `CUSTOMER_VISITOR_LAST_VISIT_AT` (`last_visit_at`)
) ENGINE=InnoDB AUTO_INCREMENT=668689 DEFAULT CHARSET=utf8 COMMENT='Visitor Table';

LOCK TABLES `customer_visitor` WRITE;
INSERT INTO `customer_visitor` VALUES (652044,NULL,'2f079a359d299fb295d9953c0b584a4d','2019-11-22 04:00:12'),(652045,NULL,'04db1c1ac84a3be40da9d0fe1b30f6a8','2019-11-22 04:00:27')
------ More rows ----
INSERT INTO `customer_visitor` VALUES (653068,NULL,'908cb7d7d29e4d228fd8979558146e52','2019-11-22 09:04:36'),(653069,NULL,'8de2f3585a1a614f8e09fd932344a192','2019-11-22 09:04:37')
UNLOCK TABLES;

DROP TABLE IF EXISTS `design_change`;
CREATE TABLE `design_change` (
  `design_change_id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'Design Change Id',
  `store_id` smallint(5) unsigned NOT NULL DEFAULT 0 COMMENT 'Store Id',
  `design` varchar(255) DEFAULT NULL COMMENT 'Design',
  `date_from` date DEFAULT NULL COMMENT 'First Date of Design Activity',
  `date_to` date DEFAULT NULL COMMENT 'Last Date of Design Activity',
  PRIMARY KEY (`design_change_id`),
  KEY `DESIGN_CHANGE_STORE_ID` (`store_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Design Changes';

Я восстанавливаю свою базу данных с помощью этой команды

cat my_backup.sql | sed -e 's/DEFINER[ ]*=[ ]*[^*]*\*/\*/' | mysql -u my_user -p my_database

Через некоторое время я получаю следующую ошибку. Ошибка не всегда возникает в одном и том же месте, но, кажется, она возникает вскоре после большого блока INSERT s

ERROR 2013 (HY000) at line 1077: Lost connection to MySQL server during query

Глядя в /var/log/mysql/error.log, я вижу это

InnoDB: Error: semaphore wait has lasted > 600 seconds

Если я go в оболочку MariaDb и сделаю SHOW GLOBAL VARIABLES WHERE Variable_name LIKE '%wait%', единственная переменная, которую я вижу, это 5 минут, это innodb_fatal_semaphore_wait_threshold (которая установлена ​​на 600).

Мои вопросы:

  • Что вызывает таймаут семафора? Это просто тайм-аут из-за большой вставки (которая будет исправлена ​​с большим значением тайм-аута), или есть другая проблема?
  • Если мне нужно увеличить тайм-аут, как мне установить глобальное значение из innodb_fatal_semaphore_wait_threshold?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...