1.1 SQL類問題
這類問題通常是由用戶習慣不好導致的問題,比如大表沒有索引,SQL語句不規範等。查找到錯誤的sql,修改處理。
1.2 配置類問題
這類問題屬於mysql數據庫的配置不合理的問題,導致數據庫操作較慢。需要修改響應配置。
1.3 BUG類問題
這類問題比較少見,碰到了mysql的bug,需要根據錯誤日誌或者網絡查詢解決。
2. Mysql問題排查流程
2.1 Mysql慢
1、 進入mysql,執行命令show processlist或者105上使用navicat工具,工具->服務器監控,查看正在運行的sql;
2、 如果有運行時間較長的sql,需要關注分析。如果有問題,修改。
3、 查看慢查詢日誌,一般在/var/lib/mysql/下,slow.log是文本文件,可以直接查看執行慢的sql,分析處理。
2.2 Mysql宕掉
1、 查看錯誤日誌。tail –f /var/log/mysql/mysqld.err。根據錯誤日誌進行分析處理。
2、 重啓mysql。如果還有問題在根據運行的錯誤日誌在進行處理。
3. Mysql問題提前預防
最關鍵的還是在mysql平時的維護,減少問題情況的發生。
3.1 建表覈查
建表有一套基本的需要遵守的規則,參照:
l 必須指定主鍵。
若不指定主鍵,InnoDB會用唯一且非空值索引代替。
l 儘量不用外鍵。
由程序端保證約束。
l 保持表身段苗條。建議單表字段數上限控制在20~50個。
l 合理選擇字段類型。
l 避免使用NULL字段。
很難進行查詢優化,NULL列加索引需要額外空間,含NULL複合索引無效。
l 少用並拆分TEXT/BLOB。
l 分析正式表的數據量。
如果數據量只增不減,儘量避免使用mysql。建議數據量不超過千萬,否則會影響性能。
l 收集經常操作表的sql語句。
1、經常用的字段增加索引
2、避免一個語句操作過多數據行。如:update 。。。 where N_GROUP=1,發現需要更改的數據行超過100;需要分頁操作。
3.2 日常檢查
如果有專職DBA,每天檢查數據庫運行狀況;
如果無專職,可以每週檢查運行狀況。
檢查文檔:http://blog.csdn.net/thomas0yang/article/details/8175361
3.3 基礎普及
需要對開發人員進行基本的數據庫使用操作知識普及,減少不規範的問題的出現。
如:
http://blog.csdn.net/thomas0yang/article/details/8153507
http://blog.csdn.net/thomas0yang/article/details/8112257
4. 極端問題處理經驗
1、 重裝數據庫
a) 備份數據庫 mysqldump -uusername -ppassword databasename tablename > /home/db/db_TQ_1103.sql
b) 停止數據庫 /etc/init.d/mysql stop
c) 卸載數據庫 emerge --unmerge mysql
d) 安裝數據庫 參照http://wiki.uuwatch.com:8081/display/dev/Gentoo+MySQL
e) 進入mysql,創建數據庫,導入數據source /home/db/db_TQ_1103.sql
2、 重建數據庫
a) 備份數據庫,如果不能正常啓動,在/etc/my.cnf中寫入innodb_force_recovery = 4
b) Mysql啓動下刪除數據庫或者關閉情況下備份數據庫路徑下的數據庫名字的文件夾,之後刪除
c) 重命名ibdata1表空間文件和ib_logfile0、ib_logfile1重做日誌文件。
d) 恢復參數,啓動數據庫,新建數據庫,導入數據
http://blog.csdn.net/thomas0yang/article/details/8112257