突然间,个人网站崩溃了!相信这个报错作为运维都应该清楚的,是数据库宕机了。

数据库我采用mysql 5.1.63,上机查看错误日志:

171010 10:11:01 mysqld_safe Starting mysqld daemon with databases from /usr/local/mysql/var
171010 10:11:01 InnoDB: Initializing buffer pool, size = 512.0M
171010 10:11:01 InnoDB: Error: cannot allocate 536887296 bytes of
InnoDB: memory with malloc! Total allocated memory
InnoDB: by InnoDB 22442704 bytes. Operating system errno: 12
InnoDB: Check if you should increase the swap file or
InnoDB: ulimits of your operating system.
InnoDB: On FreeBSD check you have compiled the OS with
InnoDB: a big enough maximum process size.
InnoDB: Note that in most 32-bit computers the process
InnoDB: memory space is limited to 2 GB or 4 GB.
InnoDB: We keep retrying the allocation for 60 seconds...
171010 10:12:01InnoDB: Fatal error: cannot allocate the memory for the buffer pool
171010 10:12:01 [ERROR] Plugin 'InnoDB' init function returned error.
171010 10:12:01 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
171010 10:12:01 [ERROR] Unknown/unsupported table type: INNODB
171010 10:12:01 [ERROR] Aborting

171010 10:12:01 [Note] /usr/local/mysql/libexec/mysqld: Shutdown complete

171010 10:12:01 mysqld_safe mysqld from pid file /usr/local/mysql/var/qyi-599a87c5e1fa7.pid ended
^C

我以为是innoDB引擎的坏掉了,于是重新编译安装了mysql,后来才发现,原来是配置文件中
innodb_buffer_pool_size 设置的值过大了,(我设置了1G) 呵呵 ,缓冲池过大了,云服务器上的内存不过也就才1G。

查了资料得知原因:

这个报错的大意是,内存基本耗尽,没有再可以分配的内存.

解决办法:查看/etc/my.cnf,找innodb_buffer_pool_size,发现设值已经超过了系统总内存,然后重新设置为系统内存1半,即innodb_buffer_pool_size = 512M 重启MySQL就OK了.

于是我修改my.cnf中参数:

innodb_buffer_pool_size         = 512M

尝试启动mysql,结果不尽人意,依然报错上述错误。

于是我方了。。。。。我尝试各种方法,比如说初始化!!!!

一般来说初始化不会对线上数据造成什么影响,但是~!生产环境可千万不要这样操作,万一哪天不幸运,初始化完出故障了,那这个锅你背定了。

按照我的想法继续走。我本人是个菜鸟,写这篇文章可能会被喷,是内存的问题为什么要动数据?

我本人是个喜欢折腾的人,而且这个又是我的云机器所以我当试验机随便折腾了。。好坏都无所谓。所以我这么做,还可以锻炼我对于mysql的理解呢,何乐而不为?

然后、、、初始化过后,我把datadir目录下的数据全都删了!!!!对没错,全删了,或者是移到了其他不重要的目录里面去。

是什么给了我这么大勇气删数据库?当然是binlog日志哈哈哈,我可是对他做了备份呢。诺,你看。之前操作过的数据都会保存在binlog日志中,在其他没有备份机制的情况下通过他可以备份出sql文件,然后导入MySQL。

mysqlbinlog --start-datetime="2017-09-30 16:41:00" --stop-datetime="2017-09-30 20:48:00" mysql-bin.000003 > wordpress.sql

好了,这次备份也有了我重新进到MySQL 的datadir目录重新初始化,初始化完后目录下会有两个目录分别是mysql、test

启动mysql。这时候打开另一个会话窗口查看日志,我的心都要崩溃了。。。

跟上面报错一模一样,最后我没办法了,没脾气了,我直接reboot !!哼哼这次看你还怎么报错。

linux内存管理是非常合理的,是不需要我们插手管理的,他会根据内存大小自动存储到cache里。当然这次的重启就是为了释放内存,有人说我小题大做,手工释放一次内存不就行了?我能告诉你我当时没有想到这一点嘛。。。。看来我考虑的还不够全面啊哈哈,还是欠缺考虑。这次是我的试验机,下次如果是线上的业务机器不让重启那可就没辙了,还有万一重启起不来可就完蛋了。不过一般企业为了数据安全起见,都会部署至少两个或两个以上的数据库,做个主从,以备故障之需。上次线上机器mysql的innodb出现故障,还好只是sdb,于是我果断删除目录重新初始化,然后再从MDB把数据给同步过来恢复了正常。

在Linux系统下,我们一般不需要去释放内存,因为系统已经将内存管理的很好。但是凡事也有例外,有的时候内存会被缓存占用掉,导致系统使用SWAP空间影响性能,此时就需要执行释放内存(清理缓存)的操作了。我可真是傻,百度上有释放内存的资料,我竟然没有想到。哎,这里记录下一下吧。

配置文件/proc/sys/vm/drop_caches。这个文件中记录了缓存释放的参数,默认值为0,也就是不释放缓存。他的值可以为0~3之间的任意数字,代表着不同的含义:

0 – 不释放

1 – 释放页缓存

2 – 释放dentries和inodes

3 – 释放所有缓存

接下来,我们需要将需要的参数写进/proc/sys/vm/drop_caches文件中,比如我们需要释放所有缓存,就输入下面的命令:

#echo 3 > /proc/sys/vm/drop_caches

此指令输入后会立即生效,可以查询现在的可用内存明显的变多了。

要查询当前缓存释放的参数,可以输入下面的指令:

#cat /proc/sys/vm/drop_caches

好了重启ok了,之前做了所有服务开机自启动,发现mysql已经启动成功了,但是数据目录里面没有东西,原因是我刚才把它删了哈哈哈。。。。

所以现在备份的sql文件有作用了!!!

直接导入  mysql < wordpress.sql

大功告成!!!!!我的个人网站又可以访问了。

记一次mysql故障处理的更多相关文章

  1. 记一次 mysql 启动没反应

    记一次 mysql 启动没反应 ,重启linux又可以启动 vim /var/log/mysqld.log 2018-02-04 13:22:49 28507 [ERROR] InnoDB: Cann ...

  2. MySQL故障处理一例_Another MySQL daemon already running with the same unix socket

    MySQL故障处理一例:"Another MySQL daemon already running with the same unix socket". [root@test- ...

  3. 记一次MySQL表分区操作

    最近一次日常迭代中,业务线需要对一张大表进行联合查询,查询性能可想而知,测试过程中服务接口直接响应超时,导致服务不可用,最后临时对该表进行分区操作,暂时缓解性能问题.由于是第一次操作表分区,姑且记录一 ...

  4. 记一次mysql数据库被勒索(中)

    背景在上一篇文章里面已经提过了. 现在面临的问题是nextcloud没有mysql数据库,用不起来了. 因为文件没丢,一种方法是启动新的mysql数据库,把文件重新提交一次. 为了程序员的面子,没有选 ...

  5. 记一次mysql数据库被勒索(下)

    背景: nextcloud的mysql数据库被黑,删库勒索.参考:记一次mysql数据库被勒索(上) mysql数据库恢复成功,nextcloud还是无法连接.参考:记一次mysql数据库被勒索(中) ...

  6. 记一次mysql事务未提交导致锁未释放的问题

    记一次mysql事务未提交导致锁未释放的问题 ## 查看未提交的事务(3秒内未操作的事务) SELECT p.ID AS conn_id, P.USER AS login_user, P.HOST A ...

  7. 【夯实Mysql基础】记一次mysql语句的优化过程

    1. [事件起因] 今天在做项目的时候,发现提供给客户端的接口时间很慢,达到了2秒多,我第一时间,抓了接口,看了运行的sql,发现就是 2个sql慢,分别占了1秒多. 一个sql是 链接了5个表同时使 ...

  8. 记一次MYSQL更新优化

    引言 今天(August 5, 2015 5:34 PM)在给数据库中一张表的结构做一次调整,添加了几个字段,后面对之前的数据进行刷新,刷新的内容是:对其中的一个已有字段url进行匹配,然后更新新加的 ...

  9. 记一次mysql故障恢复

    事情要从俩月前的一个坑说起,一台新的测试服务器,新项目一元夺宝用的. 配置aws上的一台云主机,系统盘8G,一块300G的云硬盘. 拿到机器后,另一运维小哥安装php,nginx,mysql等软件. ...

随机推荐

  1. ssh禁止密码登录

    1.root用户登陆后,运行以下第一句指令,其他根据提示进行输入: ssh-keygen -t rsaGenerating public/private rsa key pair.Enter file ...

  2. Ubuntu12.04LTS安装好后是空白桌面的解决步骤(更新显卡驱动)

    安装完毕启动后,明显慢的要死,登陆后竟然是一个空白的桌面环境,Ctrl+Alt+T 根本没有任何反应.唯一的反应就是右键能够创建文件和文档. 同时打开的窗口没有最大化,最小化及关闭按钮. GOOGLE ...

  3. 【转载】 Spark性能优化:资源调优篇

    在开发完Spark作业之后,就该为作业配置合适的资源了.Spark的资源参数,基本都可以在spark-submit命令中作为参数设置.很多Spark初学者,通常不知道该设置哪些必要的参数,以及如何设置 ...

  4. 【BZOJ3531】旅行(树链剖分,线段树)

    [BZOJ3531]旅行(树链剖分,线段树) 题面 Description S国有N个城市,编号从1到N.城市间用N-1条双向道路连接,满足 从一个城市出发可以到达其它所有城市.每个城市信仰不同的宗教 ...

  5. [BZOJ1601] [Usaco2008 Oct] 灌水 (kruskal)

    Description Farmer John已经决定把水灌到他的n(1<=n<=300)块农田,农田被数字1到n标记.把一块土地进行灌水有两种方法,从其他农田饮水,或者这块土地建造水库. ...

  6. Android 音视频开发时可用的测试链接整理

    一. 国内免费可用的STUN服务器 1 | stun.xten.com | 3478 2 | stun.voipbuster.com | 3478 3 | stun.voxgratia.org | 3 ...

  7. 关于java多态的理解

    要理解多态,就必须有一个大的理解方向,不然很容易绕进去. 首先知道多态的释义:多态性是指一个名词可以有多种语义. 对于java的多态性学习者来说,就是必须要知道多个同名方法在不同情况下的使用规则. j ...

  8. js备战春招の四のjs函数

    1.普通函数声明: 2.函数表达式:函数表达式可以存储在变量中,在函数表达式存储在变量后,变量也可作为一个函数使用: 以上函数实际上是一个 匿名函数 (函数没有名称).函数存储在变量中,不需要函数名称 ...

  9. JDK的安装和Java环境变量配置

    所需工具:JDK    下载地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html

  10. Unity3D相机震动效果

    在一些格斗.射击以及动作类游戏中 相机震动效果是十分重要的 一个平凡的镜头 在关键时刻加入相机震动后 便可以展现出碰撞.危险.打斗以及激动人心的效果 相机震动的实现方式有很多 但都会涉及摄像机位置的变 ...