Использую mysql 5.7, excel 2016 и уилиту mysql for excel.
Без проблем экспортирую 50к строк.
При 1М строк, потребление памяти процессом excel.exe равномерно растет до 1.35 Гб. И вылетает ошибка
Exception message:
Выдано исключение типа "System.OutOfMemoryException".
Exception thrown by:
MySqlDataTable.AddExcelData
Stack trace:
в Microsoft.Office.Interop.Excel.Range.get_Count()
в MySQL.ForExcel.Classes.ExcelUtilities.GetRowValuesAsLinearArray(Range range, Int32 rowIndex, Boolean useFormattedValues)
в MySQL.ForExcel.Classes.MySqlDataTable.AddExcelData(TempRange temporaryRange)
Формирование скрипта экспорта происходит на виндовой машине (свободной памяти остается более 2Гб), майэскуэль на линуксе (свободной памяти более 3 Гб).
Пробовал импорт csv в phpmyadmin , лучший результат 30к строк .
По настройкам конфигов mysql прошелся, все лимиты увеличил.
Конвертация заняла 4 часа.
При попытке загрузки из файла в домашней папке, получаю ограничения secure-file-priv.
Добавил в конфиг mysql строчку secure-file-priv = ""
Далее следующая ошибка
Errcode: 13 - Permission denied
Все операции провожу под учеткой root.
Fixid, drwxr-x--- 2 mysql mysql 4,0K Apr 20 09:23 ALL
-rw-r----- 1 mysql mysql 56 Apr 14 23:14 auto.cnf
-rw-r--r-- 1 root root 0 Apr 14 23:14 debian-5.7.flag
-rw-r----- 1 mysql mysql 859 Apr 20 11:17 ib_buffer_pool
-rw-r----- 1 mysql mysql 76M Apr 20 11:31 ibdata1
-rw-r----- 1 mysql mysql 48M Apr 20 11:31 ib_logfile0
-rw-r----- 1 mysql mysql 48M Apr 19 12:34 ib_logfile1
-rw-r----- 1 mysql mysql 12M Apr 20 11:39 ibtmp1
drwxr-x--- 2 mysql mysql 4,0K Apr 14 23:14 mysql
drwxr-x--- 2 mysql mysql 4,0K Apr 14 23:14 performance_schema
drwxr-x--- 2 mysql mysql 4,0K Apr 15 11:16 phpmyadmin
drwxr-x--- 2 mysql mysql 12K Apr 14 23:14 sys
Файл можно создать на том же хосте, где расположен MySQL. Если ОС настроена с возможностью на сетевой диск с общим доступом, можно писать и на другой сервер.
Если поле в таблице равно NULL, в CSV файле будет выведено \N.
Для записи файла на локальный диск на сервере пользователю требуются права FILE не на уровне БД, а глобально на уровне сервера MySQL. Можно установить через PHPMyAdmin или запросом
GRANT FILE ON * . * TO 'username'@'localhost' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;
Для записи файла в каталог, на каталог должны быть даны права на запись для пользователя mysql или стоять атрибуты 757 или 777 (разрешена запись для прочих пользователей
Перенес все в другую папку , убедился в выставлении прав на импортируемый файл и все вышестоящие папки, и LOAD DATA LOCAL INFILE помогло .
Осталось с кодировкой решить, в таблице колонки созданы с cp1251. По умолчанию в базе utf8. При импорте показывает знаки вопроса.