В MySQL 8 поломались скрипты, которые определяли размер таблиц.
Переменная information_schema_stats_expiry теперь не 0, а 84600 по умолчанию. Информация из information_schema.tables обновляется раз в сутки.
Мы не знаем, что таблица большая или маленькая. Мы не можем из-за кеша адекватно оценить размер будущего бекапа. Мы не можем почистить переполненные таблицы.
Решение проблемы - надо сделать запрос SET SESSION information_schema_stats_expiry = 0; , перед тем, как читать таблицу.
Делать FLUSH TABLES и подобные манипуляции не нужно. Кеш для information_schema.tables - про другое
$connection = \Bitrix\Main\Application::getConnection($connection_name); $database_name = $connection->getDatabase(); $query = "SET SESSION information_schema_stats_expiry = 0;"; $dbResult = $connection->query($query); $query = "SEL ECT table_name AS table_name, data_length AS total_size, table_rows as table_rows FR OM information_schema.tables WHERE table_schema = '$database_name' AND table_name = '$table_name';"; $rs = $connection->query($query); $arInfo = $rs->fetch(); |