记录一次误删库后的惨痛经历!!!
由于备份人员没有按正常备份方式备份,而是直接将mysql数据库下的data文件夹整个拷贝下来的,所以恢复起来稍微有些复杂。但好在必要的文件都在,还是可以恢复的。
其中标红的文件夹是所需要恢复的数据库文件夹,ibdata1是必要文件(自行百度这个文件是做什么的),只要有这两个文件就可以恢复数据库数据,其中数据库文件和ibdata1必须要是对应时间的,相差太大会无法识别。安装的mysql版本也可能必须要和之前的mysql相同版本(我使用的是相同版本)。
一、重新安装好对应版本的mysql数据库,安装完将数据库停掉
service mysql stop
查看下mysql进程,确定相关进程全部杀死了,还有进程的就用kill命令干掉
ps -ef|grep mysql
二、将要备份的数据库和ibdata1文件上传到linux系统中(我直接放在/root目录下了),接着拷贝到新安装的数据库的data目录下(我这边mysql数据库装在/opt/db目录下)
cd /opt/db
cp -r /root/kpi /data
kpi目录已经复制过来,因为是用root账户复制的,所以这里将文件所有者变更为mysql
chown -R mysql:mysql data/kpi/
接着复制上传的ibdata1文件到数据库data目录下,提示是否覆盖,输入y
cp /root/ibdata1 data/
三、再次启动mysql,并使用账号进入数据库
service mysql start
/opt/db/mysql/bin/mysql -uroot -p
进入kpi数据库并查看其中对应表的内容,发现内容以恢复,并且可以进行读写操作了
use kpi;
select * from user;
至此数据文件恢复数据完成。
补:此时用远程连接或本地项目连接会连不上数据库,需要去mysql数据库表下修改内容
#查看mysql表
use mysql;
#查看允许的user和其对应的host
select user,host from user;
#将其更新为任意host地址下的root账号都可以登录
update user set host = '%' where user = 'root';
#再次查看其是否改变
select user,host from user;
#最后更新一下
flush privileges;
修改好以后远程连接或者本地项目就能连上数据库了,但是此时本地用xhsell再连接数据库会出现以下报错
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
解决这个问题的方法就是再加上linux服务器对应的地址(*号代表你要连接的linux服务器地址)
/opt/db/mysql/bin/mysql -uroot -p -h*.*.*.*;