上崩溃难题处理方案,InnoDB存款和储蓄引擎配置和优化。 迁移的网站生成文书档案到三分一左右的时候报错:

环境为CentOS系统,1G内存,Mysql5.5.30。
在/etc/my.cnf内添加:

环境为CentOS系统,1G内存,Mysql5.5.30。
在/etc/my.cnf内添加:

引言

Error infos:德德Cms错误警告:连接数据库退步大概是数据库密码不对或数据库服务器出错!

复制代码 代码如下:

复制代码 代码如下:

方今博客又抽风了,打开主页后提示 Error Establishing a Database
Connection 。仔细商讨,应该正是数据库服务器 mariadb
挂了;以前也遇上过类似的题材。经过分析日志,并构成网上的材料最终解决了难题。

火大,登陆MySQL发现

skip-external-locking
skip-name-resolve
max_connections = 1024
query_cache_size = 16M
sort_buffer_size = 1M
table_cache = 256
innodb_buffer_pool_size = 128M
innodb_additional_mem_pool_size = 4M
innodb_log_file_size = 128M
innodb_log_files_in_group = 2
innodb_log_buffer_size = 2M
innodb_flush_log_at_trx_commit = 1

skip-external-locking
skip-name-resolve
max_connections = 1024
query_cache_size = 16M
sort_buffer_size = 1M
table_cache = 256
innodb_buffer_pool_size = 128M
innodb_additional_mem_pool_size = 4M
innodb_log_file_size = 128M
innodb_log_files_in_group = 2
innodb_log_buffer_size = 2M
innodb_flush_log_at_trx_commit = 1

日志

ERROR 2002 (HY000): Can’t connect to local MySQL server through socket
‘/var/lib/mysql/mysql.sock’

修改前先将mysql服务截止:
service mysqld restart
出于修改了日记大小重启会报错:
130319 04:45:14 mysqld_safe mysqld from pid file
/var/run/mysqld/mysqld.pid ended
130319 05:02:43 mysqld_safe Starting mysqld daemon with databases from
/var/lib/mysql
130319 5:02:54 [Note] Plugin ‘FEDERATED’ is disabled.
130319 5:02:59 InnoDB: The InnoDB memory heap is disabled
130319 5:02:59 InnoDB: Mutexes and rw_locks use InnoDB’s own
implementation
130319 5:02:59 InnoDB: Compressed tables use zlib 1.2.3
130319 5:02:59 InnoDB: Using Linux native AIO
130319 5:03:01 InnoDB: Initializing buffer pool, size = 128.0M
130319 5:03:02 InnoDB: Completed initialization of buffer pool
InnoDB: Error: log file ./ib_logfile0 is of different size 0 5242880
bytes
InnoDB: than specified in the .cnf file 0 134217728 bytes!
130319 5:03:02 [ERROR] Plugin ‘InnoDB’ init function returned error.
130319 5:03:02 [ERROR] Plugin ‘InnoDB’ registration as a STORAGE
ENGINE failed.
130319 5:03:02 [ERROR] Aborting
将/var/lib/mysql下本来的ib_logfile0、ib_logfile1删除再重启mysql。
service mysqld start
例行运转:
130319 05:20:59 mysqld_safe mysqld from pid file
/var/run/mysqld/mysqld.pid ended
130319 05:22:53 mysqld_safe Starting mysqld daemon with databases from
/var/lib/mysql
130319 5:22:56 [Note] Plugin ‘FEDERATED’ is disabled.
130319 5:22:57 InnoDB: The InnoDB memory heap is disabled
130319 5:22:57 InnoDB: Mutexes and rw_locks use InnoDB’s own
implementation
130319 5:22:57 InnoDB: Compressed tables use zlib 1.2.3
130319 5:22:57 InnoDB: Using Linux native AIO
130319 5:22:57 InnoDB: Initializing buffer pool, size = 128.0M
130319 5:22:57 InnoDB: Completed initialization of buffer pool
130319 5:22:57 InnoDB: highest supported file format is Barracuda.
130319 5:22:58 InnoDB: Waiting for the background threads to start
130319 5:22:59 InnoDB: 5.5.30 started; log sequence number 2621452
130319 5:22:59 [Note] Server hostname (bind-address): ‘0.0.0.0’; port:
3306
130319 5:22:59 [Note] – ‘0.0.0.0’ resolves to ‘0.0.0.0’;
130319 5:22:59 [Note] Server socket created on IP: ‘0.0.0.0’.
130319 5:23:00 [Warning] ‘proxies_priv’ entry ‘@ root@server08’
ignored in –skip-name-resolve mode.
130319 5:23:04 [Note] Event Scheduler: Loaded 0 events
130319 5:23:04 [Note] /usr/libexec/mysqld: ready for connections.
Version: ‘5.5.30’ socket: ‘/var/lib/mysql/mysql.sock’ port: 3306 MySQL
Community Server (GPL) by Remi
采用mysqladmin variables命令可查阅全体参数变量。

修改前先将mysql服务结束:
service mysqld restart
鉴于修改了日记大小重启会报错:
130319 04:45:14 mysqld_safe mysqld from pid file
/var/run/mysqld/mysqld.pid ended
130319 05:02:43 mysqld_safe Starting mysqld daemon with databases from
/var/lib/mysql
130319 5:02:54 [Note] Plugin ‘FEDERATED’ is disabled.
130319 5:02:59 InnoDB: The InnoDB memory heap is disabled
130319 5:02:59 InnoDB: Mutexes and rw_locks use InnoDB’s own
implementation
130319 5:02:59 InnoDB: Compressed tables use zlib 1.2.3
130319 5:02:59 InnoDB: Using Linux native AIO
130319 5:03:01 InnoDB: Initializing buffer pool, size = 128.0M
130319 5:03:02 InnoDB: Completed initialization of buffer pool
InnoDB: Error: log file ./ib_logfile0 is of different size 0 5242880
bytes
InnoDB: than specified in the .cnf file 0 134217728 bytes!
130319 5:03:02 [ERROR] Plugin ‘InnoDB’ init function returned error.
130319 5:03:02 [ERROR] Plugin ‘InnoDB’ registration as a STORAGE
ENGINE failed.
130319 5:03:02 [ERROR] Aborting
将/var/lib/mysql下本来的ib_logfile0、ib_logfile1删除再重启mysql。
service mysqld start
健康运行:
130319 05:20:59 mysqld_safe mysqld from pid file
/var/run/mysqld/mysqld.pid ended
130319 05:22:53 mysqld_safe Starting mysqld daemon with databases from
/var/lib/mysql
130319 5:22:56 [Note] Plugin ‘FEDERATED’ is disabled.
130319 5:22:57 InnoDB: The InnoDB memory heap is disabled
130319 5:22:57 InnoDB: Mutexes and rw_locks use InnoDB’s own
implementation
130319 5:22:57 InnoDB: Compressed tables use zlib 1.2.3
130319 5:22:57 InnoDB: Using Linux native AIO
130319 5:22:57 InnoDB: Initializing buffer pool, size = 128.0M
130319 5:22:57 InnoDB: Completed initialization of buffer pool
130319 5:22:57 InnoDB: highest supported file format is Barracuda.
130319 5:22:58 InnoDB: Waiting for the background threads to start
130319 5:22:59 InnoDB: 5.5.30 started; log sequence number 2621452
130319 5:22:59 [Note] Server hostname (bind-address): ‘0.0.0.0’; port:
3306
130319 5:22:59 [Note] – ‘0.0.0.0’ resolves to ‘0.0.0.0’;
130319 5:22:59 [Note]澳门金沙国际 , Server socket created on IP: ‘0.0.0.0’.
130319 5:23:00 [Warning] ‘proxies_priv’ entry ‘@
[email protected]’
ignored in –skip-name-resolve mode.
130319 5:23:04 [Note] Event Scheduler: Loaded 0 events
130319 5:23:04 [Note] /usr/libexec/mysqld: ready for connections.
Version: ‘5.5.30’ socket: ‘/var/lib/mysql/mysql.sock’ port: 3306 MySQL
Community Server (GPL) by Remi
行使mysqladmin variables命令可查阅全部参数变量。

以下是 mariadb
服务器挂掉时的比较重庆大学的日记音信,从上边包车型的士日记音信中,大家可以很简单地见到由于内部存款和储蓄器不足,从而造成数据库服务器运转时崩溃。

service mysqld restart 重启退步:mysql daemon failed to start

InnoDB引擎配置优化 innodb_buffer_pool_size=1G
//一个Innodb最根本的参数,这几个参数和MyISAM的key_buffer_size有相似之处,但也是有反差的。那个参数主要缓存innodb表的目录,数据,插入数据时的缓冲,设置得越大,存取表里面数据时所急需的磁盘I/O越少,一般是内部存储器的50%,不超过2G,不然系统会崩溃。为Innodb加快优化主要参数。该参数分配内部存款和储蓄器的尺度:那个参数私下认可分配唯有8M,能够说是一点都十分的小的四个值。若是是一个专用DB服务器,那么她能够占到内部存款和储蓄器的7/10-4/5。这些参数不可能动态更改,所以分配需多着想。分配过大,会使Swap占用过多,致使Mysql的询问特慢。假如您的数码相比小,那么可分配是你的数额大小+10%左右做为那一个参数的值。
比如说:数据大小为50M,那么给这么些值分配innodb_buffer_pool_size=64M
innodb_additional_mem_pool_size=16M
//用来存放Innodb的个中目录那一个值不用分配太大,系统能够自行调。不用安装太高。日常比较大数额设置16M十足了,若是表相比多,能够适用的增大。即便这么些值自动扩展,会在error
log有中展现的。
innodb_log_file_size=256M
//在日志组中种种日志文件的轻重缓急,一般是innodb_buffer_pool_size的肆分一,官方推荐是innodb_buffer_pool_size的40-3/6。一般控制在几个LOG文件相加大小在2G以内为佳。具体意况还亟需看您的政工业余大学学小,数据大小为依照。表达:这几个值分配的分寸和数据库的写入速度,事务大小,卓殊重启后的复原有十分的大的关系。
innodb_log_files_in_group=2
//钦点你有多少个日志组。分配原则:一般我们得以用2-3个日值组。私下认可为八个。
innodb_log_buffer_size=3M
//事务在内部存款和储蓄器中的缓冲。分配原则:控制在2-8M.这些值不用太多的。他里头的内存一般一分钟写到磁盘2遍。具体写入措施和你的业务提交情势有关。在oracle等数据库通晓这几个,一般最大内定为3M相比适合。
innodb_flush_logs_at_trx_commit=0
//控制工作的交由格局分配原则:那么些参数唯有3个值,0,1,2请确认一下自已能承受的级别。暗中同意为1,主库请不要转移了。品质更高的能够设置为0或是2,但会丢掉一分钟的作业。表明:那个参数的装置对Innodb的品质有相当大的震慑,所以在那里给多说美赞臣(Dumex)下。当以此值为1时:innodb
的事情LOG在每一回提交后写入日值文件,并对日值做刷新到磁盘。那一个能够成功不丢任何一个工作。当这一个值为2时:在各样提交,日志缓冲被写到文件,但窘迫日志文件做到磁盘操作的基础代谢,在对日记文件的刷新在值为2的情事也每秒产生三次。但须求小心的是,由于经过调用方面包车型地铁难点,并不可能担保每秒100%的产生。从而在性质上是最快的。但操作系统崩溃或掉电才会去除最终一秒的作业。当那个值为0时:日志缓冲每秒贰回地被写到日志文件,并且对日记文件做到磁盘操作的基础代谢,可是在2个事情提交不做任何操作。mysqld进度的崩溃会删除崩溃前最后一秒的事体。

InnoDB引擎配置优化 innodb_buffer_pool_size=1G
//二个Innodb最器重的参数,这么些参数和MyISAM的key_buffer_size有相似之处,但也是有差别的。这一个参数重要缓存innodb表的目录,数据,插入数据时的缓冲,设置得越大,存取表里面数据时所供给的磁盘I/O越少,一般是内部存款和储蓄器的五成,不超过2G,不然系统会崩溃。为Innodb加快优化首要参数。该参数分配内部存款和储蓄器的规格:那几个参数私下认可分配唯有8M,能够视为相当小的一个值。假诺是二个专用DB服务器,那么她可以占到内部存款和储蓄器的百分之七十-百分之八十。这些参数不可能动态更改,所以分配需多考虑。分配过大,会使Swap占用过多,致使Mysql的询问特慢。假使您的数据相比较小,那么可分配是你的数量大小+10%左右做为那几个参数的值。
比如:数据大小为50M,那么给那个值分配innodb_buffer_pool_size=64M
innodb_additional_mem_pool_size=16M
//用来存放Innodb的当中目录这一个值不用分配太大,系统能够活动调。不用安装太高。平常比较大数额设置16M充分了,若是表相比多,能够适度的叠加。若是那一个值自动扩展,会在error
log有中呈现的。
innodb_log_file_size=256M
//在日志组中种种日志文件的深浅,一般是innodb_buffer_pool_size的四分之一,官方推荐是innodb_buffer_pool_size的40-3/6。一般控制在多少个LOG文件相加大小在2G以内为佳。具体景况还索要看您的事务大小,数据大小为基于。表明:那一个值分配的高低和数据库的写入速度,事务大小,极度重启后的死灰复燃有十分的大的关系。
innodb_log_files_in_group=2
//钦赐你有多少个日志组。分配原则:一般咱们得以用2-3个日值组。暗许为多个。
innodb_log_buffer_size=3M
//事务在内部存款和储蓄器中的缓冲。分配原则:控制在2-8M.这些值不用太多的。他里头的内部存款和储蓄器一般一分钟写到磁盘3次。具体写入措施和你的政工提交格局有关。在oracle等数据库理解那几个,一般最大钦定为3M比较适宜。
innodb_flush_logs_at_trx_commit=0
//控制作业的交由方式分配原则:那一个参数唯有3个值,0,1,2请确认一下自已能经受的级别。暗许为1,主库请不要改动了。质量更高的可以设置为0或是2,但会丢掉一分钟的事体。表明:那些参数的设置对Innodb的性质有极大的影响,所以在这边给多表明一(Wissu)下。当那一个值为1时:innodb
的作业LOG在历次提交后写入日值文件,并对日值做刷新到磁盘。那一个能够成功不丢任何一个作业。当以此值为2时:在种种提交,日志缓冲被写到文件,但窘迫日志文件做到磁盘操作的刷新,在对日记文件的基础代谢在值为2的状态也每秒产生3遍。但须求留意的是,由于经过调用方面包车型大巴题材,并不能确定保证每秒100%的产生。从而在品质上是最快的。但操作系统崩溃或掉电才会去除最终一秒的事情。当以此值为0时:日志缓冲每秒一回地被写到日志文件,并且对日记文件做到磁盘操作的刷新,不过在贰个工作提交不做其余操作。mysqld进度的崩溃会删除崩溃前最后一秒的业务。

InnoDB: Starting crash recovery.
InnoDB: Reading tablespace information from the .ibd files…
InnoDB: Restoring possible half-written data pages from the
doublewrite
InnoDB: buffer…
160919  2:47:12  InnoDB: Waiting for the background threads to start
160919  2:47:13 Percona XtraDB (http://www.percona.com) 5.5.46-MariaDB-37.6 started; log sequence
number 352718445
160919  2:47:13 [ERROR] mysqld: Out of memory (Needed 128917504
bytes)
160919  2:47:13 [Note] Plugin ‘FEEDBACK’ is disabled.
160919  2:47:13 [Note] Server socket created on IP: ‘0.0.0.0’.
160919  2:47:13 [Note] Event Scheduler: Loaded 0 events
160919  2:47:13 [Note] /usr/libexec/mysqld: ready for connections.
Version: ‘5.5.47-MariaDB’  socket: ‘/var/lib/mysql/mysql.sock’  port:
3306  MariaDB Server
160919 02:47:35 mysqld_safe Number of processes running now: 0
160919 02:47:35 mysqld_safe mysqld restarted
160919  2:47:35 [Note] /usr/libexec/mysqld (mysqld 5.5.47-MariaDB)
starting as process 28614 …
160919  2:47:35 InnoDB: The InnoDB memory heap is disabled
160919  2:47:35 InnoDB: Mutexes and rw_locks use GCC atomic builtins
160919  2:47:35 InnoDB: Compressed tables use zlib 1.2.7
160919  2:47:35 InnoDB: Using Linux native AIO
160919  2:47:35 InnoDB: Initializing buffer pool, size = 128.0M
InnoDB: mmap(137756672 bytes) failed; errno 12
160919  2:47:35 InnoDB: Completed initialization of buffer pool
160919  2:47:35 InnoDB: Fatal error: cannot allocate memory for the
buffer pool
160919  2:47:35 [ERROR] Plugin ‘InnoDB’ init function returned
error.
160919  2:47:35 [ERROR] Plugin ‘InnoDB’ registration as a STORAGE
ENGINE failed.
160919  2:47:35 [ERROR] mysqld: Out of memory (Needed 128917504
bytes)
160919  2:47:35 [ERROR] mysqld: Out of memory (Needed 96681984
bytes)
160919  2:47:35 [ERROR] mysqld: Out of memory (Needed 72499200
bytes)
160919  2:47:35 [Note] Plugin ‘FEEDBACK’ is disabled.
160919  2:47:35 [ERROR] Unknown/unsupported storage engine: InnoDB
160919  2:47:35 [ERROR] Aborting

cat /var/log/mysqld.log 发现:

你恐怕感兴趣的稿子:

  • MySQL的常见存款和储蓄引擎介绍与参数设置调优
  • MySQL存款和储蓄引擎基础知识
  • Mysql更换MyISAM存款和储蓄引擎为Innodb的操作记录总括
  • MySQL存款和储蓄引擎中MyISAM和InnoDB分裂详解
  • MySQL存款和储蓄引擎中的MyISAM和InnoDB差别详解
  • Mysql存款和储蓄引擎InnoDB和Myisam的六大差距
  • Mysql
    的囤积引擎,myisam和innodb的区分
  • MySQL存款和储蓄引擎总计
  • MySQL Memory 存储引擎浅析
  • 浅谈MySQL存储引擎选择InnoDB与MyISAM的得失分析
  • MySQL常用存款和储蓄引擎功能与用法详解

在/etc/my.cnf内添加: 复制代码 代码如下: skip-external-locking
skip-name-resolve max_connections = 1024 query_cache_s…

解决

 [NOTE] InnoDB: Initializing buffer pool, size = 128.0M
 [NOTE] InnoDB: mmap(137363456 bytes) failed; errno 12
 [ERROR] InnoDB: Cannot allocate memory for the buffer pool
 [ERROR] Plugin ‘InnoDB’ init function returned error.
 [ERROR] Plugin ‘InnoDB’ registration as a STORAGE ENGINE failed.
 [ERROR] Unknown/unsupported storage engine: InnoDB
 [ERROR] Aborting

在使用 free -m 查看内部存款和储蓄器信息时,发现 swap 分区大小为
0。难怪说数据库服务器不恐怕运行呢,在内部存款和储蓄器不够用的意况下,又无所适从选用 swap
分区,自然崩溃了。由于 VPS 使用了
SSD,质量自然没错。上边我们给服务器系统 CentOS 7 添加 1024M 的 swap
分区,选用的格局是开创一个 swap 文件:

题材找到,分配不了丰裕的内部存款和储蓄器,

行使下边包车型地铁授命创造 swapfile :

vim /etc/my.cnf

# 1048576 = 1024 * 1024
dd if=/dev/zero of=/swapfile bs=1024 count=1048576

innodb_buffer_pool_size=100M

选用上面包车型大巴下令配置 swap 文件:

service mysqld start ——–ok

mkswap /swapfile

搞定 

接下去,使用上面的通令马上启用 swapfile
,这样就不用等到下次重启时自动启用:

 

swapon /swapfile

末尾,我们在 /etc/fstab
中添加上面一行,那样能够在系统下次重启时自动生效成立的 swapfile :

/swapfile       swap    swap defaults   0 0

运用 cat /proc/swaps 或 free -m 查看 swapfile 的见效景况,如下图所示:

澳门金沙国际 1

在成就地点的步调后,大家还足以在 /etc/my.cnf
配置文件中添加一些铺排音讯,下跌 mariadb
能源供给,具体的配置请参考文末给出的链接。

启动

启动 apache 服务器: systemctl start httpd.service ;
启动 mariadb 服务器: systemctl start mariadb.service 。
运营成功后,再次打开网站主页,bingo,难点消除了!

总结

低配 VPS 最佳还是要多扩充 swap 分区大小,特别对于使用 SSD 的 VPS 而言,
swap 分区的性质也充裕正确;
数据库服务器崩溃后,一定要记得学会分析日志。最简便易行的做法便是采用 tail
命令看看近日的夭亡日志,并依据崩溃消息寻找化解难题的法子;

WordPress 程序本人相比占财富,所以运转在低配的 VPS
时,如故需求做些优化学工业作。具体请参见文末给出的链接。

您大概感兴趣的作品:

  • 玛丽亚DB(Mysql分支)my.cnf配置文件汉语注释版
  • 浅谈MySQL和mariadb区别
  • MySQL分支采用参考:Percona依然玛丽亚DB
  • C#连日来mariadb(MYSQL分支)代码示例分享
  • 关于玛丽亚DB安装难题小记(CMake Error
    at)
  • 玛丽亚DB中的thread
    pool详细介绍和利用方法

相关文章