Хотите узнать, как выполнить разбиение базы данных Zabbix? В этом руководстве мы покажем вам, как разбить базу данных Zabbix MySQL на компьютере под управлением Ubuntu Linux.
• Zabbix версия: 4.0.5
• Linux: Ubuntu 18.04
• MySQL: версия 14.14, дистрибутив 5.7.25
В нашем руководстве рассматривается новая установка Zabbix.
Список оборудования:
В следующем разделе представлен список оборудования, использованного для создания этого учебника Zabbix.
Все вышеперечисленное оборудование можно найти на сайте Amazon.
Zabbix Playlist:
На этой странице мы предлагаем быстрый доступ к списку видео, связанных с установкой Zabbix.
Не забудьте подписаться на наш канал на YouTube FKIT.
Zabbix Связанное руководство:
На этой странице мы предлагаем быстрый доступ к списку учебных пособий, касающихся установки Zabbix.
Учебник - Разделение базы данных Zabbix
Используйте следующую команду для установки необходимого программного обеспечения.
# apt-get update
# apt-get install perl libdbi-perl libdatetime-perl libdbd-mysql-perl
Нам нужно разделить следующие таблицы из базы данных Zabbix:
• history
• history_log
• history_str
• history_text
• history_uint
• trends
• trends_uint
Ваш Zabbix сервер, вероятно, уже имеет информацию о мониторинге в своей базе данных.
Получите доступ к консоли MySQL и проверьте самую старую дату входа Zabbix для 7 таблиц, перечисленных выше:
# mysql -u root -p
use zabbix;
SELECT FROM_UNIXTIME(MIN(clock)) FROM `history`;
SELECT FROM_UNIXTIME(MIN(clock)) FROM `history_log`;
SELECT FROM_UNIXTIME(MIN(clock)) FROM `history_str`;
SELECT FROM_UNIXTIME(MIN(clock)) FROM `history_text`;
SELECT FROM_UNIXTIME(MIN(clock)) FROM `history_uint`;
SELECT FROM_UNIXTIME(MIN(clock)) FROM `trends`;
SELECT FROM_UNIXTIME(MIN(clock)) FROM `trends_uint`;
Для каждой из этих команд MySQL выходные данные должны быть примерно такими:
+---------------------------------------+
| FROM_UNIXTIME(MIN(clock)) |
+---------------------------------------+
| 2019-03-22 17:48:07 |
+---------------------------------------+
1 row in set (0.00 sec)
Важный! Обратите внимание на дату, отображаемую для каждой из таблиц.
Теперь давайте разделим каждую из таблиц истории по дате:
Во-первых, давайте разделим таблицу истории.
# mysql -u root -p
# use zabbix;
ALTER TABLE `history` PARTITION BY RANGE ( clock)
(PARTITION p2019_03_22 VALUES LESS THAN (UNIX_TIMESTAMP("2019-03-23 00:00:00")) ENGINE = InnoDB);
В нашем примере файл с именем p2019_03_22 будет иметь всю информацию MySQL до 2019-03-23.
Если ваша целевая дата 2019-03-22, вам нужно ввести все до 2019-03-23.
Во-вторых, давайте разделим таблицу history_log.
ALTER TABLE `history_log` PARTITION BY RANGE ( clock)
(PARTITION p2019_03_22 VALUES LESS THAN (UNIX_TIMESTAMP("2019-03-23 00:00:00")) ENGINE = InnoDB);
В-третьих, давайте разделим таблицу history_str.
ALTER TABLE `history_str` PARTITION BY RANGE ( clock)
(PARTITION p2019_03_22 VALUES LESS THAN (UNIX_TIMESTAMP("2019-03-23 00:00:00")) ENGINE = InnoDB);
В-четвертых, давайте разделим таблицу history_text.
ALTER TABLE `history_text` PARTITION BY RANGE ( clock)
(PARTITION p2019_03_22 VALUES LESS THAN (UNIX_TIMESTAMP("2019-03-23 00:00:00")) ENGINE = InnoDB);
В-пятых, давайте разделим таблицу history_uint.
ALTER TABLE `history_uint` PARTITION BY RANGE ( clock)
(PARTITION p2019_03_22 VALUES LESS THAN (UNIX_TIMESTAMP("2019-03-23 00:00:00")) ENGINE = InnoDB);
Теперь давайте разделим каждую таблицу трендов по месяцам:
Во-первых, давайте разделим таблицу Trends.
ALTER TABLE `trends` PARTITION BY RANGE ( clock)
(PARTITION p2019_03 VALUES LESS THAN (UNIX_TIMESTAMP("2019-04-01 00:00:00")) ENGINE = InnoDB);
В нашем примере файл с именем p2019_03 будет иметь всю информацию MySQL до 2019-04-01.
Если ваша целевая дата 2019-03, вам нужно ввести все до 2019-04-01.
Во-вторых, давайте разделим таблицу trend_uint.
ALTER TABLE `trends_uint` PARTITION BY RANGE ( clock)
(PARTITION p2019_03 VALUES LESS THAN (UNIX_TIMESTAMP("2019-04-01 00:00:00")) ENGINE = InnoDB);
База данных Zabbix Разделы созданы успешно.
Учебник - Сценарий разбиения базы данных Zabbix
Мы собираемся использовать скрипт Perl для выполнения следующих задач:
Создайте 10-дневный раздел базы данных MySQL, чтобы предотвратить остановку службы.
Удалите старые разделы MySQL, которые больше не требуются.
# mkdir /downloads/zabbix_script
# cd /downloads/zabbix_script
# vi zabbix_partition_creator.pl
Вот содержимое скрипта zabbix_partition_creator.pl:
use strict;
use Data::Dumper;
use DBI;
use Sys::Syslog qw(:standard :macros);
use DateTime;
use POSIX qw(strftime);
openlog("mysql_zbx_part", "ndelay,pid", LOG_LOCAL0);
my $db_schema = 'zabbix';
my $dsn = 'DBI:mysql:'.$db_schema.':mysql_socket=/var/run/mysqld/mysqld.sock';
my $db_user_name = 'zabbix';
my $db_password = 'kamisama123';
my $tables = ;
my $amount_partitions = 10;
my $curr_tz = 'America/Sao_Paulo';
my $part_tables;
my $dbh = DBI->connect($dsn, $db_user_name, $db_password, );
my $sth = $dbh->prepare(qq);
$sth->execute($db_schema);
while (my $row = $sth->fetchrow_hashref())
$sth->finish();
foreach my $key (sort keys %)
delete_old_data();
$dbh->disconnect();
sub create_next_partition
sub remove_old_partitions
sub name_next_part
sub date_next_part
sub delete_old_data
Вам необходимо изменить следующие части скрипта, чтобы они отражали вашу среду MySQL.
my $db_schema = 'zabbix';
my $dsn = 'DBI:mysql:'.$db_schema.':mysql_socket=/var/run/mysqld/mysqld.sock';
my $db_user_name = 'zabbix';
my $db_password = 'kamisama123';
my $tables = ;
my $amount_partitions = 10;
my $curr_tz = 'America/Sao_Paulo';
В нашем примере мы используем имя пользователя MySQL zabbix и пароль MySQL kamisama123.
В нашем примере мы храним содержимое таблиц истории за 30 дней.
В нашем примере мы сохраняем 2 месяца содержания таблиц трендов.
В нашем примере мы установили часовой пояс даты America / Sao_Paulo.
Теперь вам нужно вручную запустить скрипт без ошибок.
# cd /downloads/zabbix_script
# chmod 700 zabbix_partition_creator.pl
# ./zabbix_partition_creator.pl
Получите доступ к консоли MySQL и убедитесь, что система заранее создала раздел истории на 10 дней.
# mysql -u root -p
use zabbix;
show create table history;
/*!50100 PARTITION BY RANGE ( clock)
(PARTITION p2019_03_22 VALUES LESS THAN (1553310000) ENGINE = InnoDB,
PARTITION p2019_03_23 VALUES LESS THAN (1553396400) ENGINE = InnoDB,
PARTITION p2019_03_24 VALUES LESS THAN (1553482800) ENGINE = InnoDB,
PARTITION p2019_03_25 VALUES LESS THAN (1553569200) ENGINE = InnoDB,
PARTITION p2019_03_26 VALUES LESS THAN (1553655600) ENGINE = InnoDB,
PARTITION p2019_03_27 VALUES LESS THAN (1553742000) ENGINE = InnoDB,
PARTITION p2019_03_28 VALUES LESS THAN (1553828400) ENGINE = InnoDB,
PARTITION p2019_03_29 VALUES LESS THAN (1553914800) ENGINE = InnoDB,
PARTITION p2019_03_30 VALUES LESS THAN (1554001200) ENGINE = InnoDB,
PARTITION p2019_03_31 VALUES LESS THAN (1554087600) ENGINE = InnoDB,
PARTITION p2019_04_01 VALUES LESS THAN (1554174000) ENGINE = InnoDB) */
Получите доступ к консоли MySQL и убедитесь, что система заранее определила 10-месячный раздел трендов.
# mysql -u root -p
use zabbix;
show create table trends;
/*!50100 PARTITION BY RANGE ( clock)
(PARTITION p2019_03 VALUES LESS THAN (1554087600) ENGINE = InnoDB,
PARTITION p2019_04 VALUES LESS THAN (1556679600) ENGINE = InnoDB,
PARTITION p2019_05 VALUES LESS THAN (1559358000) ENGINE = InnoDB,
PARTITION p2019_06 VALUES LESS THAN (1561950000) ENGINE = InnoDB,
PARTITION p2019_07 VALUES LESS THAN (1564628400) ENGINE = InnoDB,
PARTITION p2019_08 VALUES LESS THAN (1567306800) ENGINE = InnoDB,
PARTITION p2019_09 VALUES LESS THAN (1569898800) ENGINE = InnoDB,
PARTITION p2019_10 VALUES LESS THAN (1572577200) ENGINE = InnoDB,
PARTITION p2019_11 VALUES LESS THAN (1575165600) ENGINE = InnoDB,
PARTITION p2019_12 VALUES LESS THAN (1577844000) ENGINE = InnoDB,
PARTITION p2020_01 VALUES LESS THAN (1580522400) ENGINE = InnoDB) */ |
Теперь давайте запланируем запуск сценария Perl ежедневно.
# crontab -e
1 0 * * * /downloads/scripts/zabbix_partition_creator.pl
Поздравляем! Вы разделили таблицы базы данных Zabbix MySQL.
Leave A Comment
You must be logged in to post a comment.