MySQL是目前企业最常见的数据库之一日常维护管理的过程中,会遇到很多故障汇总了常见的故障,MySQL默认配置无法满足高性能要求
一 MySQL逻辑架构图
- 客户端和连接服务
- 核心服务功能
- 存储擎层
- 数据存储层
二 MySQL单实例常见故障
故障1
ERROR 2002 (HY000): Can't connect to local MySQL server through socket'/data/mysql/mysql.sock' (2)
问题分析
数据库未启动或者数据库端口被防火墙拦截
解决方法
启动数据库或者防火墙开放数据库监听端口
故障2
ERROR 1045 (28000): Access denied for user 'root@ocalhost' (using password:NO)
问题分析
密码不正确或者没有权限访问
解决方法
修改my.cnf主配置文件,在[mysqld]下添加skip-grant-tables
①update更新user表authentication string字段
②重新授权
故障3
故障现象
在使用远程连接数据库时偶尔会发生远程连接数据库很慢的问题
问题分析
DNS解析慢、客户端连接过多
解决方法
修改my.cnf主配置文件(增加skip-name-resolve参数数据库授权禁止使用主机名
故障4
Can't open file: 'xxx, forums.MYI.(errno: 145)
问题分析
服务器非正常关机,数据库所在空间已满,或一些其它未知的原因对数据库表造成了损坏
因拷贝数据库导致文件的属组发生变化
解决方法
修复数据表(myisamchk、phpMyAdmin)
修改文件的属组
故障5
故障现象
ERROR 1129 (HY000): Host xxx.xxx.xxx.xxx is blocked because of manyconnection
errors;unblock with 'mysgladmin flush-hosts'
问题分析
超出最大连接错误数量限制
解决方法
①清除缓存(flush-hosts关键字)
②修改mysql配置文件 (max_connect errors=1000)
故障6
故障现象
Too many connections
问题分析
连接数超出MySQL的最大连接限制
解决方法
①修改MySQL配置文件 (max connections = 10000)
②临时修改参数
set GLOBAL max connections=10000;
故障 7
Warning: World-writable config file '/etc/my.cnf' is ignored ERROR! MySQL is running but PID file could not be found
问题分析:
MySQL 的配置文件/etc/my.cnf 权限不对。
解决方法:
chmod 644 /et/my.cnf
故障8
故障现象
InnoDB: Error: page 14178 log sequence number 29455369832lnnoDB: is in the future! Current
system log sequence number 29455369832
问题分析
innodb数据文件损坏
解决方法
修改my.cnf配置文件(innodb_force_recovery=4)启动数据库后备份数据文件
利用备份文件恢复数据
三MySQL主从环境常见故障
故障一
故障现象
从库的Slave_IO_Running为NO
The slave l/0 thread stops because master and slave have equal MySQL serverids: these ids
must be different for replication to work (or the --replicate-same-server-id option must be used on
slave but this does not always make senseplease check the manual before using it).
问题分析:
主库和从库的server-id值一样
解决方法
①修改从库的server-id的值,修改为和主库不一样
②重新启动数据库并再次同步
故障现象 2
从库的 Slave_IO_Running 为 NO
问题分析:
造成从库线程为 NO 的原因会有很多,主要原因是主键冲突或者主库删除或更新数据,从库找不到记录,数据被修改导致。通常状态码报错有 1007、1032、1062、1452 等。
解决方法一:
mysql> stop slave; mysql> set GLOBAL SQL_SLAVE_SKIP_COUNTER=1; mysql> start slave;
解决方法二:
设置用户权限,设置从库只读权限
set global read_only=true;
故障 3
故障现象
Error initializing relay log position: l/O error reading the header from the binarylog
问题分析
从库的中继日志relay-bin损坏
解决方法
手工修复,重新找到同步的binlog和pos点,然后重新同步即可mysql> CHANGE MASTER TO
MASTER LOG FILE='mysql-bin.xxx,MASTER LOG POS=xxx;
四 MySQL优化
案例1
硬件优化
CPU:推荐使用S.MP架构的多路对称
CPU内存:4GB以上的物理
内存磁盘:RAID-0+1磁盘阵列或固态
硬盘
MySQL配置文件优化
调整配置项
案例 2
SQL优化
尽量使用索引进行查询
优化分页GROUP BY优化
MySQL架构优化
架构选择:主从、主主、一主多从、多主多从
调优思路:
- 分库分表思路和优劣
- my.cnf 内参数的优化
- MySQL服务优化--内存的使用,磁盘的使用
- 操作系统的优化--内核、TCP连接数量
- 磁盘 IO优化
- 数据的应用--怎样取数据,SQL语句的优化
- 数据库设计与规划--以后再修改很麻烦,估计数据量,使用什么存储引擎
- 硬件优化
硬件优化
CPU—— 64 位、高主频、高缓存,高并行处理能力内存——大内存、主频高,尽量不要用 SWAP
硬盘——15000转、RAID5、raid10 。 SSD
网络——标配的千兆网卡,10G网卡,bond0,MySQL服务器尽可能和使用它的web服务器在同一局域网内,尽量避 免诸如防火墙策略等不必要的开销
数据库设计与规划(架构上的优化)
纵向拆解: 专机专用
例:现在公司一台服务器同时负责 web、ftp、数据库等多个角色。 R720 dell 内存 :768G
纵向拆解后就是:数据库服务器专机专用,避免额外的服务可能导致的性能下降和不稳定性。
横向拆解: 主从同步、负载均衡、高可用性集群,当单个 MySQL 数据库无法满足日益增加的
需求时,可以考虑在数据库这个逻辑层面增加多台服务器,以达到稳定、高效的效果。
查询优化
建表时表结构要合理,每个表不宜过大;在任何情况下均应使用最精确的类型。例如,如果ID列用int是一个好主意, 而用text类型则是个蠢办法;TIME列酌情使用DATE或者DATETIME。
索引,建立合适的索引。
查询时尽量减少逻辑运算(与运算、或运算、大于小于某值的运算);
减少不当的查询语句,不要查询应用中不需要的列,比如说 select * from 等操作。
减小事务包的大小;
将多个小的查询适当合并成一个大的查询,减少每次建立/关闭查询时的开销;
将某些过于复杂的查询拆解成多个小查询,和上一条恰好相反
建立和优化存储过程来代替大量的外部程序交互。
磁盘 IO 规划,IO 相关的技术
raid 技术:raid0或raid10
SSD:
15000转、RAID5、raid10 。 SSD swap 分区:最好使用 raid0 或 SSD