In addition to Weibo, there is also WeChat
Please pay attention
WeChat public account
Shulou
2025-04-01 Update From: SLTechnology News&Howtos shulou NAV: SLTechnology News&Howtos > Database >
Share
Shulou(Shulou.com)06/01 Report--
1. Connect to the database
Mysql-h-u-p
Type 'help;' or'\ h' for help. Type'\ c'to clear the current input statement.
Mysql >
Mysql > use zabbix
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with-A
Database changed
Mysql >
2. Change the table index structure
Mysql > Alter table history_text drop primary key, add index (id), drop index history_text_2, add index history_text_2 (itemid, id)
Query OK, 0 rows affected (0.49 sec)
Records: 0 Duplicates: 0 Warnings: 0
Mysql > Alter table history_log drop primary key, add index (id), drop index history_log_2, add index history_log_2 (itemid, id)
Query OK, 0 rows affected (2.71 sec)
Records: 0 Duplicates: 0 Warnings: 0
Mysql >
3. Stored procedure creation
-- add stored procedures for partitions
DELIMITER $$
CREATE PROCEDURE `partition_ create` (SCHEMANAME varchar (64), TABLENAME varchar (64), PARTITIONNAME varchar (64), CLOCK int)
BEGIN
/ *
SCHEMANAME = The DB schema in which to make changes
TABLENAME = The table with partitions to potentially delete
PARTITIONNAME = The name of the partition to create
, /
/ *
Verify that the partition does not already exist
, /
DECLARE RETROWS INT
SELECT COUNT (1) INTO RETROWS
FROM information_schema.partitions
WHERE table_schema = SCHEMANAME AND table_name = TABLENAME AND partition_description > = CLOCK
IF RETROWS = 0 THEN
/ *
1. Print a message indicating that a partition was created.
2. Create the SQL to create the partition.
3. Execute the SQL from # 2.
, /
SELECT CONCAT ("partition_create (", SCHEMANAME, ",", TABLENAME, ",", PARTITIONNAME, ",", CLOCK, ")) AS msg
SET @ sql = CONCAT ('ALTER TABLE', SCHEMANAME,'.', TABLENAME, 'ADD PARTITION (PARTITION', PARTITIONNAME, 'VALUES LESS THAN (', CLOCK,');)
PREPARE STMT FROM @ sql
EXECUTE STMT
DEALLOCATE PREPARE STMT
END IF
END$$
DELIMITER
-- Delete stored procedures for partitions
DELIMITER $$
CREATE PROCEDURE `partition_ drop` (SCHEMANAME VARCHAR (64), TABLENAME VARCHAR (64), DELETE_BELOW_PARTITION_DATE BIGINT)
BEGIN
/ *
SCHEMANAME = The DB schema in which to make changes
TABLENAME = The table with partitions to potentially delete
DELETE_BELOW_PARTITION_DATE = Delete any partitions with names that are dates older than this one (yyyy-mm-dd)
, /
DECLARE done INT DEFAULT FALSE
DECLARE drop_part_name VARCHAR (16)
/ *
Get a list of all the partitions that are older than the date
In DELETE_BELOW_PARTITION_DATE. All partitions are prefixed with
A "p", so use SUBSTRING TO get rid of that character.
, /
DECLARE myCursor CURSOR FOR
SELECT partition_name
FROM information_schema.partitions
WHERE table_schema = SCHEMANAME AND table_name = TABLENAME AND CAST (SUBSTRING (partition_name FROM 2) AS UNSIGNED)
< DELETE_BELOW_PARTITION_DATE; DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; /* Create the basics for when we need to drop the partition. Also, create @drop_partitions to hold a comma-delimited list of all partitions that should be deleted. */ SET @alter_header = CONCAT("ALTER TABLE ", SCHEMANAME, ".", TABLENAME, " DROP PARTITION "); SET @drop_partitions = ""; /* Start looping through all the partitions that are too old. */ OPEN myCursor; read_loop: LOOP FETCH myCursor INTO drop_part_name; IF done THEN LEAVE read_loop; END IF; SET @drop_partitions = IF(@drop_partitions = "", drop_part_name, CONCAT(@drop_partitions, ",", drop_part_name)); END LOOP; IF @drop_partitions != "" THEN /* 1. Build the SQL to drop all the necessary partitions. 2. Run the SQL to drop the partitions. 3. Print out the table partitions that were deleted. */ SET @full_sql = CONCAT(@alter_header, @drop_partitions, ";"); PREPARE STMT FROM @full_sql; EXECUTE STMT; DEALLOCATE PREPARE STMT; SELECT CONCAT(SCHEMANAME, ".", TABLENAME) AS `table`, @drop_partitions AS `partitions_deleted`; ELSE /* No partitions are being deleted, so print out "N/A" (Not applicable) to indicate that no changes were made. */ SELECT CONCAT(SCHEMANAME, ".", TABLENAME) AS `table`, "N/A" AS `partitions_deleted`; END IF; END$$ DELIMITER ; --维护分区的存储过程 DELIMITER $$ CREATE PROCEDURE `partition_maintenance`(SCHEMA_NAME VARCHAR(32), TABLE_NAME VARCHAR(32), KEEP_DATA_DAYS INT, HOURLY_INTERVAL INT, CREATE_NEXT_INTERVALS INT) BEGIN DECLARE OLDER_THAN_PARTITION_DATE VARCHAR(16); DECLARE PARTITION_NAME VARCHAR(16); DECLARE OLD_PARTITION_NAME VARCHAR(16); DECLARE LESS_THAN_TIMESTAMP INT; DECLARE CUR_TIME INT; CALL partition_verify(SCHEMA_NAME, TABLE_NAME, HOURLY_INTERVAL); SET CUR_TIME = UNIX_TIMESTAMP(DATE_FORMAT(NOW(), '%Y-%m-%d 00:00:00')); SET @__interval = 1; create_loop: LOOP IF @__interval >CREATE_NEXT_INTERVALS THEN
LEAVE create_loop
END IF
SET LESS_THAN_TIMESTAMP = CUR_TIME + (HOURLY_INTERVAL * @ _ interval * 3600)
SET PARTITION_NAME = FROM_UNIXTIME (CUR_TIME + HOURLY_INTERVAL * (@ _ _ interval-1) * 3600,'p% Y% m% d% H00')
IF (PARTITION_NAME! = OLD_PARTITION_NAME) THEN
CALL partition_create (SCHEMA_NAME, TABLE_NAME, PARTITION_NAME, LESS_THAN_TIMESTAMP)
END IF
SET @ _ _ interval=@__interval+1
SET OLD_PARTITION_NAME = PARTITION_NAME
END LOOP
SET OLDER_THAN_PARTITION_DATE=DATE_FORMAT (DATE_SUB (NOW (), INTERVAL KEEP_DATA_DAYS DAY),'% Y% m% d0000')
CALL partition_drop (SCHEMA_NAME, TABLE_NAME, OLDER_THAN_PARTITION_DATE)
END$$
DELIMITER
-- the stored procedure for checking the partition and creating the first partition
DELIMITER $$
CREATE PROCEDURE `partition_ verify` (SCHEMANAME VARCHAR (64), TABLENAME VARCHAR (64), HOURLYINTERVAL INT (11))
BEGIN
DECLARE PARTITION_NAME VARCHAR (16)
DECLARE RETROWS INT (11)
DECLARE FUTURE_TIMESTAMP TIMESTAMP
/ *
* Check if any partitions exist for the given SCHEMANAME.TABLENAME.
, /
SELECT COUNT (1) INTO RETROWS
FROM information_schema.partitions
WHERE table_schema = SCHEMANAME AND table_name = TABLENAME AND partition_name IS NULL
/ *
* If partitions do not exist, go ahead and partition the table
, /
IF RETROWS = 1 THEN
/ *
* Take the current date at 00:00:00 and add HOURLYINTERVAL to it. This is the timestamp below which we will store values.
* We begin partitioning based on the beginning of a day. This is because we don't want to generate a random partition
* that won't necessarily fall in line with the desired partition naming (ie: if the hour interval is 24 hours, we could
* end up creating a partition now named "p201403270600" when all other partitions will be like "p201403280000").
, /
SET FUTURE_TIMESTAMP = TIMESTAMPADD (HOUR, HOURLYINTERVAL, CONCAT (CURDATE (), "", '00lv 0000'))
SET PARTITION_NAME = DATE_FORMAT (CURDATE (),'p% Y% m% d% H00')
-- Create the partitioning query
SET @ _ PARTITION_SQL = CONCAT ("ALTER TABLE", SCHEMANAME, ".", TABLENAME, "PARTITION BY RANGE (`clock`)")
SET @ _ _ PARTITION_SQL = CONCAT (@ _ _ PARTITION_SQL, "(PARTITION", PARTITION_NAME, "VALUES LESS THAN (", UNIX_TIMESTAMP (FUTURE_TIMESTAMP), ");)
-- Run the partitioning query
PREPARE STMT FROM @ _ _ PARTITION_SQL
EXECUTE STMT
DEALLOCATE PREPARE STMT
END IF
END$$
DELIMITER
-- maintain stored procedures for all of the above stored procedures
DELIMITER $$
CREATE PROCEDURE `partition_maintenance_ all` (SCHEMA_NAME VARCHAR (32))
BEGIN
CALL partition_maintenance (SCHEMA_NAME, 'history', 28,24,14)
CALL partition_maintenance (SCHEMA_NAME, 'history_log', 28,24,14)
CALL partition_maintenance (SCHEMA_NAME, 'history_str', 28,24,14)
CALL partition_maintenance (SCHEMA_NAME, 'history_text', 28,24,14)
CALL partition_maintenance (SCHEMA_NAME, 'history_uint', 28,24,14)
CALL partition_maintenance (SCHEMA_NAME, 'trends', 730,24,14)
CALL partition_maintenance (SCHEMA_NAME, 'trends_uint', 730,24,14)
END$$
DELIMITER
4. The method of calling stored procedure
-- separate calls to maintain a table to create, delete, and add partition stored procedures
Syntax format:
CALL partition_maintenance (',',)
Description:
Zabbix_db_name: name of the database
Table_name: the name of the table to create the partitioned table
Days_to_keep_data: the number of days to save partition table data. Partitioned tables exceeding this number of days will be deleted (in days)
Hourly_interval: how many hours do you create a partition (in hours)
Num_future_intervals_to_create: create several partitions at a time
Case study:
CALL partition_maintenance ('zabbix',' history', 28, 24, 14);-- create a partition on the history table of the zabbix database, keep the data for 28 days, create a partition every 24 hours, and create 14 partitions at a time
-- call stored procedures that maintain predefined table creation, deletion, and additional partitions
CALL partition_maintenance_all ('zabbix')
5. Housekeeper self-maintenance function is turned off.
There are a couple more steps that need to be done on the Zabbix Web UI on 2.2.x (or the zabbix_server.conf file in the case of Zabbix 2.0.x) to shut off housekeeping on the history/trend tables.
Zabbix 2.0.x (this version can simply turn off all Housekeeper functions)
For those of you still stuck using the 2.0.x series of Zabbix there is no way to disable specific functionality of the housekeeper. You will have to disable the housekeeper entirely. This can be done by setting the "DisableHousekeeping" parameter in zabbix_server.conf to "1". You then need to restart the zabbix_server process. Keep in mind that with the housekeeper disabled, data in the "housekeeper" table in the database will never be removed. Also, old events, audit entries, and user sessions will never be deleted automatically.
Zabbix 2.2.x (this version can turn off some Housekeeper functions)
Zabbix 2.2 introduced more granular control over the housekeeper. All of the options are available in the Zabbix UI in the "Administration"-> "General" section. Make sure you select "Housekeeping" in the drop-down in the upper right. You should see a screen similar to the following:
Make sure that the checkboxes with the title "Enable internal housekeeping" are unchecked for both History and Trends.
Make sure that the checkboxes with the title "Override item period" are checked for both History and Trends.
Set the "Data storage period (in days)" box for history and trends to the amount of time you are retaining both. In the examples that were given, the correct values are 28 and 730 (as seen in the screenshot).
6. create a scheduled task and automatically partition a scheduled alignment.
01 01 * / opt/software/mysql/bin/mysql-uzabbix-pzabbix zabbix-e "CALL partition_maintenance_all ('zabbix');"
-- at this point, the zabbix history table partition ends
7. Description information
-- four main stored procedures
Partition_create-This will create a partition on the given table in the given schema.
Partition_drop-This will drop partitions older than the given timestamp on the given table in the given schema.
Partition_maintenance-This function is what is called by users. It is responsible for parsing the given parameters and then creating/dropping partitions as needed.
Partition_verify-Checks if partitioning is enabled on the given table in the given schema. If it is not enable, it creates a single partition.
-- interpretation of four stored procedure parameters
Partition_create
Procedure definition: partition_create (SCHEMANAME varchar (64), TABLENAME varchar (64), PARTITIONNAME varchar (64), CLOCK int
Example: CALL partition_create ("zabbix", "history", "p20131216", 1387267200)
SCHEMANAME = The DB schema in which to make changes
TABLENAME = The table on which to create PARTITIONNAME
PARTITIONNAME = The name of the partition to create
CLOCK = PARTITIONNAME will be created to hold values with a "clock" column value less than this
Partition_drop
Procedure definition: partition_drop (SCHEMANAME VARCHAR (64), TABLENAME VARCHAR (64), DELETE_BELOW_PARTITION_DATE VARCHAR (64)
Example: CALL partition_drop ("zabbix", "history", "20131216")
SCHEMANAME = The DB schema in which to make changes
TABLENAME = The table on which to delete PARTITIONNAME
DELETE_BELOW_PARTITION_DATE = The oldest partition date to allow. All partitions older than this date will be deleted. The format is yyyymmdd.
Partition_maintenance
Procedure definition: partition_maintenance (SCHEMA_NAME VARCHAR (32), TABLE_NAME VARCHAR (32), KEEP_DATA_DAYS INT, HOURLY_INTERVAL INT, CREATE_NEXT_INTERVALS INT)
Example: CALL partition_maintenance ('zabbix',' history', 28, 24, 14)
SCHEMA_NAME = The DB schema in which to make changes
TABLE_NAME = The table on which to make changes
KEEP_DATA_DAYS = The maximum number of days worth of partitions to keep. All partitions older than this number of days will be deleted.
HOURLY_INTERVAL = The hourly interval between partitions. For example, daily partitioning would have a value of 24, hourly partitioning would have a value of 1.
CREATE_NEXT_INTERVALS = The number of intervals worth of partitions to create in advance.
Partition_verify
Procedure definition: partition_verify (SCHEMANAME VARCHAR 64), TABLENAME VARCHAR 64, HOURLYINTERVAL INT 11)
Example: CALL partition_verify ("zabbix", "history")
SCHEMANAME = The DB schema in which to make changes
TABLENAME = The table on which to check for partitions
HOURLY_INTERVAL = The hourly interval between partitions. For example, daily partitioning would have a value of 24, hourly partitioning would have a value of 1.
8. Partition reference documentation
Https://www.zabbix.org/wiki/Docs/howto/mysql_partition
Welcome to subscribe "Shulou Technology Information " to get latest news, interesting things and hot topics in the IT industry, and controls the hottest and latest Internet news, technology news and IT industry trends.
Views: 0
*The comments in the above article only represent the author's personal views and do not represent the views and positions of this website. If you have more insights, please feel free to contribute and share.
Continue with the installation of the previous hadoop.First, install zookooper1. Decompress zookoope
"Every 5-10 years, there's a rare product, a really special, very unusual product that's the most un
© 2024 shulou.com SLNews company. All rights reserved.