在一次弃用的MySQL数据备份的过程中,出现了备份数据文件大小无法增长的问题
写在前面:其实我们缺少的不是解决问题的方法,而是遇到问题根据点滴积累留下的经验的灵光乍现。
命令如下:
nohup mysqldump -utest -p123456 -h127.0.0.1 kshop>/home/kshop.sql &
注:Warning:mysqldump不建议显示密码,但不影响使用效果。使用nohup后台执行更稳妥
问题:进入home目录下使用命令du -sh *
查看文件大小,发现文件大小始终为0。
步骤1:
起初以为是数据库无法远程连接,或者数据需要等获取库后才能录入文件。(后续证实数据文件是秒增的),在该服务器登录MySQL后发现可以登录并可以查看库表,假设不成立。
步骤2:
既然可以登录数据库,就可以查询数据库具体数据以及运行情况,使用命令
SELECT * FROM information_schema.
PROCESSLISTWHERE COMMAND<>'sleep';
查看当前数据库运行的SQL以及使用情况。结果发现大量的数据库查询更新语句,以及查看数据库中表结构的数据。导致锁表以及慢查询,所以跟本打不开任何表。
步骤3:
既然找到大量锁表语句,kill掉就好了(数据库应该是已经弃用的,有查询调用是因为服务未全部关闭),查看数据库执行情况结果的id,并kill掉 。
示例:kill 3488;
结果部分SQL仍无法杀掉,并导致数据库的卡死。且无法登陆服务器。
步骤4:
没办法只能放大招重启服务器,因为之前发生过重启服务器后数据库无法启动的问题(重启服务器是危险性很大的事情),先使用service mysqld stop
关掉数据库,结果不出意外服务器重启后数据库启动不起来了。
步骤5:
启动MySQL情况如下
[root@server1 ~]# systemctl start mysqld
Job for mysqld.service failed because the control process exited with error code. See "systemctl status mysqld.service" and "journalctl -xe" for details.
如图使用命令
systemctl status mysqld.service
再使用命令
journalctl -xe
cat /var/log/mysqld
步骤6:
使用如下命令解决如上问题
mkdir -p /var/run/mysqld
chown mysql.mysql /var/run/mysqld/
systemctl start mysqld
这样即可成功启动数据库
但问题再次出现,发现root密码无法登陆
步骤7:
通过修改mysql的配置文件可以实现无密码登录,多数配置文件都在 /etc/my.cnf
在[mysqld]下方添加skip-grant-tables,保存后重启数据库后即可实现无密码登录
mysql -uroot
但是登录后发现数据里原有的库和表都没了!
步骤8:
此时使用Navicat也无法登陆,查询之后使用过命令
mysqld_safe --skip-grant-tables
仍无法发现数据库数据。
此时慌得一批,赶紧去找服务器上还有没有数据库文件了,数据库文件的存储目录在配置文件上/etc/my.cnf有记录
然后发现home下的mysql的文件全都不见了。
步骤9
按理说文件不会无故丢失,最后灵光乍现,怀疑磁盘未挂载。使用命令查看
fdisk -l
果然!使用命令
mount /dev/mapper/VolGroup-lv_home /home
挂载之后重启数据库后,再次登录,数据库果然回来了,然后再次dump,数据也有了!
所以重启服务器后,需要查看磁盘是否已经挂载,否则会有很多问题无故出现,甚至查不到原因。