Skip to content

FAQ по подключению данных MySQL - FineReport Справочная документация|Разработка отчетов|Использование отчетов|Учебные пособия

FAQ по подключению к данным MySQL

1. Обзор

1.1 Версия

Версия сервера FineBI
6.0

1.2 Сценарии применения

В этой статье описаны распространенные проблемы и шаги по устранению неполадок в соединениях данных MySQL.

2. искажение данных

Описание проблемы:

Предварительный просмотр набора данных MySQL с искаженными данными и неправильной датой.

2.1 Проверка набора символов в базе данных

Анализ причин:

Поддержка набора символов в MySQL имеет два аспекта: набор символов и колляция.

Поддержка наборов символов разделена на четыре уровня: сервер, база данных, таблица и соединение.

По умолчанию в MySQL используется набор символов latin1 (ISO_8859_1). Чтобы предотвратить искажение данных, набор символов MySQL должен соответствовать платформе, с набором символов utf8 и сверткой utf8_general_ci ci

Ступени истощения:

Проверьте поддержку набора символов в MySQL с помощью следующих двух команд:

1) Просмотр набора символов: SHOW VARIABLES LIKE 'character%';

2) Просмотр метода сортировки: SHOW VARIABLES LIKE 'collation_%';

Решение:

Измените ключи набора символов в файле my.ini в MySQL.

набор символов по умолчанию = utf8 character_set_server = utf8

После внесения изменений перезапустите службу MySQL.

service mysql restart

Используя команду view, я обнаружил, что кодировка базы данных была изменена на UTF-8.

mysql> SHOW VARIABLES LIKE 'character%';

2.2 Изменение URL-адреса подключения к сети передачи данных

Измените информацию о соединении данных.

1) Тип "Кодировка" соединения данных установлен на "По умолчанию".

2) Добавьте суффикс к "Data Connection URL" соединения данных, как показано ниже. Формат следующий:

jdbc:mysql://hostname:port/database?generateSimpleParameterMetadata=true&useUnicode=true&characterEncoding=utf8&useSSL =false&serverTimezone=Asia/Shanghai

Среди них:

  • serverTimezone=Asia/Shanghai: установите часовой пояс "Шанхай".
  • characterEncoding=utf8: преобразование кодировки

2.3 Проверка серверных шрифтов

Анализ причин:

Китайские шрифты не установлены в системе, поэтому их можно только испортить.

Ступени истощения:

  • Системы Windows: проверьте шрифты в папке C:\WINDOWS\Fonts.
  • Системы Linux: проверьте шрифты в папке /usr/share/fonts.

Решение:

Об установке шрифтов на сервере см. в разделе: Шрифты для установки на сервере.

3. Не найден подходящий драйвер для localhost

Описание проблемы:

Ошибка "Не найден подходящий драйвер для localhost " при проверке соединения с данными MySQL.

3.1 Ошибки форматирования URL-адресов

Анализ причин:

Проверьте, имеет ли формат URL-адрес подключения к данным MySQL - jdbc:mysql://<ip>:<port>/, если формат неправильный, то может возникнуть эта ошибка.

Решение:

См. раздел Подключения к данным MySQL Изменение формата URL-адреса подключения к данным.

3.2 Несоответствие версий драйверов

Анализ причин:

Версия драйвера MySQL, используемого в проекте, не соответствует версии базы данных MySQL, к которой подключены данные.

Решение:

Обратитесь к разделу MySQL Data Connections, чтобы получить подходящую версию драйвера и загрузить ее в проект.

4. Неизвестная системная переменная 'query_cache_size'

Описание проблемы:

Ошибка неизвестной системной переменной 'query_cache_size' при проверке соединения с данными MySQL.

Анализ причин:

Версия драйвера MySQL, используемого в проекте, не соответствует версии базы данных MySQL, к которой подключены данные.

Параметр query_cache_size был удален в MySQL 8, а в версии 5.1.44 драйвера он существует.

Решение:

Обратитесь к разделу MySQL Data Connections, чтобы получить подходящую версию драйвера и загрузить ее в проект.

5. Доступ запрещен для пользователя

Описание проблемы:

При подключении к тесту подключения к данным MySQL выдается ошибка "Доступ запрещен для пользователя".

Анализ причин:

Сервер базы данных отклонил этого пользователя с данного IP.

Решение:

Пожалуйста, проверьте, правильно ли введены имя пользователя и пароль при подключении данных.

Проверьте, не запрещает ли сервер, на котором расположена база данных, доступ к ней IP-адресу сервера, на котором находится проект, и включите соответствующие разрешения для IP-адреса сервера, на котором находится проект.

6. значение часового пояса сервера 'XXX' не распознано

Описание проблемы:

Ошибка "Значение часового пояса сервера 'XXX' не распознано" при проверке соединения с данными MySQL.

Анализ причин:

Часовой пояс сервера не может быть распознан или представляет более одного часового пояса, что указывает на то, что часовой пояс не может быть определен и должен быть указан.

Решение:

Измените информацию о соединении данных. Добавьте параметр часового пояса в "URL соединения данных" соединения данных.

Формат: &serverTimezone=UTC

7. ошибки SSL-соединения

Описание проблемы:

Ошибка "Установление SSL-соединения без проверки подлинности сервера не рекомендуется" при проверке соединения для передачи данных MySQL

Ошибка "Unsupported record version Unknown-0.0" в тестовом соединении с данными MySQL

Анализ причин:

Проблемы с SSL-соединениями с базами данных Mysql, выводящие предупреждение о том, что SSL-соединения без аутентификации сервера не рекомендуются.

Решение:

Измените информацию о соединении данных. Добавьте параметр использования ssl в "URL подключения данных" соединения данных.

Формат: &useSSL=false

8. не может быть представлен в виде java.sql.Date

Описание проблемы:

Ошибка "не может быть представлена как java.sql.

Решение:

Измените информацию о соединении данных. Добавьте параметр в "URL соединения с данными" соединения с данными.

Формат: zeroDateTimeBehavior=convertToNull

9. wait millis 20000, active 0, maxActive 100

Описание проблемы:

Ошибка набора данных при предварительном просмотре данных, в журнале появилась ошибка "wait millis 20000, active 0, maxActive 100". Восстановите ошибку путем повторного подключения.

Решение:

Измените информацию о соединении данных. Добавьте параметр в "URL соединения с данными" соединения с данными. Вы можете увеличить значение socketTimeout в соответствии с таймаутом SQL-запроса.

Формат: &connectTimeout=5000&socketTimeout=5000

10. Последний пакет, отправленный на сервер, был отправлен 9 мс назад

Описание проблемы:

Ошибка набора данных во время предварительного просмотра данных, последний пакет, отправленный на сервер, был 9 мс назад

Анализ причин:

Ограничение времени соединения с MySQL

Решение:

Удалите параметры ?serverTimezone=GMT%2B8&useSSL=false&useUnicode=true&characterEncoding=utf-8&autoReconnect= true&failOverReadOnly=false из url для соединений с MySQL. true&failOverReadOnly=false Параметры

11. Это несовместимо с sql_mode=only_full_group_by

Описание проблемы:

Ошибка в наборе данных при предварительном просмотре.

Код ошибки:11300001 Ошибка конфигурации набора данных Выражение #1 списка SELECT не находится в предложении GROUP BY и содержит неагрегированный столбец ' Имя базы данных. Имя таблицы.Имя поля ", который функционально не зависит от столбцов в предложении GROUP BY; это несовместимо с sql_mode=only_full_group_by

Анализ причин:

Версии базы данных MySQL после 5.7.5 по умолчанию включают режим only_full_group_by.

Включен режим only_full_group_by в sql_mode, что приводит к тому, что некоторые нестандартные синтаксисы SQL перестают быть совместимыми, что приводит к ошибке.

Примечание: режим only_full_group_by off на самом деле является одной из самых рискованных настроек, так как в этом режиме могут быть разрешены некоторые незаконные операции.

Ступени истощения:

1) Проверьте, не превышает ли версия базы данных MySQL 5.7.5.

ВЫБЕРИТЕ VERSION().

2) Проверьте, включен ли sql_mode для режима only_full_group_by.

выберите @@GLOBAL.sql_mode;

Решение 1: Используйте функцию any_value() для полей, которые не требуют группировки по в операторе запроса SQL. Функция any_value(field) позволяет использовать негруппированные поля.

Решение 2: Временно измените значение sql_mode с помощью SQL-оператора.

1) Измените глобальный режим sql_mode так, чтобы он действовал только для новых баз данных.

SET @@global.sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_ SUBSTITUTION'.

2) Для баз данных, которые уже существуют, они должны быть выполнены под соответствующей базой данных:

SET sql_mode ='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION&#. 39;;

Решение 3: Постоянно изменяйте значение sql_mode в конфигурационном файле.

  • Системы Windows: Измените конфигурационный файл my.ini и добавьте содержимое на вкладку "mysqld".
   
[mysqld] sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER НЕТ_ЗАМЕНЫ_ДВИГАТЕЛЯ
  • Linux: Отредактируйте файл конфигурации my.cnf, найдите местоположение sql_mode и удалите only_full_group_by. Если sql_mode не существует в файле my.cnf, добавьте его в тег "mysqld".
  
[mysqld] sql-mode=STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION

После внесения изменений перезапустите службу MySQL.

service mysql restart

12. Неизвестная системная переменная 'query_cache_size'

Описание проблемы:

Подключение к MySQL 8.0 через прокси sql agent сообщает о неизвестной системной переменной 'query_cache_size'

Анализ причин:

Последняя встроенная версия mysql в proxy sql - 5, поэтому для подключения необходимо изменить встроенную версию MySQL.

Решение:

Проверьте версию sql-драйвера прокси и измените ее на соответствующую.

Оператор версии запроса: select * from global_variables where variable_name='mysql-server_version';

13. В этом приложении нет явного отображения для /error, поэтому вы видите это как запасной вариант.

Описание проблемы:

При запросе набора данных с использованием базы данных MySQL, встроенной в собственную платформу заказчика, возникает ошибка :В этом приложении нет явного отображения для /error, поэтому вы видите это как запасной вариант.Произошла непредвиденная ошибка (type=Internal Server Error, status=500).syntax error, error in :' 1=1 ${if(len(year) == 0,"","" и D',expect VARIANT, actual VARIANT ${if(len(year) == 0,"","" и DATE_FORMAT(tda.registerDate,'%Y') = '"+year+ "&# 39;")}

Анализ причин:

Проверьте, что в операторе запроса набора данных для задания параметров используется функция ${if()}, но этот синтаксис недоступен в MySQL

Решение:

Замените на AND IF('${year}' is null or '${year}' = '', 0 = 0, t.registerDate = '${year}')

14. Невозможно загрузить плагин аутентификации 'caching_ sha2_password'.

Описание проблемы:

Невозможно загрузить плагин аутентификации 'caching_ sha2_password' при подключении к тесту соединения с данными MySQL

Анализ причин:

Сбой соединения, вызванный различными плагинами аутентификации для разных версий MySQL.

Начиная с MySQL 8.0.4, плагин аутентификации по умолчанию для серверов MySQL был заменен с mysql_native_password на caching_sha2_password, который не будет работать с плагином аутентификации MySQL, если версия драйвера слишком низкая.

Ступени истощения:

Проверьте, является ли версия базы данных MySQL выше, чем 8.0.4, а также проверьте, является ли версия драйвера версией 5.X. Если да, то версия драйвера слишком низкая.

Решение:

Скачайтедрайвер MySQL 8.Xс сайта MySQL и загрузите его в FineReport, как это сделать, можно найти в разделе:Управление драйверами 2.1.

15. Хост 'xxx.xxx.xxx.xxx' заблокирован из-за множества ошибок подключения

Описание проблемы:

Тестовое подключение к данным MySQL с сообщением об ошибке от сервера: "Host 'xxx.xxx.xxx.xxx' is blocked because&#8482 nbsp;множества ошибок подключения; разблокировать с помощью 'mysqladmin flush-hosts'".

Анализ причин:

Соединение с базой данных MySQL с того же IP-адреса будет запрещено, если количество неудачных соединений с базой данных MySQL за короткий промежуток времени превысит значение параметра max_connection_errors (по умолчанию в MySQL установлено значение 10).

Ступени истощения:

Проверьте, не слишком ли мало значение max_connect_errors:

показывать глобальные переменные, например '%max_connect_errors%';

Решение:

(1) Пользователи могут настроить значение max_connect_errors в соответствии с требованиями бизнеса, например, установить значение 1000:

установите глобальное значение max_connect_errors=1000;

2) Проверьте успешность модификации:

показывать переменные типа '%max_connection_errors%';

3) Перейдите в консоль MySQL и очистите файл hosts:

Промыть хосты.

16. Хосту 'xxx.xxx.xxxx.xxx' не разрешено подключаться к этому серверу MySQL

Описание проблемы:

Тест подключения к данным MySQL подключается с сообщением об ошибке от сервера: "Host 'xxx.xxx.xxxx.xxx' is not allowed to connect to this MySQL server

Анализ причин:

База данных не разрешает доступ с клиентских узлов на этом IP.

Ступени истощения:

Укажите базу данных MySQL для его выполнения:

select host from mysql.user where user = 'имя пользователя';

Если отображается значение localhost, это означает, что база данных разрешает доступ только к localhost и вам необходимо открыть другие источники хоста.

Решение 1**😗* Открыть доступ с других узлов.

ПРЕДОСТАВИТЬ ВСЕ ПРИВИЛЕГИИ НА *.   
* TO 'username'@'%' WITH GRANT OPTION; FLUSH PRIVILEGES.

Решение 2😗*** Установите хост на произвольный.

  
update mysql.user set host='%' where user = 'username'; FLUSH PRIVILEGES.

17. net_write_timeout

Описание проблемы:

Обновление данных не удалось, ошибка регистрации

Код ошибки:62400001 Приложение передавало результаты, когда соединение не удалось. Рассмотрите возможность увеличения значения 'net_write_timeout' на сервере.

Анализ причин:

Таймаут записи в базу данных по сети, по умолчанию в MySQL равен 60s, соединение будет разорвано сервером MySQL, когда оно продолжит запись сверх установленного значения.

Ступени истощения:

Проверьте, не слишком ли мало значение net_write_timeout:

показать глобальные переменные, например '%timeout%';

Решение:

1) Настройте логику записи в базу данных, чтобы уменьшить количество задач и не занимать соединения на длительное время.

2) Настройте значение параметра net_write_timeout в соответствии с реальной ситуацией:

установите глобальный таймаут net_write_timeout = XXX;

18. Пакет для запроса слишком большой

Описание проблемы:

Соединение с базой данных MySQL не удалось с ошибкой com.mysql.jdbc.PacketTooBigException: Пакет для запроса слишком велик ( 4739923 > 1948576). Вы можете изменить это значение на сервере, установив переменную max_ allowed_ packet'

Анализ причин:

Слишком маленькое значение параметра "max_allowed_packet" в локальной базе данных MySQL приводит к тому, что запись одной записи в базу данных не выполняется после превышения лимита, и последующие записи также не выполняются.

Решение 1:

В файле "my.ini" в каталоге установки MySQL измените "max_allowed_packet = 1M" в поле [mysqld] на 500M и перезапустите MySQL.

Решение 2:

1) Установите значение параметра "max_allowed_packet" на 500 M с помощью оператора "set global max_allowed_packet = 524288000;".

2) Используйте оператор "show VARIABLES like '%max_allowed_packet%';" для проверки успешности модификации.