Mysql问题排查文档 - thomas0yang的专栏 - 博客频道 - CSDN.NET http://blog.csdn.net/thomas0yang/article/details/8175339
1. Mysql问题归类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/81753613.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.sqlb) 停止数据库 /etc/init.d/mysql stopc) 卸载数据库 emerge --unmerge mysqld) 安装数据库 参照http://wiki.uuwatch.com:8081/display/dev/Gentoo+MySQLe) 进入mysql,创建数据库,导入数据source /home/db/db_TQ_1103.sql2、 重建数据库a) 备份数据库,如果不能正常启动,在/etc/my.cnf中写入innodb_force_recovery = 4b) Mysql启动下删除数据库或者关闭情况下备份数据库路径下的数据库名字的文件夹,之后删除c) 重命名ibdata1表空间文件和ib_logfile0、ib_logfile1重做日志文件。d) 恢复参数,启动数据库,新建数据库,导入数据http://blog.csdn.NET/thomas0yang/article/details/8112257