Я пытаюсь восстановить свою базу данных из файла 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
?