Архив метки: MySQL

Разница между VARCHAR и TEXT в MySQL

MySQL имеет много типов данных для хранения строковых данных в таблице. VARCHAR и TEXT — два из них. Оба могут хранить максимум 65535 символов, но между этими типами данных, описанными в этом руководстве, есть некоторые различия.

 

VARCHAR против TEXT:

Существует много различий между типами данных VARCHAR и TEXT. Различия между этими типами данных описаны ниже.

 

Особенности VARCHAR и TEXT

Типы данных VARCHAR и TEXT по-разному хранят данные в таблице базы данных. Различные особенности этих типов данных описаны ниже.










VARCHARTEXT
В основном используется для хранения небольших строковых данных.В основном используется для хранения больших строковых данных.
Используется для хранения строковых данных переменной длины.Используется для хранения строковых данных фиксированной длины.
Максимальная длина строки может быть определена.Длина строки не может быть определена.
Индекс нельзя применять к этому типу данных.Индекс можно применять в этом типе данных.
Требуется длина + 1 байт пробела, если значение длины меньше или равно 255 символам, и длина + 2 байта пробела, если длина больше или равна 256 символам.Занимает длину +2 байта дискового пространства.
Работает медленнее.Работает быстрее.

 

Декларация VARCHAR и TEXT

Способы объявления типов данных VARCHAR и TEXT объясняются ниже путем создания двух таблиц с полем типов данных VARCHAR и TEXT. Длина требуется для определения типа данных VARCHAR, а длина не требуется для определения типа данных TEXT.

Выполните следующую инструкцию CREATE DATABASE, чтобы создать базу данных с именем test_db.

CREATE DATABASE test_db;

 

Запустите следующую инструкцию запроса, чтобы выбрать базу данных test_db перед созданием таблицы.

USE test_db;

 

Выполните следующую инструкцию CREATE TABLE, чтобы создать таблицу клиентов, содержащую пять полей. Здесь тип данных поля id — целое число, а тип данных полей name, email, address и contact_no — varchar, содержащий значение длины.

CREATETABLE customers(

id INTNOT NULL PRIMARY KEY,

name VARCHAR(30) NOT NULL,

email VARCHAR(50),

address VARCHAR(300),

contact_no VARCHAR(15));

 

Выполните следующую инструкцию DESCRIBE, чтобы проверить структуру таблицы клиентов.

DESCRIBE customers;

 

Выполните следующий запрос INSERT, чтобы вставить три записи в таблицу клиентов.

INSERT INTO `customers` (`id`, `name`, `email`, `address`, `contact_no`) VALUES ('01', 'Andrey Ex', 'Andrey@gmail.com', '25, aaaaaaaaaaaaaa, Bangladesh ', '0191275634'),

       ('02', 'Sasha Destroyer', 'Sasha@gmail.com', 'bbbbbbbbbbbbbbbbbb', '01855342357'),

       ('03', 'Masha Bubba', 'Masha@hotmail.com', 'cccccccccccccc', NULL);

 

Запустите следующую инструкцию SELECT, чтобы прочитать все записи таблицы клиентов.

SELECT * FROM customers;

 

Запустите следующую инструкцию CREATE TABLE, чтобы создать таблицу сотрудников, содержащую пять полей. Тип данных поля id — целое число. Тип данных полей name, email и contact_no — varchar. Тип данных адресного поля — текст. Здесь для поля адреса не объявлено значение длины из-за текстового типа данных.

CREATETABLE employees(

id INTNOT NULL PRIMARY KEY,

name VARCHAR(30) NOT NULL,

email VARCHAR(50),

address TEXT,

contact_no VARCHAR(15));

 

Выполните следующую инструкцию DESCRIBE, чтобы проверить структуру таблицы сотрудников.

DESCRIBE employees;

 

Выполните следующий запрос INSERT, чтобы вставить три записи с одинаковым содержимым таблицы клиентов в таблицу сотрудников.

INSERT INTO `employees` (`id`, `name`, `email`, `address`, `contact_no`) VALUES ('01', 'Andrey Ex', 'Andrey@gmail.com', 'aaaaaaaaaaaaaaaaaaaaaaa', '0191275634'),

       ('02', 'Sasha Destroyer', 'Sasha@gmail.com', 'bbbbbbbbbbbbbbbbbbbbbb', '01855342357'),

       ('03', 'Masha Bubba', 'Masha@hotmail.com', 'ccccccccccccccccccc', NULL);

 

Выполните следующую инструкцию SELECT, чтобы прочитать все записи таблицы сотрудников.

SELECT * FROM employees;

 

Производительность VARCHAR и TEXT

Ранее уже упоминалось, что тип данных TEXT работает быстрее, чем тип данных VARCHAR. Вы должны выбрать базу данных, содержащую таблицы с полем типа данных VARCHAR и TEXT, и включить профилирование текущего сеанса MySQL, чтобы проверить, какой тип данных быстрее между VARCHAR и TEXT.

База данных была выбрана здесь во время создания таблицы. Таким образом, нам не нужно выбирать его снова. Выполните следующую инструкцию SET, чтобы включить профилирование SESSION.

SET SESSION profiling = 1;

 

Выполните следующий запрос SELECT, чтобы прочитать все записи таблицы клиентов.

SELECT * FROM customers;

 

Выполните следующий запрос SELECT, чтобы прочитать все записи таблицы сотрудников.

SELECT * FROM employees;

 

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

SHOW PROFILES;

 

Следующий вывод появится после выполнения команды SHOW PROFILES. Согласно выходным данным, запрос SELECT для таблицы клиентов содержит поле адреса типа данных VARCHAR, требуемое 0,00101000 секунд, а запрос SELECT для таблицы сотрудников, содержащей поле адреса типа данных TEXT, требует 0,00078125 секунд. Это доказывает, что тип данных TEXT работает быстрее, чем тип данных VARCHAR для тех же данных.

Вы можете сравнить выходные данные следующих двух запросов, чтобы подробно проверить производительность типов данных VARCHAR и TEXT.

SELECT * FROM INFORMATION_SCHEMA.PROFILING WHERE QUERY_ID=1;



SELECT * FROM INFORMATION_SCHEMA.PROFILING WHERE QUERY_ID=2;

 

Вывод:

Оба типа данных VARCHAR и TEXT важны для создания таблиц в базе данных MySQL. Различия между этими типами данных были должным образом объяснены в этом руководстве с примерами, чтобы помочь пользователям MySQL выбрать правильный тип данных поля таблицы во время создания таблицы.



2022-02-15T14:56:35
MariaDB

Как разделить строку в MySQL

В MySQL существует множество встроенных функций для выполнения различных типов операций со строковыми данными. Иногда требуется разделить строковые данные на основе любого разделителя при выполнении запроса SELECT. Функция SUBSTRING_INDEX() используется для разделения строковых данных, полученных запросом, на основе определенного разделителя. В этой статье обсуждается способ использования этой функции в запросе SELECT.

 

Синтаксис SUBSTRING_INDEX():

Функция SUBSTRING_INDEX() принимает три аргумента и возвращает значение подстроки. Синтаксис функции SUBSTRING_INDEX() представлен ниже:

string SUBSTRING_INDEX(string, delimiter, count);

 

  • Первый аргумент — это строковое значение, которое будет разделено.
  • Второй аргумент — это разделитель, который будет использоваться для разделения строкового значения.
  • Третий аргумент определяет количество вхождений разделителя. Оно может быть положительным или отрицательным. Если значение третьего аргумента положительное, то значение подстроки будет возвращено слева. Если значение третьего аргумента отрицательное, значение подстроки будет возвращено справа.

 

Разделить строку с помощью функции SUBSTRING_INDEX():

В этой части статьи показаны различные варианты использования функции SUBSTRING_INDEX().

 

Пример 1: Разделить строку на основе положительного значения счетчика

В этой части руководства показаны четыре варианта использования функции SUBSTRING_INDEX() с положительным значением счетчика и другим разделителем.

Запустите следующую инструкцию SELECT, которая использует функцию SUBSTRING_INDEX() с положительным значением счетчика, 1, и пробелом в качестве разделителя. Основная строка «Welcome to AndreyEx» состоит из трех слов. Таким образом, в выводе будет напечатано первое слово строки.

SELECT SUBSTRING_INDEX('Welcome to AndreyEx', ' ', 1);

 

Запустите следующую инструкцию SELECT, которая использует функцию SUBSTRING_INDEX() с положительным значением счетчика, 2, и символом «o» в качестве разделителя. Основная строка «Welcome to AndreyEx» содержит два раза символ «o». Второй раз «o» появилось во втором слове «to». Таким образом, вывод будет «Welcome to».

SELECT SUBSTRING_INDEX('Welcome to AndreyEx', 'o', 2);

 

Выполните следующую инструкцию SELECT, которая использует функцию SUBSTRING_INDEX() с положительным значением счетчика, 1, и строкой ‘to’ в качестве разделителя. Основная строка «Welcome to AndreyEx» содержит строку «to» один раз. Таким образом, вывод будет «Welcome».

SELECT SUBSTRING_INDEX('Welcome to AndreyEx', 'to', 1);

 

Выполните следующую инструкцию SELECT, которая использует функцию SUBSTRING_INDEX() с положительным значением счетчика, 3, и строкой ‘to’ в качестве разделителя. Основная строка «Welcome to AndreyEx» содержит строку «to» только один раз. Таким образом, основная строка будет возвращена на выходе.

SELECT SUBSTRING_INDEX('Welcome to AndreyEx', 'to', 3);

 

Пример 2: Разделить строку на основе отрицательного значения счетчика

В этой части руководства показаны три варианта использования функции SUBSTRING_INDEX() с отрицательным значением счетчика и другим разделителем, которые были показаны в этой части статьи.

Выполните следующую инструкцию SELECT, в которой используется функция SUBSTRING_INDEX() с отрицательным значением счетчика, -1, и пробелом в качестве разделителя. Основная строка «Welcome to AndreyEx» состоит из трех слов. Итак, последнее слово строки будет напечатано в выводе для отрицательного значения:

SELECT SUBSTRING_INDEX('Welcome to AndreyEx', ' ', -1);

 

Выполните следующую инструкцию SELECT, которая использует функцию SUBSTRING_INDEX() с отрицательным значением счетчика, -2, и символом «e» в качестве разделителя. Основная строка «Welcome to AndreyEx» содержит символ «e» только один раз. Таким образом, вывод будет «lcome toAndreyEx »:

SELECT SUBSTRING_INDEX('Welcome to AndreyEx', 'e', -2);

 

Выполните следующую инструкцию SELECT, в которой используется функция SUBSTRING_INDEX() с отрицательным значением счетчика, -2, и строкой «in» в качестве разделителя. Основная строка «Welcome to AndreyEx» содержит два раза строку «yE». Таким образом, в выводе будет возвращена подстрока ‘ Andrex’.

SELECT SUBSTRING_INDEX('Welcome to AndreyEx', 'in', -2);

 

Пример 3: Разделить строковое значение таблицы

Вы должны создать таблицу с данными в базе данных MySQL, чтобы проверить функцию SUBSTRING_INDEX() для данных таблицы.

Выполните следующий запрос, чтобы создать базу данных с именем test_db:

CREATE DATABASE test_db;

 

Выполните следующую инструкцию, чтобы использовать базу данных test_db в качестве текущей базы данных:

USE test_db;

 

Выполните следующий запрос, чтобы создать таблицу клиентов с четырьмя полями:

CREATE TABLE customers(

id INT NOT NULL PRIMARY KEY,

name VARCHAR(30) NOT NULL,

email VARCHAR(50),

contact_no VARCHAR(15));

 

Выполните следующий запрос, чтобы вставить три записи в таблицу клиентов :

INSERT INTO `customers` (`id`, `name`, `email`, `contact_no`) VALUES

('001', 'Andrey Ex', 'info@andreyex.ru', '+8 000 00 00 000'),

('002', 'Maxs Destroyer', 'Max***@yandex.com', '+8 000 00 00 000'),

('003', 'Alex Annihilator', 'Alex***@yandex.com', '+8 000 00 00 000');




Выполните следующую команду, чтобы прочитать все записи таблицы клиентов:

SELECT * FROM customers;

 

Поле имени содержит имя и фамилию. Поле contact_no содержит номер мобильного телефона с кодом страны. Имя и номер мобильного телефона без кода страны можно прочитать из таблицы с помощью функции SUBSTRING_INDEX(). В следующем запросе SELECT первое имя будет получено с использованием разделителя пробела и 1 в качестве значения счетчика в функции SUBSTRING_INDEX(), а номер мобильного телефона без кода страны будет получен с использованием кода страны в качестве разделителя и -1 в качестве значения счетчика в функции SUBSTRING_INDEX():

SELECT

id, SUBSTRING_INDEX(name,' ',1) AS `First Name`, email, SUBSTRING_INDEX(contact_no,'+88',-1) AS Phone

FROM customers;

 

Вывод:

Различные варианты использования функции SUBSTRING_INDEX() с использованием разных значений аргументов обсуждались в этом руководстве с использованием нескольких примеров. Мы надеемся, что примеры в этой статье помогут пользователям MySQL узнать об использовании функции SUBSTRING_INDEX() и правильно применить ее в запросе SELECT.



2022-02-08T16:25:16
MariaDB

MySQL 8 — Предоставление прав на БД

В предыдущих версиях MySQL создание пользователя и предоставление ему прав на базу выполнялось командой, использующей сочетание GRANT и IDENTIFIED BY. В восьмой версии этот синтаксис выдает ошибку:

Читать

SQL. Сборник рецептов

SQL. Сборник рецептов

Книга Энтони Молинаро «SQL. Сборник рецептов» предназначена тем, кто уже знаком с основами языка запросов SQL и хочет повысить свой профессиональ! ный уровень. Она будет полезна и экспертам SQL, поскольку автор предлагает варианты решения задач для разных СУБД: DB2, Oracle, PostgreSQL, MySQL и SQL Server. Если вы постоянно работаете с SQL на одной платформе, то, воз! можно, найдете в рецептах более эффективное решение на другой. Вы научи! тесь использовать SQL для решения более широкого спектра задач – от опера! ций внутри баз данных до передачи данных по сети в приложения. Для этого достаточно открыть книгу на странице с интересующим вас рецептом.

Скачать с mail облака

2021-10-24T09:03:53Книги и Курсы

Как усечь таблицу в MySQL

На этом этапе вам может потребоваться очистить таблицу и все хранящиеся в ней данные, сохранив структуру таблицы. В таком сценарии предложение усечения MySQL является очень эффективным запросом.

В этой статье показано, как использовать оператор TRUNCATE в MySQL для удаления всех данных в таблице базы данных.

Оператор TRUNCATE является частью операторов языка определения данных. Однако его функции аналогичны оператору DELETE, что делает его частью языка манипулирования данными.

Чтобы использовать оператор TRUNCATE, у вас должны быть привилегии DROP в базе данных.

 

Особенности Truncate

Ниже приведены некоторые характерные особенности оператора TRUNCATE, которые отличают его от оператора DELETE:

  1. Операцию усечения нельзя откатить, поскольку она выполняет неявную фиксацию.
  2. Он работает, удаляя таблицу и воссоздавая ее, сохраняя ее структуру, но не данные.
  3. Truncate поддерживает поврежденные таблицы, удаляя все данные и восстанавливая пустую таблицу.
  4. Он не вызывает никаких триггеров удаления.
  5. Сохраняет разбиение таблицы
  6. Оператор TRUNCATE не возвращает никакой информации о затронутых строках — это означает, что возвращаемое значение равно 0.

 

Основное использование

Общий синтаксис использования оператора TRUNCATE:

TRUNCATE TABLE tbl_name;

Примечание
Вы можете пропустить ключевое слово TABLE, и оператор TRUNCATE будет работать аналогично. Однако лучше добавить ключевое слово TABLE, чтобы избежать путаницы с функцией Truncate.

 

Пример использования

Давайте посмотрим на пример использования оператора TRUNCATE.

В этом примере мы будем использовать таблицу сотрудников, представленную в ресурсе ниже:

https://dev.mysql.com/doc/index-other.html

 

Сначала выберите несколько значений из таблицы, чтобы убедиться, что она не пуста:

SELECT * FROM employees LIMIT 10;

 

Теперь, когда мы подтвердили, что таблица заполнена данными, давайте попробуем усечь таблицу следующим образом:

SET FOREIGN_KEY_CHECKS = FALSE;



TRUNCATE TABLE employees;

Сначала мы устанавливаем для переменной FOREIGN_KEY_CHECK значение False, потому что оператор TRUNCATE не работает, если таблица содержит ограничения из других таблиц.

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

Вы можете подтвердить, щелкнув выбрать:

SELECT * FROM employees;

 

Примечание
ВНИМАНИЕ ! Не удаляйте проверку ограничений в таблицах реальной базы данных.

 

Заключение

В этой статье вы узнали, как использовать оператор TRUNCATE в MySQL для удаления данных из таблицы. Надеемся, этот урок был вам полезен.



2021-06-16T13:48:30
База данных MySQL

Мониторинг Mysql в Zabbix

С появлением стандартных готовых шаблонов для различных приложений жизнь с заббиксом стала значительно проще. Сегодня я покажу это на примере мониторинга Mysql сервера в Zabbix 5 с использованием стандартного шаблона. Все стало не просто, а очень просто. Практически ничего делать не надо, разработчики все сделали за нас.




Введение




Напоминаю одну важную деталь. Если вы ставите Zabbix Server не с нуля, а обновляете старую версию, у вас не обновляются стандартные шаблоны. А они последнее время сильно изменились, плюс появились новые. Посмотреть их можно на github — https://github.com/zabbix/zabbix/tree/master/templates.




В данном случае я буду использовать шаблон из директории /db/mysql_agent/. Он написан для старого агента. Напомню, что начиная с версии 4.4 доступна новая версия агента, написанная на Go — zabbix_agent2. Для него появился новый функционал и новые шаблоны. Я пока буду использовать старого агента, так как с новым еще не разбирался.




Если у вас еще нет своего сервера для мониторинга, то рекомендую материалы на эту тему. Для тех, кто предпочитает систему CentOS:




  1. Установка CentOS 8.
  2. Настройка CentOS 8.
  3. Установка и настройка zabbix сервера.




То же самое на Debian 10, если предпочитаете его:




  1. Установка Debian 10.
  2. Базовая настройка Debian.
  3. Установка и настройка zabbix на debian.




Ставьте себе сервер и погнали настраивать.




Подготовка mysql к мониторингу




Для примера настроим мониторинг Mysql на самом сервере мониторинга Zabbix. Так как это часто узкое место производительности системы, мониторинг базы zabbix лишним не будет. Первым делом добавим новые параметры в агенте. Для этого создаем конфигурационный файл /etc/zabbix/zabbix_agentd.d/template_db_mysql.conf следующего содержания.




UserParameter=mysql.ping[*], mysqladmin -h"$1" -P"$2" ping
UserParameter=mysql.get_status_variables[*], mysql -h"$1" -P"$2" -sNX -e "show global status"
UserParameter=mysql.version[*], mysqladmin -s -h"$1" -P"$2" version
UserParameter=mysql.db.discovery[*], mysql -h"$1" -P"$2" -sN -e "show databases"
UserParameter=mysql.dbsize[*], mysql -h"$1" -P"$2" -sN -e "SELECT COALESCE(SUM(DATA_LENGTH + INDEX_LENGTH),0) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='$3'"
UserParameter=mysql.replication.discovery[*], mysql -h"$1" -P"$2" -sNX -e "show slave status"
UserParameter=mysql.slave_status[*], mysql -h"$1" -P"$2" -sNX -e "show slave status"




После этого сразу перезапустим zabbix-agent.




systemctl restart zabbix-agent




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




mysql -uroot -p
> CREATE USER 'zbx_monitor'@'%' IDENTIFIED BY 'TTRy1bRRgLIB';
> GRANT USAGE,REPLICATION CLIENT,PROCESS,SHOW DATABASES,SHOW VIEW ON *.* TO 'zbx_monitor'@'%';
> quit




Теперь смотрим, где у нас домашняя директория пользователя zabbix.




cat /etc/passwd | grep zabbix
zabbix:x:990:986:Zabbix Monitoring System:/var/lib/zabbix:/sbin/nologin




У меня ее не было, так что создаем.




mkdir /var/lib/zabbix




Кладем в эту директорию конфиг .my.cnf с реквизитами доступа к серверу mysql.




[client]
user='zbx_monitor'
password='TTRy1bRRgLIB'




Назначаем пользователя zabbix владельцем своей домашней директории и файла в ней. Файлу ограничиваем доступ.




chown -R zabbix. /var/lib/zabbix
chmod 400 /var/lib/zabbix/.my.cnf




Подготовка к мониторингу mysql сервера завершена. Идем теперь в web интерфейс системы мониторинга Zabbix.




Настройка мониторинга Mysql сервера




В веб интерфейсе идем в раздел Настройка -> Шаблоны и импортируем шаблон template_db_mysql_agent.xml.







После этого прикрепляем добавленный шаблон к хосту, где мы только что настроили zabbix-agent и добавили пользователя mysql. Для того, чтобы сразу увидеть все метрики, принудительно выполним сбор данных. Для начала вручную запустим правила автообнаружения, так как у них интервал проверок 1 час. Не хочется столько времени ждать данных. Идем в хост, далее во вкладку Правила обнаружения. Выбираем 2 правила от шаблона mysql и запускаем их.







Ждем несколько секунд и переходим на вкладку Элементы данных. Фильтруем элементы по названию группы MySQL и Zabbix raw items.







Теперь переходим к списку элементов данных. Выделяем все элементы, которые относятся к Mysql и имеют тип Zabbix Agent и запускаем их принудительную проверку. Основной элемент тут — MySQL: Get status variables. Почти все итемы получаются в результате предобработки данных с него.




После этого идем в раздел Мониторинг -> Последние данные и наблюдаем собираемые метрики.







На этом по базовой настройке мониторинга сервера mysql все. Дальше раскрою некоторые нюансы.




Мониторинг репликации MySQL




Вообще, шаблон достаточно навороченный. Там и автообнаружение, и зависимые элементы с предобработкой xml, и предобработка с помощью JavaScript. Рассмотрю отдельно некоторые моменты представленного шаблона zabbix по мониторингу mysql. Во-первых, некоторые параметры задаются с помощью макросов. Вот их список.







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




Так же в шаблоне реализован мониторинг репликации базы данных. Для этого есть отдельное правила автообнаружения с триггерами. Теперь моя старая статья по мониторингу репликации mysql стала не актуальна. Этот же функционал реализован в базовом шаблоне. Если у вас не настроена репликация, то автообнаружение просто не найдет ничего. Можно это правило выключить.







Для мониторинга репликации автоматически создаются 4 триггера.







  1. Replication lag is too high (over {$MYSQL.REPL_LAG.MAX.WARN} for 5m) — отставание реплики больше заданного в макросе времени. По умолчанию 30 минут.
  2. The slave I/O thread is not connected to a replication master — Демон по сбору бинарного лога запущен, но не подключен к мастеру. Его параметр slave_io_running имеет значение не Yes.
  3. The slave I/O thread is not running — демон по сбору бинарного лога не запущен. Его параметр slave_io_running равен No.
  4. The SQL thread is not running — демон выполнения команд локального relay лога не запущен. Его парметр slave_sql_running равен No.




В целом, этих четырех метрик достаточно для мониторинга репликации. Я так же настраивал мониторинг именно их.




Триггеры шаблона




Для полноты картины, поясню остальные триггеры шаблона, чтобы у вас было понимание, за чем они следят и как правильно реагировать на них. Ниже список триггеров шаблона для мониторинга mysql сервера.







  1. Buffer pool utilization is too low (less {$MYSQL.BUFF_UTIL.MIN.WARN}% for 5m) — под innodb пул выделено слишком много памяти и она не используется вся. Триггер чисто информационный, делать ничего не надо, если у вас нет дефицита памяти на сервере. Если нехватка оперативной памяти есть, то имеет смысл забрать немного памяти у mysql и передать другому приложению. Настраивается потребление памяти пулом параметром innodb_buffer_pool_size.
  2. Failed to get items (no data for 30m) — от mysql сервера не поступают новые данные мониторинга в течении 30 минут. Имеет смысл уменьшить этот интервал до 5-10 минут.
  3. Refused connections (max_connections limit reached) — срабатывает ограничение на максимальное количество подключений к mysql. Увеличить его можно параметром mysql сервера — max_connections. Его необходимо увеличить, если позволяют возможности сервера. Напомню, что увеличенное количество подключений требует увеличения потребления оперативной памяти. Если у вас ее уже не хватает, нет смысла увеличивать число подключений. Нужно решать вопрос с потреблением памяти.
  4. Server has aborted connections (over {$MYSQL.ABORTED_CONN.MAX.WARN} for 5m) — сервер отклонил подключений выше заданного порога в макросе. Надо идти в лог mysql сервера и разбираться в причинах этого события. Скорее всего там будут подсказки.
  5. Server has slow queries (over {$MYSQL.SLOW_QUERIES.MAX.WARN} for 5m) — количество медленных запросов выше установленного макросом предела. Надо идти и разбираться с медленными запросами. Тема не самая простая. Надо заниматься профилированием запросов и решать проблемы по факту — добавлением индексов, редактированием запросов, увеличения ресурсов mysql сервера и т.д.
  6. Service has been restarted (uptime < 10m) — информационный триггер, срабатывающий на перезапуск mysql сервера (не ребут самого сервера).
  7. Service is down — служба mysql не запущена.
  8. Version has changed (new version value received: {ITEM.VALUE}) — версия mysql сервера изменилась. Тоже информационный триггер, сработает, к примеру, после обновления mysql сервера.




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




Заключение




Не понравилась статья и хочешь научить меня администрировать? Пожалуйста, я люблю учиться. Комментарии в твоем распоряжении. Расскажи, как сделать правильно!




Здорово, что разработчики сами занялись написанием готовых шаблонов для мониторинга сетевых устройств, операционных систем и приложений. Поняли, что это будет способствовать развитию продукта. Многие шаблоны, которые разрабатывали сами пользователи, становятся неактуальными, так как разработчики их делают лучше. Собственно, это и логично. Кто лучше всех знает продукт, как не они. За последнее время появилось много обновления по этой теме. Надеюсь, будет еще больше.




Источник: https://serveradmin.ru/monitoring-mysql-v-zabbix/



2021-03-10T21:51:20
Software