Mysql
表中的數據庫增長 - MySQL
我想每天將特定數據庫的數據庫大小儲存到一個表中,這將有助於了解數據庫在一段時間內的增長。
SELECT table_schema AS "Database", ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) AS "Size (MB)" FROM information_schema.TABLES where table_schema = 'testdb' GROUP BY table_schema;
我得到上述查詢的輸出,例如 10456.3。
我需要將此數字插入應包含三列的表中。數據庫名稱、日期和數據庫大小。
我怎樣才能通過自動化每天做到這一點?
如果您將它儲存到您正在測量的同一個數據庫中,您可以使用 MySQL 計劃事件在特定時間執行查詢。
一個例子是:
DELIMITER $$ CREATE EVENT IF NOT EXISTS db_measurement ON SCHEDULE EVERY 1 DAY STARTS '2016-11-15 00:00:00' ENABLE DO INSERT INTO tableName SELECT table_schema AS "Database", ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) AS "Size (MB)" FROM information_schema.TABLES where table_schema = 'testdb' GROUP BY table_schema$$ DELIMITER ;
如果它是不同的數據庫,則需要使用某種 shell 腳本。
請記住,我遠非 Linux 專家(忽略圍繞
permissions
,passwords in scripts
等的討論SSL
),您可以執行以下操作:mysql -hxxxx -Pxxxx -uxxxx -pxxxx -se"SELECT ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) AS Size FROM information_schema.TABLES where table_schema = 'dbtest' GROUP BY table_schema;" | { read dbSizeVal; mysql -hxxxx -Pxxxx -uxxxx -pxxxx -e"INSERT INTO dbname.tablename VALUES(${dbSizeVal})"}
它從遠端數據庫中獲取大小值,並將其
should
載入到本地數據庫中的表中。我剛用過:
CREATE TABLE `tableName` ( `dbsize` varchar(45) NOT NULL );
進行測試,但您可能需要一個
decimal
,integer
,float
數據類型,具體取決於您返回的數據以及您需要它的準確性。這也不包括
dbname
ortime
欄位。您可以使用timeVal TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP
which 將為您提供時間戳欄位。數據庫名稱很棘手,因為您需要攜帶兩個變數,而我的腳本(上面)只允許一個(如果您只查看一個數據庫,您可以直接將其輸入到查詢中/設置預設值) .