MySQL故障排查与生产环境优化

本文详细探讨了MySQL数据库的单实例常见故障及其解决方案,包括连接问题、权限错误、性能瓶颈等,并涉及主从环境的同步故障处理。同时,文章也涵盖了MySQL的优化策略,如硬件选型、配置调整、SQL优化以及架构设计建议。
摘要由CSDN通过智能技术生成

一、MySQL逻辑架构图

  • 客户端和连接服务

  • 核心服务功能

  • 存储引擎层

  • 数据存储层


二、MySQL单实例常见故障

  2.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'@'localhost'(using password:NO)

    问题分析

  • 密码不正确或者没有权限访问

    解决方法

  • 修改my.cnf主配置文件,在[mysqld]下添加skip-grant-tables
    • update更新user表authentication_string字段
    • 重新授权

  2.3 故障三

    故障现象

在使用远程连接数据库时偶尔会发生远程连接数据库很慢的问题

    问题分析

  • DNS解析慢、客户端连接过多

    解决方法

  • 修改my.cnf主配置文件(增加skip-name-resolve参数)
  • 数据库授权禁止使用主机名

  2.4 故障四

    故障现象

Can't opeb file:'xxx_forums.MYI'.(errno:145)

    问题分析

  • 服务器非正常关机,数据库所在空间已满,或一些其他位置原因
  • 对数据库表造成了损坏:例如磁盘空间满,数据库关机
  • 因拷贝数据库导致文件的数组发生改变,例如:用root数据迁移时,属组可能会发生改变

    解决方法

  • 修复数据表(myisamchk、phpMyAdmin)
  • 修改文件的属组

  2.5 故障五

    故障现象

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_errors=1000)

  2.6 故障六

    故障现象

Too many connections

    问题分析

  • 连接数超出MySQL的最大连接限制

    解决方法

  • 修改MySQL配置文件(max_connections=1000)

    临时修改参数

set GLOBAL max_connections=10000;                //设置全局最大连接数为10000

  2.7 故障七

    故障现象

Warning:World-writable config file '/etc/my.cnf' is ignored ERROR!MySQL is runnning but PID file could not be found

    问题分析

  • MySQL的配置文件/etc/my.cnf权限问题

    解决方法

chmod 644 /etc/my.cnf

   2.8 故障八

    故障现象

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)
  • 启动数据库后备份数据文件
  • 利用备份文件恢复数据

问题:一张表高达几十个G,如何优化?

我们可以通过分库分表


三、MySQL主从环境常见故障

  3.1 故障一

    故障现象

    从库的Slave_IO_Running为NO

The slave I/O thread stopsbecause master and slave have equal MySQL server ids;thease 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).

    问题解析:主库和从库的server-id值一样

    解决方法:

  • 修改从库的server-id的值,修改为和主库不一样
  • 重新启动数据库并在此同步

  3.2 故障二

    故障现象:从库的Slave_IO_Running为NO

    问题分析:主键冲突或者主库删除或更新数据,从库内找不到记录,数据被修改导致

    解决方法:

方法一:

stop slave;
​
set GLOABL SQL_SLAVE_SKIP_COUNTER=1;
​
start slave;

方法二

set global read_only=true;

  3.3 故障三

    故障现象

Error initializing relay log position:I/O error reading the header from the binary log

    问题分析

  • 从库的中继日志relay-bin损坏

    解决方法

  • 解决修复,重新找到同步的binlog和pos点,然后重新同步即可

CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.xxx',MASTER_LOG_POS=xxx;


四、 MySQL优化

  4.1 硬件优化

  • CPU:推荐使用S.M.P架构的多路对称CPU

  • 内存:4G以上的物理内存

  • 磁盘:RAID-0+1磁盘阵列或固态硬盘

  4.2 MySQL配置文件优化

  • 调整配置项

  4.3 SQL优化

  • 尽量使用索引进行查询

  • 优化分页

  • GROUP BY优化

  4.4 MySQL架构优化

  • 架构选择:主从、主主、一主多从、多主多从
  • 21
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值