溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

zabbix 一次慘痛的分區(qū)經(jīng)歷

發(fā)布時間:2020-07-26 10:17:10 來源:網(wǎng)絡(luò) 閱讀:1969 作者:Ohimma 欄目:MySQL數(shù)據(jù)庫

問題

今天來到公司,像往常一樣打開zabbix,突然發(fā)現(xiàn)沒有數(shù)據(jù)被收集,于是快速檢查了其他的圖形,發(fā)現(xiàn)都沒有數(shù)據(jù),于是定位到了服務(wù)端的問題,檢查日志發(fā)現(xiàn):zabbix日志突然報查詢history和history_uint失敗,分區(qū)里找不到這個 clock?zabbix  一次慘痛的分區(qū)經(jīng)歷

解決過程

以下僅是以history為例的解決路線,暫不探討history_unit

  1. 初次認(rèn)知是分區(qū)問題,分區(qū)不夠了,開始在網(wǎng)上查分區(qū)創(chuàng)建方法 
    alter table history partition by range (clock)(partition p1 values less than MAXVALUE); 
    在此我給了MAXVALUE一個很大的值,執(zhí)行了20分鐘沒有執(zhí)行完,發(fā)現(xiàn)這種方式不行

  2. 檢查是不是設(shè)置了自動分區(qū) 
    show create table history; 
    發(fā)現(xiàn)有一大堆以clock的分區(qū),發(fā)現(xiàn)clock是日期,正好是今天凌晨,而一上午沒有生成分區(qū),所以導(dǎo)致數(shù)據(jù)存不進去。知道了原因,先解決,先不探討為什么有自動分區(qū)的問題。

    zabbix  一次慘痛的分區(qū)經(jīng)歷

  3. 發(fā)現(xiàn)問題了,就先解決問題,創(chuàng)建分區(qū)吧 
    CALL partition_create("zabbix", "history", "p201706140000", 1497456000); 
    提示沒有這個partition_create存儲過程,所以無法執(zhí)行,挺納悶,先不解決這個; 
    創(chuàng)建這個存儲過程,建議參考:https://www.zabbix.org/wiki/Docs/howto/mysql_partition#partition_create ( 網(wǎng)上不靠譜的太多了) 
    進入數(shù)據(jù)庫執(zhí)行下面語句:(root登錄,不知道有沒有影響)

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 ;

然后執(zhí)行創(chuàng)建 
zabbix  一次慘痛的分區(qū)經(jīng)歷

ok,此時把不存在分區(qū)的表都創(chuàng)建上,然后重啟zabbix。

  1. 現(xiàn)在要查找問題的原因了 
    因為前面處理zabbix的同事,做了分區(qū)分表,然后又在cron內(nèi)設(shè)置了定時任務(wù),定時添加幾天的表區(qū) mysql -uzabbix -pxxx -e "CALL partition_maintenance_all('zabbix');" 因為我接手后,不知道這是什么,把zabbix服務(wù)器歸納整理后,mysql密碼變了,執(zhí)行不了了,消耗了一上午的時間,不過清晰了zabbix分區(qū)過程,也是有收獲的

  2. 現(xiàn)在要開始總結(jié)下分區(qū)分表了 
    查看存儲過程:select specific_name from mysql.proc ; 
    查看過程邏輯:show create procedure partition_create \G 
    刪除存儲過程:drop procedure if exists partition_maintenance_all ; 
    查看存儲過程:show procedure status like 'partition_maintenance%' \G; 
    修改存儲過程:ALTER {PROCEDURE|FUNCTION} sp_name [characteriss] 根據(jù)官方文檔,創(chuàng)建存儲過程,包括:create、drop、maintenance、verify、maintenance_all 最好根據(jù)自身情況對maintenance_all,進行修改,用于減輕數(shù)據(jù)庫壓力;

DELIMITER $$CREATE PROCEDURE `partition_maintenance_all`(SCHEMA_NAME VARCHAR(32))BEGIN
    CALL partition_maintenance(SCHEMA_NAME, 'history', 15, 24, 7);
    CALL partition_maintenance(SCHEMA_NAME, 'history_log', 30, 24, 7);
    CALL partition_maintenance(SCHEMA_NAME, 'history_str', 30, 24, 7);
    CALL partition_maintenance(SCHEMA_NAME, 'history_text', 30, 24, 7);
    CALL partition_maintenance(SCHEMA_NAME, 'history_uint', 15, 24, 7);
    CALL partition_maintenance(SCHEMA_NAME, 'trends', 60, 24, 7);
    CALL partition_maintenance(SCHEMA_NAME, 'trends_uint', 60, 24, 7);END$$
DELIMITER ;
  1. 最后做項收尾工作 
    為了避免我們經(jīng)常去執(zhí)行創(chuàng)建刪除過程,創(chuàng)建刪除分區(qū),我們要充分利用partition_maintenance_all存儲過程,加入cron中 ,每周一八點執(zhí)行一次,創(chuàng)建及刪除過程
    0 8 1 * * mysql -uroot -pxxx zabbix -e "CALL partition_maintenance_all('zabbix');"


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI