Wilt u leren hoe u een Zabbix-databasepartitionering uitvoert? In deze zelfstudie laten we u zien hoe u de Zabbix MySQL-database partitioneert op een computer waarop Ubuntu Linux draait.

• Zabbix-versie: 4.0.5
• Linux: Ubuntu 18.04
• MySQL: Ver 14.14 Distrib 5.7.25

Onze tutorial beschouwt een gloednieuwe Zabbix-installatie.

Hardware Lijst:

In het volgende gedeelte wordt de lijst met apparaten weergegeven die zijn gebruikt om deze Zabbix-zelfstudie te maken.

Elk onderdeel van de hierboven genoemde hardware is te vinden op de Amazon-website.

Zabbix Playlist:

Op deze pagina bieden we snelle toegang tot een lijst met video's gerelateerd aan Zabbix-installatie.

Vergeet niet je te abonneren op ons YouTube-kanaal met de naam FKIT.

Tutorial - Zabbix Database Partitioneren

Gebruik de volgende opdracht om de vereiste software te installeren.

# apt-get update
# apt-get install perl libdbi-perl libdatetime-perl libdbd-mysql-perl

We moeten de volgende tabellen uit de Zabbix-database partitioneren:

• history
• history_log
• history_str
• history_text
• history_uint
• trends
• trends_uint

Uw Zabbix-server heeft waarschijnlijk al informatie uit monitoring binnen zijn database.

Open de MySQL-console en verifieer de oudste ingangsdatum van de Zabbix voor de 7 hierboven genoemde tabellen:

# 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`;

Voor elk van deze MySQL-opdrachten moet de uitvoer iets gelijkaardigs zijn als dit:

+---------------------------------------+
| FROM_UNIXTIME(MIN(clock)) |
+---------------------------------------+
| 2019-03-22 17:48:07                       |
+---------------------------------------+
1 row in set (0.00 sec)

Belangrijk! Noteer de datum die voor elk van de tabellen wordt weergegeven.

Laten we nu elk van de geschiedenistabellen op datum verdelen:

Laten we eerst de tabel Historie partitioneren.

# 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);

In ons voorbeeld heeft een bestand met de naam p2019_03_22 alle MySQL-informatie vóór 2019-03-23.

Als uw streefdatum 2019-03-22 is, moet u alles vóór 2019-03-23 invoeren.

Ten tweede, laten we de history_log-tabel partitioneren.

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);

Ten derde, laten we de history_str-tabel partitioneren.

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);

Ten vierde, laten we de tabel met history_text partitioneren.

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);

Ten vijfde, laten we de tabel history_uint partitioneren.

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);

Laten we nu elk van de Trends-tabel per maand partitioneren:

Laten we eerst de tabel Trends partitioneren.

ALTER TABLE `trends` PARTITION BY RANGE ( clock)
(PARTITION p2019_03 VALUES LESS THAN (UNIX_TIMESTAMP("2019-04-01 00:00:00")) ENGINE = InnoDB);

In ons voorbeeld heeft een bestand met de naam p2019_03 alle MySQL-informatie vóór 2019-04-01.

Als uw streefdatum 2019-03 is, moet u alles vóór 2019-04-01 invoeren.

Ten tweede, laten we de tabel trends_uint partitioneren.

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-database Partities zijn succesvol gemaakt.

Tutorial - Zabbix Database Partitioning Script

We gaan een Perl-script gebruiken om de volgende taken uit te voeren:

Maak van tevoren een 10-daagse MySQL-databasepartitie om te voorkomen dat de service stopt.

Verwijder oudere MySQL-partities die niet meer nodig zijn.

# mkdir /downloads/zabbix_script
# cd /downloads/zabbix_script
# vi zabbix_partition_creator.pl

Hier is de inhoud van het script 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

U moet de volgende delen van het script aanpassen aan uw MySQL-omgeving.

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';

In ons voorbeeld gebruiken we de zabbix MySQL-gebruikersnaam en kamisama123 MySQL-wachtwoord.

In ons voorbeeld houden we 30 dagen aan geschiedenistabelleninhoud.

In ons voorbeeld houden we 2 maanden aan inhoudstabellen-inhoud.

In ons voorbeeld stellen we de tijdzone tijdzone van Amerika / Sao_Paulo in.

Nu moet u het script zonder fouten handmatig uitvoeren.

# cd /downloads/zabbix_script
# chmod 700 zabbix_partition_creator.pl
# ./zabbix_partition_creator.pl

Open de MySQL-console en controleer of het systeem tien dagen van de historische partitie van tevoren heeft gemaakt.

# 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) */

Ga naar de MySQL-console en controleer of het systeem 10 maanden durende trendverdeling heeft gemaakt.

# 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) */ |

Laten we nu plannen dat het Perl-script dagelijks wordt uitgevoerd.

# crontab -e

1  0  *  *  * /downloads/scripts/zabbix_partition_creator.pl

Gefeliciteerd! U hebt de Zabbix MySQL-databasetabellen gepartitioneerd.