背景
因为数据库没有备份,ubuntu系统崩溃,无法进入系统启动mysql进行备份,但是可以通过pe进入服务器,mysql data文件是完整的,将data文件夹拷贝出,并尝试通过data进行数据恢复
准备
1.建立虚拟机
- 下载和服务器器一样的系统,这里用到ubuntu1604,下载地址:
http://releases.ubuntu.com/16.04/
选择对应版本
- 建立虚拟机
安装好virtualbox后,新建虚拟机,选择镜像,启动即可
2.安装mysql
- 安装mysql
下载mysql对应版本
wget https://dev.mysql.com/get/mysql-apt-config_0.8.12-1_all.deb
安装下载的发行包
sudo dpkg -i mysql-apt-config_0.8.12-1_all.deb
一路选择ok
开始安装
sudo apt-get update
sudo apt-get install mysql-server
注:
其中两个弹窗
第一个是确认密码(设置数据库密码)
另一个是选择加密方式,工具较新选第一个,较老选第二个
下载时间略长稍作等待,到这就安装完成啦
- 开启远程连接
当使用 grant 权限列表 on 数据库 to ‘用户名’@’访问主机’ identified by ‘密码’; 时会出现”……near ‘identified by ‘密码” at line 1”这个错误
msyql8 版本已经将创建账户和赋予权限的方式分开了
解决办法:
分两步走
创建账户:create user ‘用户名’@’访问主机’ identified by ‘密码’;
赋予权限:grant 权限列表 on 数据库 to ‘用户名’@’访问主机’ ;(修改权限时在后面加with grant option)
create user root@'%' identified by '123456';
grant all privileges on *.* to root@'%' with grant option;
flush privileges;
- 此时发现外网还是没法访问,需要关闭防火墙
ufw disable
navicate连接,可以正常访问
- 重装
查看当前安装版本
mysql --version
如果版本不对,进行卸载重装
sudo apt-get autoremove --purge mysql-server-8.0
sudo apt-get remove mysql-server
sudo apt-get autoremove mysql-server
sudo apt-get remove mysql-commo
迁移data文件
1.备份
迁移之前,先将新mysql的存储库进行备份,默认存储位置是/var/lib/mysql
将mysql整体备份
2.将要恢复的数据库挂载到虚拟机
注意是固定分配,自动挂载
3.覆盖
先停止mysql服务
service mysql stop
从备份库向目标库恢复数据,每个文件夹代表一个数据库
复制
可以一次复制多个数据库
cp -r xc_db xc_devops xc_iot xc_media xc_iot xc_media xc_pwn xc_tree /var/lib/mysql
重新启动mysql,发现什么都不显示
还需要复制配置文档,主要有这几个
ibdata1,ib_logfile0,ib_logfile1,ib_buffer_pool,auto.cnf, mysql.ibd
修改my.cnf,加入innodb_force_recovery=6
启动,报错
排除,发现复制前五个文件,mysql能正常启动。但不显示表,复制到mysql.ibd时,报错,mysql无法启动
重启 mysq,数据完美恢复
(一定要大小版本一致,如8.0.12,,必须一模一样)