Zabbixデータベースのパーティショニングを実行する方法を学びたいですか? このチュートリアルでは、Ubuntu Linuxを実行しているコンピュータ上でZabbix MySQLデータベースをパーティション分割する方法を説明します。
•Zabbixバージョン:4.0.5
•Linux:Ubuntu 18.04
•MySQL:Ver 14.14 Distrib 5.7.25
このチュートリアルでは、まったく新しいZabbixインストールを検討します。
ハードウェアリスト:
次のセクションでは、このZabbixチュートリアルを作成するために使用された機器のリストを示します。
上記のすべてのハードウェアは、AmazonのWebサイトにあります。
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コンソールにアクセスして、上記の7つのテーブルに対するZabbixの最も古いエントリ日付を確認します。
# 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)
重要! 各表に表示されている日付をメモします。
それでは、履歴テーブルを日付ごとに分割しましょう。
まず、Historyテーブルを分割しましょう。
# 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という名前のファイルには、2019年3月23日の前に、すべてのMySQLの情報を持っています。
目標日が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);
3番目に、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);
4番目に、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 Tableのそれぞれを分割しましょう。
まず、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という名前のファイルは、2019-04-01より前のすべてのMySQL情報を持ちます。
目標日が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';
この例では、zabbix MySQLユーザー名とkamisama123 MySQLパスワードを使用しています。
この例では、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.