我想通它寫出來的一些指引,以幫助大家了解自己的MySQL服務器的不同方面,可能會有所幫助。
這個數據已經收集到隨著時間的推移,我會盡我所能,參考文章。 總體考慮在這裡列出你最好的信息來源:
- MySQL文檔:dev.mysql.com / DOC
- Percona的性能博客
- planet.mysql.com
- forums.mysql.com
- 蒙蒂知識庫kb.askmonty.org / EN /
- http://lists.mysql.com/
你知不知道到數據庫的密碼? 如果它不使用mysql_config_editor(前5.6)你可以做一個小挖找出來。 否則,你必須重新啟動它,並迫使自己的方式。我們假設你不想重新啟動它。 如果你必須弄清楚如何使用-跳過發放表檢討以前的一些博客文章的例子: http://anothermysqldba.blogspot.com/search/label/--skip-grant-tables
因此,首先一些放在尋找密碼。 這也意味著,如果你做這些人以後可以找到密碼。
- 找出是否有人在命令行上使用的密碼。
- 歷史| grep的mysql的
- 的的crontab-l
- 如果你看到備份腳本或等這些腳本輸入密碼
- my.cnf中定位。
- bash_history的貓| grep的mysql的
- 嘗試的mysql沒有密碼的,但當然希望是你的盒子是安全的。
- 隨著MySQL 5.6的檢查,如果你已經有一個配置的帳戶
- mysql_config_editor打印 - 所有
跳轉到MySQL服務器之前先知道一點關於你的服務器。
這些信息有些你可能只知道,但為了安全起見。
例如在Linux系統上運行以下操作系統,發行版,內存,磁盤信息。
- 貓的/ etc / *釋放
- uname-a的
- DF-啊
- 安裝
- 自由米
- 頂部
- 超過這個職位的Swappiness資訊http://www.mysqlplus.net/tag/swappiness/
- 你有一個特定的cnf的文件正在使用?
- 用ps-ef | grep的MYSQL | grep的CNF
- DATADIR:
- 用ps-ef | grep的MYSQL | grep的DATADIR
所以,現在跳轉到MySQL服務器,並開始收集一些數據。 my.cnf文件審查雖然可以給你的大部分信息,你還可以收集從服務器。
show variables like '%log%';
看在你的錯誤(ERR)文件審查任何問題。 這應該是一個地方,你看一個錯誤後啟動等
因此,如何在服務器上運行? 為了迅速收集以下運行狀態的命令。
- 版本
- 主題
- 問題
- 慢速查詢
- 打開
- FLUSH TABLES
- 打開表
- 平均每秒查詢
mysql> status
“mysqladmin的擴展狀態”命令,也可以給你的信息,但在服務器內使用grep也是有效的。
密切留意以下信息。
這也被張貼在這裡http://www.techrepublic.com/blog/opensource/10-mysql-variables-that-you-should-monitor/56
您可以查看帖子中提到,看到一個漂亮的表,解釋了一些這些值。 這些都是我想你應該留意雖然。
> show status like 'Handler_read_first';
> show status like 'Key_reads';
> show status like 'Select_full_join';
找出您的查詢運行速度慢的百分比整體。 希望這是一個小數目。
使用狀態信息來填充這些變量進行快速檢查。
set @slow_queries=<value in the status output>;
set @questions=<value in the status output>;
SELECT ROUND(100* (@slow_queries / @questions),2) "Slow Query percentage" \G
學習了解的輸出:SHOW ENGINE INNODB STATUS \ G
盯緊死鎖信息,這樣你就可以開始調試那些。
您的系統是否有觸發器,事件的存儲過程?
mysql> SELECT db, name FROM mysql.proc;
mysql> SELECT TRIGGER_SCHEMA , TRIGGER_NAME FROM information_schema.TRIGGERS ;
mysql> SELECT EVENT_NAME FROM information_schema.EVENTS ;
知道你的服務器變量
show variables like '%innodb%';
show variables like '%thread%';
show variables like '%table%';
show variables like '%buffer%';
show variables like '%cache%';
檢查您的用戶帳戶。
它們都具有有效的密碼。
SELECT Host, User ,
CASE
WHEN CHARACTER_LENGTH(Password) = 16 THEN 'Pre-4.1 I should update this'
WHEN CHARACTER_LENGTH(Password) > 16 THEN 'Valid password'
WHEN CHARACTER_LENGTH(Password) =0 THEN ' BLANK PASSWORD so I just do not care if people steal my stuff'
END as Password
FROM mysql.user;
了解你的InnoDB日誌文件,並想出一個良好的緩衝池大小。
男爵張貼在這裡: http://www.mysqlperformanceblog.com/2008/11/21/how-to-calculate-a-good-innodb-log-file-size/
閱讀他的文章,以了解更多有關。 下面是一個例子,如何使用此信息。 我用他的號碼的例子幫助。 像男爵說,運行在交通繁忙時得到有效的信息。
mysql>pager grep sequence; show engine innodb status\G select sleep(60); show engine innodb status\G pager;
mysql>SET @sequence1= 3836410803;
mysql>SET @sequence2= 3838334638;
mysql>select ( ( (@sequence2 - @sequence1) / 1024 / 1024 )* 60 ) /2 as innodb_log_file_size_used ;
mysql>select (@@innodb_log_file_size / 1024) / 1024 as current_log_file_MB_size;
緩衝池大小。
雖然下面的查詢周圍網發布,並給出一個有效的緩衝池起點,我也看到了一些無效的或不切實際的數字,根據它的服務器上。 就個人而言,檢討的結果,下面的查詢。 高峰流量和金額數據發送到每男爵後的日誌審查結果。 然後考慮你有多少內存在服務器上。 你的數據庫在內存中運行的速度就越快,得到的結果,但你必須考慮到,什麼是數據庫做。 所以,你必須使用自己的緩衝池的大小,以獲得良好的價值判斷和研究。 另一個選項可以使用tools.percona.com,回答問題,並看看它會告訴你什麼。
mysql>select ( ( (@sequence2 - @sequence1) / 1024 / 1024 )* 60 ) *2 as innodb_buffer_pool_GB_test ;
mysql>SELECT CONCAT(ROUND(KBS/POWER(1024,
IF(PowerOf1024<0,0,IF(PowerOf1024>3,0,PowerOf1024)))+0.49999),
SUBSTR(' KMG',IF(PowerOf1024<0,0,
IF(PowerOf1024>3,0,PowerOf1024))+1,1)) recommended_innodb_buffer_pool_size
FROM (SELECT SUM(data_length+index_length) KBS FROM information_schema.tables
WHERE engine='InnoDB') A,
(SELECT 3 PowerOf1024) B \G
接下來,你應該檢討這個開放方舟博客文章挖成索引等。 該帖子和網站整體的大的信息。
http://code.openark.org/blog/mysql/useful-database-analysis-queries-with-information_schema
挖掘到更多有關服務器的數據....
什麼是最古老的表,也許需要存檔這些嗎?
SELECT CONCAT(`TABLE_SCHEMA`, "." , `TABLE_NAME`) as name , `UPDATE_TIME`
FROM information_schema.TABLES
WHERE TABLE_SCHEMA NOT IN
('information_schema','mysql','test','performance_schema') AND
`UPDATE_TIME` IS NOT NULL ORDER BY `UPDATE_TIME` LIMIT 25;
什麼是空間?
SELECT concat(table_schema,'.',table_name) table_name,
concat(round(data_length/(1024*1024),2),'M') data_length
FROM information_schema.TABLES
ORDER BY data_length DESC LIMIT 5;
這僅僅是一個起點,讓你了解正在發生的事情與您的服務器。 使用本網站列出的網站了解更多信息。