Оформление
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 restart12. Неизвестная системная переменная '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™ 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%';" для проверки успешности модификации.