案例
MySQL是目前企业最常见的数据库之一
日常维护管理的过程中,会遇到很多故障
mysql默认配置无法满足高性能要求
数据流向
MySQL常见的故障案例
故障一
故障现象:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket 'data/mysql/mysql.sock'(2)
问题分析
数据库未启动或者数据库端口被防火墙拦截;
解决办法
启动数据库或者防火墙开放数据库监听端口;
故障二
故障现象
ERROR 1045 (28000): Access denied for user 'root'@'ocalhost' (using password:NO)
问题分析
密码不正确或者没有访问权限
解决办法
修改my.cnf主配置文件,在[mysql]下添加 skip-grant-tables
update 更新 user表 authentication_string 字段
重新授权
故障三
故障现象
在使用远程连接数据库时偶尔会发生远程连接数据库很慢的问题
问题分析
DNS解析慢、客户端连接过多
解决办法
修改my.cnf主配置文件(增加skip-name-resolve参数)
数据库授权禁止使用主机名
故障四
故障现象
Can't open file: 'xxx_forums.MYI'.(errno:145)
问题分析
服务器非正常关机;数据库所在空间已满;或一些其他未知的原因对数据库表造成了损坏
一般是磁盘空间满了;文件属组不对
可能是拷贝数据库时导致文件的属组发生改变
解决办法
修复数据表(myisamchk、phpMyAdmin)
修改文件的属组
故障五
故障现象
ERROR 1129 (HY000): Host 'xxx.xxx.xxx.xxx' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'
问题分析
超出最大连接错误,数量限制
解决办法
清理缓存(flush-hosts关键字)
修改mysql配置文件(max_connect_error=1000)
200连接数改为1000
故障六
故障现象
Too many connections
问题分析
连接数超出MySQL的最大连接限制
解决办法
修改MySQL配置文件(max_connections = 1000)
临时修改参数
set GLOBAL max_connrctions=1000;
故障七
故障现象
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 /etc/my.cnf
故障八
故障现象
InnoDB:Error: page 14178 log sequence number 29455369832
InnoDB: is in the future! Current system log sequence number 29455369832
问题分析
innodb数据文件损坏
解决办法
修改my.cnf 配置文件(innodb_force_recovery=4)
启动数据库后备份数据文件
利用备份文件恢复数据
最好是建新表,将还原数据导入新表,给甲方确认
MySQL主从环境常见故障
故障一
故障现象
从库的Slave_IO_Runing为NO
The slave I/O 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 sense; please check the manual before using it).
问题分析
主库和从库或从库1和从库2的server-id值一样
解决办法
修改从库的server-id 的值,修改为和主库以及其他从库不一样
重新启动数据库并再次同步
故障二
故障现象
从库的Slave_IO_Running 为NO
问题分析
主键冲突或者主库删除或更新数据,从库内找不到记录,数据被修改导致
解决办法
方法一:
mysql> stop slave;
mysqI> set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
mysql> start slave;
方法二:
set global read_only=true;
故障三
故障现象
Error initializing relay log position: l/O error reading the header from the binary log
问题分析
从库的中继日志relay-bin损坏
解决办法
手工修复,重新找到同步的binlog 和 pos点,然后重新同步即可
mysqI> CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.xxx',MASTER_LOG_POS=xxx;
MySQL优化
硬件优化
CPU:推荐使用S.M.P.架构的多路对称CPU
内存:4GB以上物理内存
磁盘:RAID-0+1 磁盘阵列或固态硬盘
MySQL配置文件优化
调整配置项
数据库建议内存是8核8G或者16G;商城最小要8核32G,还要做MHA高可用
SQL优化
尽量使用索引进行查询
优化分页
GROUP BY优化
MySQL架构优化
架构选择:主从、主主、一主多从、多主多从
小结:
MySQL逻辑架构
MySQL故障排查
MySQL优化技术