Каждый раз, когда я пытаюсь создать mysqldump
, я получаю следующую ошибку:
$> mysqldump --single-transaction --host host -u user -p db > db.sql
mysqldump: Couldn't execute 'SELECT COLUMN_NAME, JSON_EXTRACT(HISTOGRAM,
'$."number-of-buckets-specified"') FROM
information_schema.COLUMN_STATISTICS WHERE SCHEMA_NAME = 'db' AND
TABLE_NAME = 'Absence';':
Unknown table 'COLUMN_STATISTICS' in information_schema (1109)
Результатом является незавершенный дамп. Странно то, что эта же команда, выполняемая с другого хоста, работает без ошибок. У кого-то возникла такая же проблема?
Я использую mysql-client 8.0
и пытаюсь получить доступ к серверу mysql 5-7
- может быть, это причина?
Это связано с новым флагом, который включен по умолчанию в mysqldump 8. Вы можете отключить его, добавив --column-statistics = 0. Команда будет выглядеть примерно так:
mysqldump --column-statistics=0 --host=<server> --user=<user> --password=<password>
Проверьте эту ссылку для получения дополнительной информации. Чтобы отключить статистику столбца по умолчанию, вы можете добавить
[mysqldump]
column-statistics=0
в файл конфигурации MySQL, например /etc/my.cnf или ~ / .my.cnf.
Я целый день искал решение и подписался здесь, чтобы поделиться своим.
Да, вероятно, эта ошибка из-за разницы в версиях.
Просто скачайте MySQL 5.7 ZIP-архив отсюда: https://dev.mysql.com/downloads/mysql/ и разархивируйте его, затем используйте файл mysqldump.exe оттуда.
Если вы используете MySQL Workbench, вам нужно будет указать путь к загруженному вами инструменту mysqldump, перейдя в Правка -> Настройки -> Администрирование (на левой панели).
Надеюсь, это поможет.
Чтобы упростить этот ответ , вы можете переименовать mysqldump
, создать на его месте сценарий оболочки и вызвать переименовано в mysqldump
с аргументом - column-statistics = 0
. Например:
Переименуйте mysqldump:
mv /usr/local/bin/mysqldump /usr/local/bin/_mysqldump
Сохраните на его месте следующий сценарий оболочки:
#!/bin/sh
_mysqldump --column-statistics=0 $@
Я использую XAMPP, и MySQL Workbench предупреждает о несовпадении версий. Я установил MySQL Workbench, чтобы он указывал на файлы mysql.exe и mysqldump.exe из XAMPP.
Перейдите в Edit -> Preferences -> Administration и установите путь для каждого.
Это работает как минимум для версии 8.0.14. Так что для других вы можете избежать использования объединенной версии mysql и mysqldump.
У меня тоже была такая же проблема, она возникает, когда я объединяю несколько таблиц данных в существующую схему из другой схемы и экспортирую объединенные данные в автономный файл сценария. Я попытался изменить column-statistics = 0, но результат был следующим,
C:\xampp\mysql\bin>mysqldump --column-statistics=0 --host=loalhost --user root --passwod
mysqldump: unknown variable 'column-statistics=0'
Так что мне не помогли. Я проанализировал журнал MySQL и обнаружил, что
2019-01-21 11:31:30 1050 InnoDB: Warning: Using innodb_additional_mem_pool_size is DEPRECATED. This option may be removed in future releases, together with the option innodb_use_sys_malloc and with the InnoDB's internal memory allocator.
2019-01-21 11:31:30 4176 [Note] InnoDB: innodb_empty_free_list_algorithm has been changed to legacy because of small buffer pool size. In order to use backoff, increase buffer pool at least up to 20MB.
он жалуется на размер innodb_buffer_pool_size. Я сделал это до 24 МБ. Тогда это работает.
Для macOS вам нужна более старая версия версия (8.0.13) для просмотра "столбца-статистики", потому что я тестирую версию 8.0.14 и 8.0.15, и обе не показывают "статистику столбцов".
Итак, для настройки "столбца-статистики" используйте версию 8.0.13 https://downloads.mysql.com/archives/get/file/mysql-workbench-community-8.0.13-macos- x86_64.dmg
Для тех, кто использует MySQL Workbench, на экране Экспорта данных есть кнопка "Дополнительные опции". Опцию "Использовать статистику по столбцам" можно отключить, установив значение 0.
Я не подтвердил, но следующую информацию также предложено считать верной: В версии 8.0.14 она отсутствует. В версии 8.0.16 это делается по умолчанию
. В моей ситуации я использую mac-OS. Кстати, была [mysqldump].
column-statistics=0
полей в файле my.cnf
, который расположен в каталоге /usr/local/etc
. Удаление этого поля исправило проблему. (не: версия mysql 5.7 и установлена на домашнем компьютере).
Самая простая работа
При использовании Mysql Workbench 8.0
Удачи!
Я знаю, что опаздываю на вечеринку, но это сводило меня с ума. Если вы хотите, чтобы использовал последнюю версию MySQL Workbench (пробованную с новейшей на сегодняшний день MySQL Workbench 8.0.20), вы можете исправить этот файл:
plugins/wb_admin_export_options.py
в macOS: ( / Applications / MySQLWorkbench.app/Contents/Resources/plugins/wb_admin_export_options.py
)
Заменив эту строку:
"column-statistics":["Writing ANALYZE TABLE statements to generate statistics histograms.", "FALSE", "BOOL", ("8.0.2", None)]
на эту:
"column-statistics":["Writing ANALYZE TABLE statements to generate statistics histograms (set 0 to disable).", "1", "INT", (None, None)]
Затем удалите .pyo:
rm /Applications/MySQLWorkbench.app/Contents/Resources/plugins/wb_admin_export_options.pyo
Наконец, перезагрузите Workbench еще раз и на странице экспорта данных нажмите «Дополнительные параметры ...», и вы снова увидите параметр статистики столбца (установите 0, чтобы отключить, и нажмите кнопку Return button)
Примечание: вы можете загрузить исправленный файл из этого Gist .
В дополнение к pierlo https://serverfault.com/a/919403/586669
В MySQL Workbench есть возможность установить путь к исполняемому файлу mysqldump. (Правка — Настройки — Администрирование)
Таким образом, вы можете создать файл .cmd (в Windows) или .sh (в Linux или mac) следующим образом:
mysqldump_nostatistics.cmd:
@ECHO OFF
"C:\Program Files\MySQL\MySQL Workbench 8.0 CE\mysqldump.exe" %* --column-statistics=0
mysqldump_nostatistics.sh:
#!/bin/sh
_mysqldump $@ --column-statistics=0
Обратите внимание на порядок параметров (он отличается от порядка pierlo): выполняемая команда дампа включает (или может включать) параметр --defaults-file=
, и этот должен быть первый параметр.
Также необходимо отключить эхо, иначе рабочая среда не сможет правильно проанализировать вывод команды.
Начиная с MySQL Workbench версии 8.0.14 у вас нет возможности отключитьcolumn-statistics
Это можно сделать в версии 8.0.13
Но у вас есть возможность сделать это,включениеdelete-master-logs
в версии 8.0.22
--delete-master-logs
имеет тот же эффект, что и команда RESET MASTER
SQL.RESET MASTER
удаляет все двоичные файлы журнала, перечисленные в файле индекса, сбрасывает файл индекса двоичного журнала, делая его пустым, и создает новый файл двоичного журнала. Этот оператор предназначен для использования только при первом запуске мастера.Для тех, кто использует DBeaver, убедитесь, что локальный клиент настроен на создание дампа. См. следующие изображения для справки:
Доступ к выбору локальных клиентов:
Доступные локальные клиенты:
Я столкнулся с той же проблемой с последней версией MySQL workbench, я решил ее с помощью командной строки mysqldump
C:\Program Files\MySQL\MySQL Workbench 8.0 CE\mysqldump --column-statistics=0 --user=USERNAME --host=REMOTE_HOST --protocol=tcp --port=3306 --default-character-set=utf8 DATABASE_NAME > c:\temp\dump.sql --password
Замените USERNAME, REMOTE_HOST, DATABASE_NAME вашими именами.
У меня возникла эта проблема при использовании последней версии рабочей среды mysql (8.0.23) на OSX (11.1) с mariadb. Я решил это, выбрав версию mysqldump, найденную в пакете mariadb.
/usr/local/mariadb/mariadb-10.1.37-osx10.13-x86_64/bin/mysqldump
В зависимости от ситуации вы можете избавиться от mysql
и установить вместо него mariadb
. Это устраняет новую функцию, которая была введена в mysql 8.
Здесь выше есть несколько ответов, которые относятся к переименованию двоичного файла mysqldump и созданию скрипта-оболочки. Это ужасный подход.
Правильный метод (в bash)заключается в создании псевдонима команды в вашем.bashrc
alias mysqldump="mysqldump --column-statistics=0"
В macOS я исправил это, переопределив встроенный mysqldump.:
brew install mariadb
/opt/homebrew/bin/mysqldump
Примечание:, чтобы найти полный путь к mysqldump, вы можете запустить which mysqldump
в своем терминале.