MySQL故障排除与生产环境优化
一、案例实施:MySQL单实例常见故障
故障1
1、故障现象
ERROR 2002 (HY000): Can’t connect to local MySQL server through socket "/data/mysq/mysql.sock’ (2)
2、问题分析
数据库未启动或者数据库端口被防火墙拦截
3、解决方法
启动数据库或者防火墙开放数据库监听端口
故障二
1、故障现象
ERROR 1045 (28000): Access denied for user 'root @'localhost (using password:NO)
2、问题分析
密码不正确或者没有权限访问
3、解决方法
修改my.cnf主配置文件,在[mysqld] 下添加skip-grant tables
- update更新user表authentication_ string字段
- 重新授权.
故障三
1、故障现象
在使用远程连接数据库时偶尔会发生远程连接数据库很慢的问题
2、问题分析
DNS解析慢、客户端连接过多
3、解决方法
- 修改my.cnf主配置文件(增加skip-name-resolve参数)
- 数据库授权禁止使用主机名
故障四
1、故障现象
Can’t open file: ‘xxX_ forums.MYI’. (errmno: 145)
2、问题分析
- 服务器非正常关机,数据库所在空间已满,或一一些其它未知的原因,对数据库表造成了损坏
- 因拷贝数据库导致文件的属组发生变化
3、解决方法
- 修复数据表(myisamchk、 phpMyAdmin)
- 修改文件的属组
故障五
1、故障现象
ERROR 1129 (HY000): Host xxx.oxx.xxx.xxx is blocked because of many connection errors; unblock with ‘mysqladmin flush-hosts’
2、问题分析
超出最大连接错误数量限制
3、解决方法
- 清除缓存(flush-hosts关键字)
- 修改mysq|配置文件(max_ connect_ errors=1000)
故障六
1、故障现象
Too many connections
2、问题分析
连接数超出MySQL的最大连接限制
3、解决方法
- 修改MySQL配置文件(max_ connections = 10000)
- 临时修改参数:set GLOBAL max_ connections= 10000;
故障七
1、故障现象
Warning: World-writable config file /etc/my.cnf is ignored ERROR! MySQL is running but PID file could not be found
2、问题分析
MySQL的配置文件/etc/my.cn权限问题
3、解决方法
chmod 644 /etc/my.cnf
故障八
1、故障现象
InnoDB: Error: page 14178 log sequence number 29455369832
InnoDB: is in the future! Current system log sequence number 29455369832
2、问题分析
innodb数据文件损坏
3、解决方法
修改my.cnf配置文件(innodb_ force_recovery=4)
启动数据库后备份数据文件
利用备份文件恢复数据
二、案例实施:MySQL主从环境常见故障
故障一
1、故障现象
从库的Slave_ I0_ Running为NO
The slave I/O thread stops because master and slave have equal MySQL server ids; 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).
2、问题分析:
主库和从库的server-id值一样
3、解决方法
- 修改从库的server-id的值, 修改为和主库不一样
- 重新启动数据库并再次同步
故障二
1、故障现象:
从库的Slave_ I0_ Running为NO
2、问题分析:
主键冲突或者主库删除或更新数据,从库内找不到记录,数据被修改导致
3、解决方法
- 方法一
mysql> stop slave;
mysql> set GLOBAL SQL_SLAVE_ SKIP_COUNTER=1;
mysql> start slave; - 方法二
set global read_ only=true;
故障三
1、故障现象
Error initializing relay log position: 1/0 error reading the header from the binary log
2、问题分析
从库的中继日志relay-bin损坏
3、解决方法
手工修复,重新找到同步的binlog和pos点,然后重新同步即可
mysql> CHANGE MASTER TO MASTER_LOG_FILE=‘mysql-bin.xx’,MASTER_LOG_POS=xxx;
三、案例实施:MySQL优化
1、硬件优化
- CPU:推荐使用S.M.P.架构的多路对称CPU
- 内存: 4GB以上的物理内存
- 磁盘: RAID-0+1磁盘阵列或固态硬盘
2、MySQL配置文件优化
- 调整配置项
3、SQL优化
- 尽量使用索弓|进行查询
- 优化分页
- GROUP BY优化
4、MySQL架构优化
- 架构选择:主从、主主、一主多从、多主多从