MySQL на примерах | Издательство БХВ
- Описание
- Детали
- Отзывы (0)
Описание
Книга посвящена популярной СУБД MySQL 5.1. На практических примерах рассматриваются вложенные запросы, хранимые процедуры, представления, триггеры, курсоры, информационная схема, планировщик заданий, сегментирование. Большое внимание уделяется взаимодействию клиентского кода на PHP с СУБД MySQL. Подробно описаны две наиболее популярные библиотеки: классическая библиотека php_mysql и новая объектно-ориентированная библиотека php_mysqli. На компакт-диске содер-жатся дистрибутивы и исходные коды MySQL 5.0/5.1/5.2 для Windows и Linux и графические клиенты для MySQL….Симдянов Игорь Вячеславович, разработчик с двадцатилетним стажем в веб-программировании, ведущий разработчик российской финансово-технологической компании «Баланс-Платформа».
Детали
Артикул | 1250 |
---|---|
ISBN | 978-5-9775-0066-1 |
Количество страниц | 592 |
Серия | На примерах |
Переплет | Мягкая обложка |
Печать | Черно-белая |
Год | 2012 |
Габариты, мм | 240 × 170 × 28 |
Вес, кг | 0.663 |
Дополнительные файлы скачать: Зеркало1Дополнительные файлы скачать (Chrome): Зеркало2
- ✓ Новинки на 2 недели раньше магазинов
- ✓ Цены от издательства ниже до 30%
- ✓ Акции и скидки только для подписчиков
- ✓ Важные новости БХВ
ПОЛЕЗНАЯ РАССЫЛКА КНИЖНЫХ НОВОСТЕЙ
Подписываясь на рассылку, вы соглашаетесь с политикой конфиденциальности и обработкой своих персональных данных.
Рекомендуем также
- Колисниченко Денис Николаевич
PHP и MySQL. Разработка Web-приложений. 4-е изд.
665 ₽
565 ₽ - Дронов Владимир Александрович
Laravel. Быстрая разработка современных динамических Web-сайтов на PHP, MySQL, HTML и CSS
1299 ₽
649 ₽ - Дронов Владимир Александрович, Прохоренок Николай Анатольевич
HTML, JavaScript, PHP и MySQL. Джентльменский набор Web-мастера. 4 изд.
773 ₽
657 ₽ - Дронов Владимир Александрович
PHP, MySQL, HTML5 и CSS 3. Разработка современных динамических Web-сайтов
866 ₽
736 ₽
my.cnf примеры конфигурации MySQL, MariaDB [АйТи бубен]
Где находится и какой используется my.cnf
Для поиска всех возможных расположений файла my.cnf, вместо команды find проще и быстрее использовать предварительно обновленную утилиту locate:
# locate my. cnf /etc/my.cnf /etc/my.cnf.d /etc/mysql/my.cnf
В этом случае слава богу файл my.cnf один на весь сервер, а в действительности их может быть несколько и мало того они могут наследовать другу другу.
Начиная с версии 3.22 MySQL может считывать принятые по умолчанию параметры запуска для сервера и клиентов из файлов параметров. В Unix считывание принятых по умолчанию параметров MySQL производится из следующих файлов:
Имя файла | Назначение |
---|---|
/etc/my.cnf | Общие параметры |
DATADIR/my.cnf | Параметры для сервера |
defaults-extra-file | Файл, указанный при помощи -defaults-extra-file=# |
~/.my.cnf | Параметры для пользователя |
DATADIR является каталогом данных MySQL (обычно ‘/usr/local/mysql/data’ для бинарной установки или ‘/usr/local/var’ для установки из исходных текстов). Обратите внимание, что это тот каталог, который был задан во время настройки, а не указанный при помощи –datadir при запуске mysqld! (–datadir не оказывает влияния на просмотр файлов параметров сервером, так как их просмотр происходит до обработки аргументов командной строки).
MySQL пытается прочитать файлы параметров в указанном выше порядке. Если существует несколько таких файлов, то параметр, указанный в файле, идущем позже, имеет преимущество над таким же параметром, указанным в файле, расположенном ранее. Параметры, указанные в командной строке, обладают более высоким приоритетом по отношению к параметрам, указанным в любом из файлов параметров. Некоторые параметры можно задавать при помощи переменных окружения. Параметры, указанные в командной строке или в файлах параметров, обладают преимуществом по отношению к переменным окружения.
Приводим список программ, поддерживающих файлы параметров: mysql, mysqladmin, mysqld, mysqld_safe, mysql.server, mysqldump, mysqlimport, mysqlshow, mysqlcheck, myisamchk и myisampack.
Любой параметр, который может быть задан в командной строке при запуске программы MySQL, может быть также задан в файле параметров (без предваряющего двойного слэша). Чтобы получить список доступных параметров, следует запустить программу с параметром –help.
Примеры конфигураций
Основной источник highload.today
Если в вашем конфигурационном файле есть настройка thread_concurrency — уберите её.
Пример настроек Mysql для сервера с 1Гб оперативной памяти и двумя ядрами
client] port = 3306 socket = /var/run/mysqld/mysqld.sock [mysqld_safe] socket = /var/run/mysqld/mysqld.sock nice = 0 [mysqld] user = mysql pid-file = /var/run/mysqld/mysqld.pid socket = /var/run/mysqld/mysqld.sock port = 3306 basedir = /usr datadir = /var/lib/mysql tmpdir = /tmp language = /usr/share/mysql/english old_passwords = 0 bind-address = 127.0.0.1 skip-external-locking max_allowed_packet = 16M key_buffer_size = 16M [p:innodb_buffer_pool_size] = 512M [p:innodb_file_per_table] = 1 [p:innodb_flush_method] = O_DIRECT [p:innodb_flush_log_at_trx_commit] = 0 thread_stack = 128K [p:thread_cache_size] = 128 myisam-recover = BACKUP max_connections = 128 table_cache = 32 query_cache_limit = 1M [p:query_cache_size] = 4M [p:slow_query_log] = /var/log/mysql/mysql-slow.log long_query_time = 1 expire_logs_days = 10 [p:max_binlog_size] = 100M [mysqldump] quick quote-names max_allowed_packet = 16M
Для 2Гб оперативной памяти
[client] port = 3306 socket = /var/run/mysqld/mysqld.sock [mysqld_safe] socket = /var/run/mysqld/mysqld.sock nice = 0 [mysqld] user = mysql pid-file = /var/run/mysqld/mysqld.pid socket = /var/run/mysqld/mysqld.sock port = 3306 basedir = /usr datadir = /var/lib/mysql tmpdir = /tmp language = /usr/share/mysql/english old_passwords = 0 bind-address = 127.0.0.1 skip-external-locking max_allowed_packet = 16M key_buffer_size = 16M innodb_buffer_pool_size = 1024M innodb_file_per_table = 1 innodb_flush_method = O_DIRECT innodb_flush_log_at_trx_commit = 0 max_connections = 136 query_cache_size = 0 slow_query_log = /var/log/mysql/mysql-slow.log long_query_time = 1 expire_logs_days = 10 max_binlog_size = 100M [mysqldump] quick quote-names max_allowed_packet = 16M
Для 4Гб оперативной памяти
[client] port = 3306 socket = /var/run/mysqld/mysqld.sock [mysqld_safe] socket = /var/run/mysqld/mysqld.sock nice = 0 [mysqld] user = mysql pid-file = /var/run/mysqld/mysqld.pid socket = /var/run/mysqld/mysqld.sock port = 3306 basedir = /usr datadir = /var/lib/mysql tmpdir = /tmp language = /usr/share/mysql/english old_passwords = 0 bind-address = 127.0.0.1 skip-external-locking max_allowed_packet = 16M key_buffer_size = 16M innodb_buffer_pool_size = 2048M innodb_file_per_table = 1 innodb_flush_method = O_DIRECT innodb_flush_log_at_trx_commit = 0 max_connections = 144 query_cache_size = 0 slow_query_log = /var/log/mysql/mysql-slow.log long_query_time = 1 expire_logs_days = 10 max_binlog_size = 100M [mysqldump] quick quote-names max_allowed_packet = 16M
Для 8Гб оперативной памяти
[client] port = 3306 socket = /var/run/mysqld/mysqld.sock [mysqld_safe] socket = /var/run/mysqld/mysqld.sock nice = 0 [mysqld] user = mysql pid-file = /var/run/mysqld/mysqld.pid socket = /var/run/mysqld/mysqld.sock port = 3306 basedir = /usr datadir = /var/lib/mysql tmpdir = /tmp language = /usr/share/mysql/english old_passwords = 0 bind-address = 127.0.0.1 skip-external-locking max_allowed_packet = 16M key_buffer_size = 16M innodb_buffer_pool_size = 4096M innodb_file_per_table = 1 innodb_flush_method = O_DIRECT innodb_flush_log_at_trx_commit = 0 max_connections = 160 query_cache_size = 0 slow_query_log = /var/log/mysql/mysql-slow. log long_query_time = 1 expire_logs_days = 10 max_binlog_size = 100M [mysqldump] quick quote-names max_allowed_packet = 16M
Для 16Гб оперативной памяти
[client] port = 3306 socket = /var/run/mysqld/mysqld.sock [mysqld_safe] socket = /var/run/mysqld/mysqld.sock nice = 0 [mysqld] user = mysql pid-file = /var/run/mysqld/mysqld.pid socket = /var/run/mysqld/mysqld.sock port = 3306 basedir = /usr datadir = /var/lib/mysql tmpdir = /tmp language = /usr/share/mysql/english old_passwords = 0 bind-address = 127.0.0.1 skip-external-locking max_allowed_packet = 16M key_buffer_size = 16M innodb_buffer_pool_size = 8192M innodb_file_per_table = 1 innodb_flush_method = O_DIRECT innodb_flush_log_at_trx_commit = 0 max_connections = 192 query_cache_size = 0 slow_query_log = /var/log/mysql/mysql-slow. log long_query_time = 1 expire_logs_days = 10 max_binlog_size = 100M [mysqldump] quick quote-names max_allowed_packet = 16M
Для 32Гб оперативной памяти
[client] port = 3306 socket = /var/run/mysqld/mysqld.sock [mysqld_safe] socket = /var/run/mysqld/mysqld.sock nice = 0 [mysqld] user = mysql pid-file = /var/run/mysqld/mysqld.pid socket = /var/run/mysqld/mysqld.sock port = 3306 basedir = /usr datadir = /var/lib/mysql tmpdir = /tmp language = /usr/share/mysql/english old_passwords = 0 bind-address = 127.0.0.1 skip-external-locking max_allowed_packet = 16M key_buffer_size = 16M innodb_buffer_pool_size = 16384M innodb_file_per_table = 1 innodb_flush_method = O_DIRECT innodb_flush_log_at_trx_commit = 0 max_connections = 256 query_cache_size = 0 slow_query_log = /var/log/mysql/mysql-slow. log long_query_time = 1 expire_logs_days = 10 max_binlog_size = 100M [mysqldump] quick quote-names max_allowed_packet = 16M
Для 64Гб оперативной памяти
[client] port = 3306 socket = /var/run/mysqld/mysqld.sock [mysqld_safe] socket = /var/run/mysqld/mysqld.sock nice = 0 [mysqld] user = mysql pid-file = /var/run/mysqld/mysqld.pid socket = /var/run/mysqld/mysqld.sock port = 3306 basedir = /usr datadir = /var/lib/mysql tmpdir = /tmp language = /usr/share/mysql/english old_passwords = 0 bind-address = 127.0.0.1 skip-external-locking max_allowed_packet = 16M key_buffer_size = 16M innodb_buffer_pool_size = 32768M innodb_file_per_table = 1 innodb_flush_method = O_DIRECT innodb_flush_log_at_trx_commit = 0 max_connections = 384 query_cache_size = 0 slow_query_log = /var/log/mysql/mysql-slow. log long_query_time = 1 expire_logs_days = 10 max_binlog_size = 100M [mysqldump] quick quote-names max_allowed_packet = 16M
Для 128Гб оперативной памяти
[client] port = 3306 socket = /var/run/mysqld/mysqld.sock [mysqld_safe] socket = /var/run/mysqld/mysqld.sock nice = 0 [mysqld] user = mysql pid-file = /var/run/mysqld/mysqld.pid socket = /var/run/mysqld/mysqld.sock port = 3306 basedir = /usr datadir = /var/lib/mysql tmpdir = /tmp language = /usr/share/mysql/english old_passwords = 0 bind-address = 127.0.0.1 skip-external-locking max_allowed_packet = 16M key_buffer_size = 16M innodb_buffer_pool_size = 65536M innodb_file_per_table = 1 innodb_flush_method = O_DIRECT innodb_flush_log_at_trx_commit = 0 max_connections = 640 query_cache_size = 0 slow_query_log = /var/log/mysql/mysql-slow. log long_query_time = 1 expire_logs_days = 10 max_binlog_size = 100M [mysqldump] quick quote-names max_allowed_packet = 16M
Параметры my.cnf MySQL (кодировки UTF8)
Виды кодировок символов — набор символов (character set, charset).
С версии MySQL 5.5.3 рекомендуется использовать кодировку utf8mb4_unicode_ci.
Что такое utf8mb4? utf8mb4 — набор символов, используемый для хранения 4 байта в MySQL, внедрён в 2010 году начиная с версии 5.5.3. Главное отличие utf8mb4 от utf8 в том, что utf8mb4 задействует более полные возможности кодировки UTF8, позволяя поддерживать все языки и специальные символы, не поддерживающие utf8 (например японский язык или смайлики из ios — emoji). Однако, как можно догадаться, если utf8mb4 использует для хранения 1 символа 4 байта, то база данных может увеличиться в размере, если сравнивать с точно такой же базой данных в utf8. В наше время немного увеличенный размер базы данных не является существенно проблему, по этому, если вы стоите перед выбором использовать utf8 или utf8mb4 набор символов — используйте utf8mb4.
5.1.2. Server Command Options
Некоторые параметры my.cnf в MySQL 5.5.22 устарели (deprecated) и были заменены другими и удалены. Например, изменение кодировки по умолчанию в my.cnf в секции [mysqld] будет выглядит так:
[mysqld] #... character_set_server = utf8 # ранее default-character-set = utf8 и character_set_server = utf8 collation-server = utf8_unicode_ci # ранее collation_server = utf8_unicode_ci
collation-server = utf8_unicode_ci или collation-server = utf8_general_ci? utf8_unicode_ci поддерживает expansions в отличии от utf8_general_ci, то есть умеет сопоставлять один символ нескольким (например — в Германии ß = ss ). Подобнее Unicode Character Sets.
Сравнение utf8_unicode_ci _ci без учета регистра, utf8_unicode_bin _bin с учетом регистра.
Источник данных MySQL | Документация Grafana
Документация Grafana Источники данных MySQLОблако Grafana Предприятие Открытый исходный код
Начиная с Grafana v5. 1 вы можете назвать столбец времени time в дополнение к ранее поддерживаемому time_sec . Использование time_sec в конечном итоге будет объявлено устаревшим.
Grafana поставляется со встроенным подключаемым модулем источника данных MySQL, который позволяет запрашивать и визуализировать данные из базы данных, совместимой с MySQL.
Инструкции по добавлению источника данных в Grafana см. в административной документации. Добавлять источники данных могут только пользователи с ролью администратора организации. Администраторы также могут настроить источник данных через YAML с помощью системы обеспечения Grafana.
Настройка источника данных
Для доступа к странице конфигурации источника данных:
Нажмите Соединения в меню слева.
В разделе «Подключения» нажмите Источники данных .
Введите
MySQL
в строку поиска.Выберите MySQL .
Отображается вкладка Settings источника данных.
Установите основные параметры конфигурации источника данных.
Имя | Описание |
---|---|
Имя | Имя источника данных. Именно так вы обращаетесь к источнику данных в панелях и запросах. |
По умолчанию | Источник данных по умолчанию означает, что он будет предварительно выбран для новых панелей. |
Хост | IP-адрес/имя хоста и необязательный порт вашего экземпляра MySQL. |
База данных | Имя вашей базы данных MySQL. |
Пользователь | Логин/имя пользователя базы данных |
Пароль | Пароль пользователя базы данных |
Часовой пояс сеанса | Укажите часовой пояс, используемый в сеансе базы данных, например, Европа/Берлин или +02:00 . Это необходимо, если часовой пояс базы данных (или хоста базы данных) установлен в значение, отличное от UTC. Установите значение, используемое в сеансе, с помощью SET time_zone='...' . Если оставить это поле пустым, то часовой пояс не обновляется. Для получения дополнительной информации обратитесь к документации MySQL. |
Max open | Максимальное количество открытых подключений к базе данных, по умолчанию 100 (Grafana v5.4+). |
Макс. бездействие | Максимальное количество соединений в пуле бездействующих соединений, по умолчанию 100 (Grafana v5.4+). |
Авто (максимальное время простоя) | Если установлено, максимальное количество незанятых подключений будет установлено равным максимальному количеству открытых подключений (Grafana v9.5.1+). По умолчанию истина . |
Максимальное время жизни | Максимальное время в секундах, в течение которого соединение может быть повторно использовано, по умолчанию 14400 /4 часа. Это всегда должно быть меньше, чем настроенное время ожидания в MySQL (Grapana v5.4+). |
Минимальный интервал времени
Параметр Мин. интервал времени определяет нижний предел для переменных $__interval
и $__interval_ms
.
Это значение должно быть отформатировано как число, за которым следует действительный идентификатор времени:
Идентификатор | Описание |
---|---|
г | год |
М | месяц |
w | неделя |
d | день |
час | |
м | минута |
с | секунда |
900 41 мс | миллисекунда |
Мы рекомендуем установить это значение в соответствии с вашей частотой записи MySQL. Например, используйте 1m
, если MySQL записывает данные каждую минуту.
Вы также можете переопределить этот параметр на панели мониторинга в параметрах источника данных.
Разрешения пользователя базы данных (Важно!)
Пользователю базы данных, указанному вами при добавлении источника данных, должны быть предоставлены только разрешения SELECT на
указанную базу данных и таблицы, которые вы хотите запросить. Grafana не проверяет безопасность запроса. Запрос
может включать любой оператор SQL. Например, такие операторы, как USE otherdb;
и пользователь DROP TABLE;
будет
казнен. Чтобы защититься от этого, мы Highly рекомендуем вам создать конкретного пользователя mysql с ограниченными разрешениями.
Пример:
СОЗДАТЬ ПОЛЬЗОВАТЕЛЯ 'grafanaReader' ИДЕНТИФИЦИРОВАННОГО 'ПАРОЛЕМ'; GRANT SELECT ON mydatabase.mytable TO 'grafanaReader';
Вы можете использовать подстановочные знаки ( *
) вместо базы данных или таблицы, если хотите предоставить доступ к большему количеству баз данных и таблиц.
Предоставление источника данных
Вы можете определить и настроить источник данных в файлах YAML как часть системы обеспечения Grafana. Дополнительные сведения о подготовке и доступных параметрах конфигурации см. в разделе Подготовка Grafana.
Примеры подготовки
Базовая подготовка
apiVersion: 1 источники данных: - имя: MySQL тип: mysql URL-адрес: локальный: 3306 Пользователь: графана jsonДанные: база данных: графана maxOpenConns: 100 # Grafana v5.4+ maxIdleConns: 100 # Графана v5.4+ maxIdleConnsAuto: true # Grafana v9.5.1+ connMaxLifetime: 14400 # Grafana v5.4+ безопасныйJsonData: пароль: ${GRAFANA_MYSQL_PASSWORD}
Использование проверки TLS
apiVersion: 1 источники данных: - имя: MySQL тип: mysql URL-адрес: локальный: 3306 Пользователь: графана jsonДанные: tlsAuth: правда база данных: графана maxOpenConns: 100 # Grafana v5. 4+ maxIdleConns: 100 # Графана v5.4+ maxIdleConnsAuto: true # Grafana v9.5.1+ connMaxLifetime: 14400 # Grafana v5.4+ безопасныйJsonData: пароль: ${GRAFANA_MYSQL_PASSWORD} tlsClientCert: ${GRAFANA_TLS_CLIENT_CERT} tlsCACert: ${GRAFANA_TLS_CA_CERT}
Использовать TLS и пропустить проверку сертификата
apiVersion: 1 источники данных: - имя: MySQL тип: mysql URL-адрес: локальный: 3306 Пользователь: графана jsonДанные: tlsAuth: правда skipTLSVerify: правда база данных: графана maxOpenConns: 100 # Grafana v5.4+ maxIdleConns: 100 # Графана v5.4+ maxIdleConnsAuto: true # Grafana v9.5.1+ connMaxLifetime: 14400 # Grafana v5.4+ безопасныйJsonData: пароль: ${GRAFANA_MYSQL_PASSWORD} tlsClientCert: ${GRAFANA_TLS_CLIENT_CERT} tlsCACert: ${GRAFANA_TLS_CA_CERT}
Построитель запросов
Построитель запросов MySQL доступен при редактировании панели с использованием источника данных MySQL.
В этом разделе описываются запросы, специфичные для источника данных MySQL. Общую документацию по запросам к источникам данных в Grafana см. в разделе Запрос и преобразование данных.
Вы можете запустить построенный запрос, нажав кнопку Запустить запрос
в правом верхнем углу редактора.
Формат
Ответ от MySQL может быть отформатирован либо как таблица, либо как временной ряд. Чтобы использовать формат временных рядов, один из столбцов должен иметь имя time
.
Набор данных и выбор таблицы
Примечание: Если имя вашей таблицы или базы данных содержит зарезервированное слово или недопустимый символ, редактор заключит их в кавычки. Например, имя таблицы, такое какимя-таблицы
будет заключено в кавычки с обратными кавычками`имя-таблицы`
.
В раскрывающемся списке наборов данных выберите базу данных MySQL для запроса. Выпадающий список заполняется базами данных, к которым у пользователя есть доступ. Когда набор данных выбран, раскрывающийся список таблиц заполняется доступными таблицами.
Столбцы и функции агрегирования (SELECT)
В раскрывающемся списке выберите столбец для включения в данные. Вы также можете указать дополнительную функцию агрегации.
Добавьте дополнительные столбцы значений, нажав кнопку «плюс», и появится еще один раскрывающийся список столбцов.
Данные фильтра (ГДЕ)
Чтобы добавить фильтр, нажмите переключатель в верхней части редактора. В первом раскрывающемся списке выберите, должны ли совпадать все фильтры (И) или должен совпадать только один из фильтров (ИЛИ).
Чтобы добавить дополнительные столбцы для фильтрации, используйте кнопку «плюс».
Сгруппировать по
Чтобы сгруппировать результаты по столбцу, щелкните переключатель группы в верхней части редактора. Затем вы можете выбрать, по какому столбцу сгруппировать результаты. Предложение group by можно удалить, нажав кнопку X.
Предварительный просмотр
Переключив переключатель предварительного просмотра в верхней части редактора, вы можете получить предварительный просмотр SQL-запроса, сгенерированного построителем запросов.
Редактор кода
Чтобы сделать расширенные запросы, переключитесь в редактор кода, нажав код
в правом верхнем углу редактора. Редактор кода поддерживает автозаполнение таблиц, столбцов, ключевых слов SQL, стандартных функций SQL, переменных шаблона Grafana и макросов Grafana. Столбцы не могут быть заполнены до того, как будет указана таблица.
Вы можете развернуть редактор кода, нажав шеврон
, указывающий вниз в правом нижнем углу редактора кода.
CTRL/CMD + Return
работает как сочетание клавиш для запуска запроса.
Макросы
Для упрощения синтаксиса и включения динамических частей, таких как фильтры диапазона дат, запрос может содержать макросы.
Пример макроса | Описание |
---|---|
$__time(dateColumn) | Будет заменено выражением для преобразования в метку времени UNIX и переименования столбца в time_sec . Например, UNIX_TIMESTAMP(dateColumn) as time_sec |
$__timeEpoch(dateColumn) | Будет заменено выражением для преобразования в метку времени UNIX и переименования столбца в time_sec 900 42 . Например, UNIX_TIMESTAMP(dateColumn) as time_sec |
$__timeFilter(dateColumn) | Будет заменен фильтром диапазона времени с использованием указанного имени столбца. Например, dateColumn МЕЖДУ FROM_UNIXTIME(1494410783) AND FROM_UNIXTIME(1494410983) |
$__timeFrom() | Будет заменено началом текущего выбор активного времени. Например, FROM_UNIXTIME(1494410783) |
$__timeTo() | Будет заменено концом текущего активного выбора времени. Например, FROM_UNIXTIME(1494410983) |
$__timeGroup(dateColumn,'5m') | Будет заменено выражением, используемым в предложении GROUP BY. Например, *cast(cast(cast(UNIX_TIMESTAMP(dateColumn)/(300) со знаком)*300 со знаком),* |
$__timeGroup(dateColumn,'5m', 0) | То же, что и выше, но с параметр заполнения, поэтому отсутствующие точки в этой серии будут добавлены графаной, а 0 будет использоваться в качестве значения. |
$__timeGroup(dateColumn,'5m', NULL) | То же, что и выше, но в качестве значения для отсутствующих точек будет использоваться NULL. |
$__timeGroup(dateColumn,'5m', previous) | То же, что и выше, но предыдущее значение в этой серии будет использоваться в качестве заполняющего значения, если значение еще не было замечено, будет использоваться NULL (доступно только в Графана 5.3+). |
$__timeGroupAlias(dateColumn,'5m') | Будет заменено идентично $__timeGroup, но с добавленным псевдонимом столбца (доступно только в Grafana 5.3+). |
$__unixEpochFilter(dateColumn) | Будет заменен фильтром временного диапазона, использующим указанное имя столбца со временем, представленным в виде отметки времени Unix. Например, DateColumn> 1494410783 и DateColumn <1494497183 |
$ __ unixepochfrom () | будет заменен началом в настоящее время активного времени отбора времени в качестве Unix Timestamp. Например, 1494410783 |
$__unixEpochTo() | Будет заменено концом текущего активного выбора времени в качестве временной метки Unix. Например, 1494497183 |
$__unixEpochNanoFilter(dateColumn) | Будет заменен фильтром диапазона времени, использующим указанное имя столбца с отметкой времени в виде наносекунд. Например, dateColumn > 1494410783152415214 AND dateColumn < 1494497183142514872 |
$__unixEpochNanoFrom() | Будет заменено началом текущего активного выбора времени в виде отметки времени в наносекундах. Например, 1494410783152415214 |
$__unixEpochNanoTo() | Будет заменено концом текущего активного выбора времени в виде отметки времени в наносекундах. Например, 1494497183142514872 |
$__unixEpochGroup(dateColumn,'5m', [fillmode]) | То же, что и $__timeGroup, но для времени, хранящегося в виде метки времени Unix (доступно только в Grafana 5.3+). |
$__unixEpochGroupAlias(dateColumn,'5m', [fillmode]) | То же, что и выше, но также добавляет псевдоним столбца (доступно только в Grafana 5.3+). |
Мы планируем добавить еще много макросов. Если у вас есть предложения о том, какие макросы вы хотели бы видеть, пожалуйста, откройте вопрос в нашем репозитории GitHub.
В редакторе запросов есть ссылка с именем Создан код SQL
, который появляется после выполнения запроса в режиме редактирования панели. Нажмите на нее, и она развернется и покажет необработанную интерполированную строку SQL, которая была выполнена.
Запросы таблицы
Если для параметра запроса Форматировать как
установлено значение Таблица
, то вы можете в принципе выполнять любой тип SQL-запроса. Панель таблицы автоматически покажет результаты любых столбцов и строк, возвращаемых вашим запросом.
Редактор запросов с примером запроса:
Запрос:
ВЫБЕРИТЕ заголовок как «Заголовок», user.login как «Создано», Dashboard.created как «Создано» ИЗ приборной панели ВНУТРЕННЕЕ ПРИСОЕДИНЯЙТЕСЬ к пользователю user.id = dashboard.created_by ГДЕ $__timeFilter(dashboard.created)
Вы можете управлять именами столбцов панели «Таблица», используя обычный синтаксис выбора столбца as
SQL.
Результирующая панель таблицы:
Запросы временных рядов
Если вы установите Формат как Временные ряды , то запрос должен иметь столбец с именем time, который возвращает либо дату и время SQL, либо любой числовой тип данных, представляющий эпоху Unix в секундах. Кроме того, наборы результатов запросов временных рядов должны быть отсортированы по времени, чтобы панели правильно визуализировали результат.
Результат запроса временного ряда возвращается в формате расширенного фрейма данных. Любой столбец, кроме времени или строкового типа, преобразуется в поля значений в результате запроса фрейма данных. Любой строковый столбец преобразуется в метки полей в результате запроса фрейма данных.
В целях обратной совместимости существует исключение из приведенного выше правила для запросов, которые возвращают три столбца, включая строковый столбец с именем metric. Вместо преобразования столбца метрики в метки полей он становится именем поля, а затем имя ряда форматируется как значение столбца метрики. См. пример со столбцом показателей ниже.
Сведения о дополнительной настройке форматирования имени серии по умолчанию см. в разделе Определения стандартных параметров.
Пример с метрикой
столбцом:
SELECT $__timeGroupAlias(time_date_time,'5m'), мин (значение_двойное), 'мин' как метрика ИЗ test_data ГДЕ $__timeFilter(time_date_time) СГРУППИРОВАТЬ ПО времени ЗАКАЗАТЬ ПО ВРЕМЕНИ
Результат фрейма данных:
+---------------------+-----------------+ | Имя: время | Имя: мин | | Ярлыки: | Ярлыки: | | Тип: []time. Time | Тип: [] float64 | +-----------------------------------+---+ | 2020-01-02 03:05:00 | 3 | | 2020-01-02 03:10:00 | 6 | +-----------------------------------+---+
Пример использования параметра заполнения в макросе $__timeGroupAlias для преобразования пустых значений в нули:
SELECT $__timeGroupAlias (создано в, '5 мин', 0), сумма (value_double) как значение, имя хоста ИЗ test_data ГДЕ $__timeFilter (созданный в) СГРУППИРОВАТЬ ПО времени, имени хоста ЗАКАЗАТЬ ПО ВРЕМЕНИ
Учитывая результат кадра данных в следующем примере и используя панель графика, вы получите два ряда с именами значение 10.0.1.1 и значение 10.0.1.2 . Чтобы отобразить серию с именем 10.0.1.1 и 10.0.1.2 , используйте [значение отображения стандартных опций ${__field.labels.hostname}
.
Результат фрейма данных:
+---------------------+------------------- --------+---------------------------+ | Имя: время | Имя: значение | Имя: значение | | Ярлыки: | Метки: hostname=10. 0.1.1 | Метки: hostname=10.0.1.2 | | Тип: []time.Time | Тип: [] float64 | Тип: [] float64 | +------------------------------------+-------------- +---------------------------+ | 2020-01-02 03:05:00 | 3 | 4 | | 2020-01-02 03:10:00 | 6 | 7 | +------------------------------------+-------------- +---------------------------+
Пример с несколькими столбцами:
SELECT $__timeGroupAlias(time_date_time,'5m'), min(value_double) как min_value, max(value_double) как max_value ИЗ test_data ГДЕ $__timeFilter(time_date_time) СГРУППИРОВАТЬ ПО времени ЗАКАЗАТЬ ПО ВРЕМЕНИ
Результат фрейма данных:
+---------------------+---+- --+ | Имя: время | Имя: минимальное_значение | Имя: максимальное_значение | | Ярлыки: | Ярлыки: | Ярлыки: | | Тип: []time.Time | Тип: [] float64 | Тип: [] float64 | +------------------------------------+---+---------- --------+ | 2020-01-02 03:04:00 | 3 | 4 | | 2020-01-02 03:05:00 | 6 | 7 | +------------------------------------+---+---------- --------+
В настоящее время не поддерживается динамическая группа по времени на основе временного диапазона и ширины панели. Это то, что мы планируем добавить.
Шаблоны
В настоящее время эта функция доступна в ночных сборках и будет включена в выпуск 5.0.0.
Вместо жесткого кодирования таких вещей, как имя сервера, приложения и датчика в ваших метрических запросах, вы можете использовать вместо них переменные. Переменные отображаются в виде раскрывающегося списка в верхней части панели инструментов. Эти раскрывающиеся списки упрощают изменение данных, отображаемых на панели инструментов.
Ознакомьтесь с документацией по шаблонам, чтобы ознакомиться с функцией шаблонов и различными типами переменных шаблонов.
Переменная запроса
Если вы добавите переменную шаблона типа Query
, вы можете написать запрос MySQL, который может
возвращать такие вещи, как имена измерений, имена ключей или значения ключей, которые отображаются в виде раскрывающегося списка.
Например, у вас может быть переменная, содержащая все значения для столбца hostname
в таблице, если вы укажете такой запрос в переменной шаблона Настройка запроса .
ВЫБЕРИТЕ имя хоста ИЗ my_host
Запрос может возвращать несколько столбцов, и Grafana автоматически создаст из них список. Например, приведенный ниже запрос вернет список со значениями из hostname
и hostname2
.
ВЫБЕРИТЕ my_host.hostname, my_other_host.hostname2 ОТ my_host ПРИСОЕДИНЯЙТЕСЬ к my_other_host ON my_host.city = my_other_host.city
Чтобы использовать макросы, зависящие от диапазона времени, такие как $__timeFilter(column)
в вашем запросе режим обновления переменной шаблона должен быть установлен на On Time Range Change .
ВЫБЕРИТЕ имя_события ИЗ журнала событий, ГДЕ $__timeFilter(time_column)
Другим вариантом является запрос, который может создать переменную ключ/значение. Запрос должен вернуть два столбца с именами __text
и __value
. Значение столбца __text
должно быть уникальным (если оно не уникально, то используется первое значение). Параметры в раскрывающемся списке будут иметь текст и значение, которые позволяют вам использовать понятное имя в виде текста и идентификатор в качестве значения. Пример запроса с имя хоста
в качестве текста и идентификатор
в качестве значения:
ВЫБРАТЬ имя хоста КАК __текст, идентификатор КАК __значение ИЗ my_host
Вы также можете создавать вложенные переменные. Например, если у вас есть другая переменная с именем , регион
. Тогда вы могли бы
переменная hosts показывает только хосты из текущего выбранного региона с таким запросом (если регион
является многозначной переменной, тогда используйте оператор сравнения IN
, а не =
для сопоставления с несколькими значениями):
ВЫБРАТЬ имя хоста ОТ my_host ГДЕ регион В ($ регион)
Использование
__searchFilter
для фильтрации результатов в переменной запросаДоступно в Grafana 6.5 и выше
типы пользователей в раскрывающемся списке. Если пользователь ничего не ввел, значение по умолчанию для __searchFilter
равно %
.
Важно, чтобы вы окружили
__searchFilter
выражение с кавычками, так как Grafana не делает этого за вас.
В приведенном ниже примере показано, как использовать __searchFilter
как часть поля запроса, чтобы включить поиск имени хоста
, когда пользователь вводит в раскрывающемся списке.
Запрос
ВЫБРАТЬ имя хоста ИЗ my_host ГДЕ имя хоста LIKE '$__searchFilter'
Использование переменных в запросах
Начиная с Grafana 4.3.0 и 4.6.0, переменные шаблона всегда заключаются в кавычки автоматически, поэтому, если это строковое значение, не заключайте их в кавычки в предложениях where.
Начиная с Grafana 4.7.0, значения переменных шаблона заключаются в кавычки только в том случае, если переменная шаблона является многозначной
.
Если переменная является переменной с несколькими значениями, используйте оператор сравнения IN
, а не =
для сопоставления нескольких значений.
Существует два синтаксиса:
$<имя_переменной>
Пример с переменной шаблона с именем имя хоста
:
SELECT UNIX_TIMESTAMP(atimestamp) как время, не как значение, avarchar как метрика ИЗ my_table ГДЕ $__timeFilter(atimestamp) и имя хоста в($hostname) ЗАКАЗАТЬ ПО метке времени ASC
[[varname]]
Пример с переменной шаблона с именем hostname
:
SELECT UNIX_TIMESTAMP(atimestamp) как время, не как значение, avarchar как метрика ИЗ my_table ГДЕ $__timeFilter(atimestamp) и имя хоста в([[hostname]]) ЗАКАЗАТЬ ПО метке времени ASC
Отключение кавычек для многозначных переменных
Grafana автоматически создает заключенную в кавычки строку с разделителями-запятыми для многозначных переменных. Например: если server01
и server02
, то он будет отформатирован как: 'server01', 'server02'
. Отключите кавычки, используйте параметр форматирования csv для переменных:
${servers:csv}
Подробнее о параметрах форматирования переменных читайте в документации по переменным.
Аннотации
Аннотации позволяют накладывать расширенную информацию о событиях поверх графиков. Вы добавляете запросы аннотаций через меню Dashboard/представление Annotations.
Пример запроса с использованием столбца времени со значениями эпохи:
ВЫБЕРИТЕ эпоха_время как время, metric1 как текст, CONCAT(tag1, ',', tag2) как теги ОТ public.test_data ГДЕ $__unixEpochFilter(epoch_time)
Пример запроса региона с использованием столбцов time и timeend со значениями эпохи:
Доступно только в Grafana v6.6+.
ВЫБЕРИТЕ эпоха_время как время, epoch_timeend как timeend, metric1 как текст, CONCAT(tag1, ',', tag2) как теги ОТ public.test_data ГДЕ $__unixEpochFilter(epoch_time)
Пример запроса с использованием столбца времени собственного типа данных даты/времени SQL:
SELECT native_date_time как время, metric1 как текст, CONCAT(tag1, ',', tag2) как теги ОТ public. test_data ГДЕ $__timeFilter(native_date_time)
Имя | Описание |
---|---|
время | Имя поля даты/времени. Может быть столбцом с собственным типом данных даты/времени SQL или значением эпохи. |
timeend | Необязательное имя поля даты/времени окончания. Может быть столбцом с собственным типом данных даты/времени SQL или значением эпохи. (Grafana v6.6+) |
текст | Поле описания события. |
теги | Необязательное имя поля для тегов событий в виде строки, разделенной запятыми. |
Оповещение
Запросы временных рядов должны работать в условиях оповещения. Запросы в формате таблицы пока не поддерживаются в условиях правил предупреждений.
Пример базы данных SQL
Резюме : в этом руководстве вы узнаете об образце базы данных SQL под названием HR, который управляет данными HR малых предприятий.
Следующая диаграмма базы данных иллюстрирует образец базы данных HR:
Образец базы данных HR содержит семь таблиц:
- В таблице
сотрудников
хранятся данные о сотрудниках. - В таблице
jobs
хранятся данные о должностях, включая название должности и диапазон заработной платы. - В таблице
отдела
хранятся данные отдела. - В таблице
иждивенцы
хранятся иждивенцы сотрудника. - В таблице
location
хранится расположение отделов компании. - В таблице
страны
хранятся данные о странах, в которых компания ведет бизнес. - В таблице
регионов
хранятся данные по таким регионам, как Азия, Европа, Америка, Ближний Восток и Африка. Страны сгруппированы в регионы.
На следующем рисунке показаны имена таблиц и их записи.
Таблица | Строки |
---|---|
Сотрудники | 40 |
иждивенцы | 30 |
отделы | 11 |
рабочие места | 11 |
места | 7 |
страны | 25 |
регионы | 4 |
Как правило, для работы с SQL необходимо установить систему управления реляционными базами данных (RDBMS).
Если вы работали с РСУБД, такой как MySQL, PostgreSQL, Oracle Database и SQL Server, вы можете использовать следующий сценарий для создания примера базы данных в одной из этих баз данных.
Если у вас нет базы данных для практики, вы можете быстро использовать наш онлайн-инструмент SQL для выполнения операторов SQL в своем веб-браузере.
MySQL
Следующий сценарий SQL создает образец базы данных HR в MySQL:
Создать образец базы данных HR в MySQLСледующий сценарий позволяет вставлять данные в таблицы в MySQL:
Загрузить данные HR в MySQLPostgreSQL
Следующий сценарий создает образец структуры базы данных HR в PostgreSQL.
Создать образец базы данных HR в PostgreSQLСледующий скрипт позволяет вставлять данные в таблицы в PostgreSQL:
Загрузить данные HR в PostgreSQLMicrosoft SQL Server
Следующий сценарий создает структуру образца базы данных HR в Microsoft SQL Server.
Создать образец базы данных HR в SQL ServerСледующий скрипт позволяет вставлять данные в таблицы:
Загружать данные HR в SQL ServerБаза данных Oracle (>12c)
Следующий сценарий создает структуру образца базы данных HR в базе данных Oracle 12c.