admin 管理员组

文章数量: 1086019


2024年3月22日发(作者:eva零)

责任编辑:赵志远 投稿信箱:

netadmin@

故障诊断与处理

Trouble Shooting

MariaDB数据库不运行故障

■ 江西 黎忠东

笔者通过

moodle网络课

程平台,在课程

中添加资源时突

然变得很慢,浏

编者按: 笔者有一个FreeBSD+Nginx+MariaDB+PHP环

境下的moodle网络课程平台,在近期出现了不能登录并

且提示“数据库连接失败”的故障,本文详细介绍了查找

数据库连接失败的原因以及解决问题的对策,以期对解

决“数据库连接失败”故障及配置MariaDB数据库有所

过程,注意本

moodle课程平

台的操作系统

是FreeBSD,

数据库是

览器总是在转,

帮助。

而且等待很长时

间也是这样,课程不能正常

工作。

根据笔者经验,重启服

务器应该能够解决。但重

启服务器后不仅没有解决

问题,反而不能登录moodle

课程了,并且出现“Error:

Database connection

failed,It is possible

that the database is

overloaded or otherwise

not running properly.

The site administrator

should also check that

the database details

have been correctly

specified in ”

的提示。

该提示说明,moodle课

程的数据连接失败。

根据提示:一种原因可

能是数据库超载;二可能是

数据库无法正常运行;三可

能是课程中数

据库信息不正确。

第一个原因不应该,因

为刚重启了服务器,没有什

么用户,不应该超载。

第三个原因也不应该,

因为配置的是

数据库连接用户名、密码等

相关信息,课程平台一直正

常运行,也未修改过config.

php配置。

最有可能的是第二个原

因就是数据库无法正常运

行。

既然最有可能的原因是

数据库无法正常运行,所以

首先要确认数据库是否正常

运行,找到没有正常运行的

问题所在,然后根据问题采

取相应的对策。

下面介绍故障解决的

MariaDB。

确认数据库是否正常启动

1.输入“MySQL”看能否

登录数据库,提示不能连接

到本地数据库。

2.输入“service

mysql-server status”命

令查看数据库当前状态,显

示数据库没有运行:“mysql

is not running.”。

3.输入“service

mysql-server start”命令

启动数据库,系统提示正在

启动,由于没有数据库是否

已经正常启动的提示,因此

再次用“service mysql-

server status”查看数据

库当前状态,本案例显示数

据库仍然没有运行。

查找数据库不能运行的原因

数据库不能运行的原因

是多种多样的,数据库错误

2019.04

151

Trouble Shooting

故障诊断与处理

责任编辑:赵志远 投稿信箱:

netadmin@

日志文件会记录一些数据库

服务器运行期间发生的严重

错误,查看日志文件往往会

找到问题的原因。

1.查找数据库的日志,

看能否找到原因。

Mariadb数据库日志有

错误日志、通用查询日志、慢

查询日志和二进制日志,其

中错误日志包含数据库服务

器运行过程中所有较为严重

的警告和错误信息,数据表

损坏的情况,以及每一次启

动和关闭的详细信息。

在默认情况下,系统错

误日志的功能是开启的,错

误日志的默认存放位置是在

数据目录下,以“hostname.

err”命名,但也可以使用

“log-error[=file_name]”

命令修改其存放目录和文件

名。

由于本案例为默认设

置,所以用“locate .err”

查找错误日志的存放路径为

/var/db/mysql,文件名称为

“”。

2.打开错

误日志,查找错误信息。

为了获取错误信息,

使用命令“sudo service

mysql-server start”启

动数据库,使用命令“sudo

nano ”打开错

误日志,发现有如下几条:

2019-02-14 12:16:59

34424840192 [ERROR]

InnoDB: preallocating

12582912 bytes for file

./ibtmp1 failed with

error 28

2019-02-14 12:16:59

34424840192 [ERROR]

InnoDB: Could not set

the file size of './

ibtmp1'. Probably out of

disk space

2019-02-14 12:16:59

34424840192 [ERROR]

InnoDB: Unable to create

the shared innodb_

temporary

以上信息显示,可能由

于数据所在磁盘空间不足而

未能创建12MB的innodb_

temporary临时文件,这就

说明/var/db/mysql所在的

磁盘空间很有可能不够。

3.用命令df查看分区/

var的容量为10G,但已全部

用完,显然是由于空间不足,

造成数据库不能运行。

4.用“du –h /var”看

看/var文件占用情况,发

现/var/db/mysql文件占

用了7.9G,主要是一些诸如

mysql-bin.000003等类型

的二进制日志文件。

至此,已经找到了数据

库不运行的原因,就是随着

系统使用时间的增加,数据

库二进制日志文件也不断增

加,最终充满磁盘,造成了数

据库因磁盘空间不足而不能

运行。

怎么腾出磁盘空间

二进制日志包含数据库

所有更改的记录,包括数据

152

2019.04

责任编辑:赵志远 投稿信箱:

netadmin@

故障诊断与处理

Trouble Shooting

和结构,以及每个语句执行

的时间。它由一组二进制日

志文件和索引组成,主要用

于主从服务器数据库复制以

及辅助备份操作。

磁盘空间不足可以重新

调整磁盘分区,但这种方式

最终还是会由于日志文件的

积累而耗尽空间。

因此可以删除部分日志

文件,以启动数据库服务,同

时还必须要找到解决日志因

时间的增长而耗尽空间的解

决方法。

但是不能简单地直接删

除mysql-bin二制文件,因

为它还包括了索引。因此需

要登录数据库服务器,可以

使用命令“reset master”

删除所有二进制日志,或者

使用“purge binary to” 命

令删除部分日志,以腾出空

间。

但现在数据库是不能运

行的,无法使用上面的方法,

只能在不登录数据库的情况

下,用cat命令清空二进制

日志。

1.在本例中先清空1G

的mysql-bin.000003日志

文件,为了安全起见,在清空

日志之前先应当备份日志文

件。

2.因日志文件的权限所

有者为MySQL,用“ls –lh”

查看mysql-bin.000003权

限为“660”,其他用户没有

写入权限,因此使用“chmod

667 mysql-bin.000003”命

令更改权限后,再使用“sudo

cat /dev/null > mysql-

bin.000003”命令清空,最终

mysql-bin.000003的容量

为0B。

3.清空mysql-

不足而导致数据库不运行的

故障。

因此登录数据库,使用

命令“purge binary logs

to 'mysql-bin.000015'”

删除15号日志之前的所有

日志,并使用“set global

expire_logs_days=30”命

令让系统自动删除30天前

的日志。

经验教训

本故障的出现就是由于

数据库日志为默认配置,二

进制日志文件随时间而增

加,最终占满磁盘空间,导致

数据库因磁盘空间不足而不

能运行。

因此,我们应该根据实

际情况选择关闭二进制日

志,或设置自动删除多少天

的日志,以防止类似故障的

出现。

bin.000003日志文件后,/

var分区约有1G空闲空间,

启动数据库后显示正常,再

次登录moodle课程,终于显

示正常。

4.虽然现在数据库能正

常运行,但还有大量不再使

用的日志仍占用着磁盘空

间,如果故障处理至此结束

的话,在一段时间后又会出

现因日志过多造成磁盘空间

2019.04

153


本文标签: 数据库 日志 运行 文件 原因