MySQL数据库迁移与MySQL数据库批量恢复
一、MySQL数据库迁移或备份
将相关数据库数据文件直接迁移方式
1. 了解使用InnoDB引擎创建数据库所产生的文件
使用MySQL InnoDB引擎所产生的文件(三个文件都很重要)
.ibd:包含每个table的数据和索引.frm:描述table的结构等ibdata1:包含所有table的字典和历史操作
在data文件夹下,每个数据库分别是一个文件夹(如:mosquitto),ibdata1文件会记录MySQL中所有InnoDB数据库中table的字典和历史操作:

在mosquitto文件夹总,包含每个table的.ibd文件和.frm文件

2. 迁移数据库步骤
基本要求:
- 保证MySQL版本基本一致,安装配置基本一致
- 停止两边的MySQL服务
1. 从A服务器迁移至B服务器
- 清空B服务器MySQL的data目录下所有文件
- 拷贝A服务器MySQL的data目录下除了ib_logfile和.err之外的文件到B服务器data下
- 启动B服务器的MySQL服务,检测是否发生异常
2. MySQL重装并导入之前数据库
- 备份MySQL的data目录下除了ib_logfile和.err之外的所有文件到其他目录
- 清空MySQL的data目录下所有文件
- 拷贝备份的数据文件到data目录下
- 启动MySQL服务,检测是否发生异常
注意:
迁移时将每个数据库文件夹时一定不能忘记ibdata1文件,若不小心删除ibdata1文件可以继续看以下内容恢复。
二、MySQL数据库批量恢复(通过.frm和.ibd文件批量恢复)
若不小心删除ibdata1文件,即目前只有.frm和.ibd文件如何恢复数据?同时数据库表格过多又如何批量恢复?
1. 通过.frm文件批量恢复表结构信息(使用mysqlfrm)
mysqlfrm其他版本(windows等)下载地址:https://downloads.mysql.com/archives/utilities/
(1)mysqlfrm安装
下载
wget https://cdn.mysql.com/archives/mysql-utilities/mysql-utilities-1.6.5.tar.gz
解压
tar -xvf mysql-utilities-1.6.5.tar.gz
cd mysql-utilities-1.6.5/
安装(需要Python环境,python2.6及以上)
python ./setup.py build
python ./setup.py install
检查是否安装成功
mysqlfrm --version
(2)使用mysqlfrm查看表结构创建语句
mysqlfrm有
--basedir模式以及--server模式,但推荐--server,能够还原最为准确的信息
- 使用方式(启动MySQL服务)
格式:mysqlfrm --server=用户名:密码@数据库地址:端口 需恢复的frm文件目录 --diagnostic > 保存SQL文件名.sql
mysqlfrm --server=root:123456@192.168.11.130:3306 /mnt/mysql/mysql_data/mosquitto/*.frm --diagnostic > mosquitto_frm.sql
过程如图所示:


- 执行所生成的SQL文件
注:mysqlfrm仅显示整个数据库的表结构创建语句,可以显示在控制台也可以输出到文件,不过仍需要手动执行这些表创建SQL语句。
先创建数据库
CREATE DATABASE `mosquitto`
可以查看生成的sql文件手动删除相关无用信息等,可命令行执行或者客户端执行等
命令行
mysql -uroot -p123456 mosquitto < mosquitto_frm.sql
2. 通过.ibd文件批量恢复表数据信息
(1)让表结构和表空间脱离
注:
若使用不了mysql命令或者执行mysql出现Can't connect to local MySQL server through socket '/tmp/mysql.sock'等问题时,请查看这一篇文章解决https://www.cnblogs.com/maogen/p/14353778.html
生成
mysql -uroot -p123456 -e " SELECT concat('alter table ', table_name, ' discard tablespace;') FROM information_schema.tables WHERE table_schema = 'mosquitto';" > tem_discard.sql
删除多余信息
sed '/^c/d' tem_discard.sql > discard.sql
执行命令
mysql -uroot -p123456 mosquitto < discard.sql
(2)将需要恢复的.ibd替换到相关目录下
cp /mnt/mysql/mosquitto/*.ibd /mnt/mysql/mysql_data/mosquitto/
(3)权限设置
chown -R mysql.mysql /mnt/mysql/*
(4)导入表空间
生成
mysql -uroot -p123456 -e " SELECT concat('alter table ', table_name, ' import tablespace;') FROM information_schema.tables WHERE table_schema = 'mosquitto1';" > tem_import.sql
删除多余信息
sed '/^c/d' tem_import.sql > import.sql
执行命令
mysql -uroot -p123456 mosquitto < import.sql
(5)查看是否成功

参考
MySQL数据库迁移与MySQL数据库批量恢复的更多相关文章
- mysql数据库迁移到oracle数据库后 如何删除相同的数据
mysql数据库迁移到oracle数据库后 如何删除相同的数据 首先搞清楚有多少数据是重复的 select pid from product group by pid having count(pid ...
- [转载]如何将OFBIZ(opentaps)默认数据库迁移至mysql((2
原文地址:如何将OFBIZ(opentaps)默认数据库迁移至mysql(利昂原创)作者:利昂 ofbiz自带的数据库是Derby,这是一种小型的适合与测试系统的数据库,但不适合在产品级系统中使用,所 ...
- Oracle 数据库迁移到MySQL (kettle,navicate,sql developer等工具
Oracle 数据库迁移到MySQL (kettle,navicate,sql developer等工具 1 kettle --第一次使用kettle玩迁移,有什么不足之处和建议,请大家指正和建议. ...
- 从其他数据库迁移到MySQL及MySQL特点
从其他数据库迁移到MySQL Oracle,SQL Server迁移到MySQL 一些变化 不再使用存储过程.视图.定时作业 表结构变更,如采用自增id做主键,以及其他语法变更 业务SQL改造,不使用 ...
- 将ACCESS数据库迁移到SQLSERVER数据库
原文:将ACCESS数据库迁移到SQLSERVER数据库 将ACCESS数据库迁移到SQLSERVER数据库 ACCESS2000文件 用ACCESS2007打开,并迁移到SQLSERVER2005里 ...
- MYSQL数据库迁移到ORACLE数据库
一.环境和需求1.环境 MySQL数据库服务器: OS version:Linux 5.3 for 64 bit mysql Server version: 5.0.45 Oracle数据库服务器: ...
- 将sqllite3数据库迁移到mysql
一.安装python mysql module (OneDrive): 1.运行python D:\OneDrive\Work\django\mysqlregistry.py2.http://www. ...
- ubuntu系统lamp环境搭建、数据库迁移、设置数据库外部访问
sudo passwd root设置两次密码su输入设置的密码exit (退出root帐号) 1.sudo apt-get update 2.sudo apt-get install apache2 ...
- [MySQL] SqlServer 迁移到 MySQL 方法介绍
一.原则: 只迁移表结构和数据,存储过程.函数.触发器尽量自己改写,并充分测试. 迁移前,先设置好数据库的一些参数,比如默认存储引擎,默认编码等,方便后续导入. 二.方法: 1.使用MySQL Wor ...
随机推荐
- loj #6179. Pyh 的求和 莫比乌斯反演
题目描述 传送门 求 \(\sum\limits_{i=1}^n\sum\limits_{j=1}^m \varphi(ij)(mod\ 998244353)\) \(T\) 组询问 \(1 \leq ...
- nacos统一配置中心源码解析
配置文件想必大家都很熟悉,无论什么架构 都离不开配置,虽然spring boot已经大大简化了配置,但如果服务很多 环境也好几个,管理配置起来还是很麻烦,并且每次改完配置都需要重启服务,nacos c ...
- sql查询速度慢分析及如何优化查询
原因分析后台数据库中数据过多,未做数据优化数据请求-解析-展示处理不当 网络问题提高数据库查询的速度方案SQL 查询速度慢的原因有很多,常见的有以下几种:1.没有索引或者没有用到索引(查询慢最常见的问 ...
- 【Java基础】Java8 新特性
Java8 新特性 Lambda 表达式 Lambda 是一个匿名函数,我们可以把 Lambda 表达式理解为是一段可以传递的代码(将代码像数据一样进行传递).使用它可以写出更简洁.更灵活的代码. L ...
- 【C++】《Effective C++》第八章
第八章 定制new和delete 对于程序开发来说,了解C++内存管理例程的行为是非常重要的.其中两个主角是分配例程和归还例程(operator new和operator delete),配角是new ...
- python学习笔记 | 顺序表的常规操作
''' @author: 人人都爱小雀斑 @time: 2020/3/11 8:46 @desc: 顺序表的相关操作 ''' class SequenceList: def __init__(self ...
- 十三:SQL注入之MYSQL注入
MYSQL注入中首先要明确当前注入点权限,高权限注入时有更多的攻击手法,有的能直接进行getshell操作,其中也会遇到很多的阻碍,相关防御手法也要明确,所谓知己知彼,百战不殆.作为安全开发工作者,攻 ...
- 通用寄存器_MOV_ADD_SUB_AND_OR_NOT
通用寄存器 MOV指令 注意:目标操作数与操作数宽度必须一样 MOV 目标操作数,源操作数 作用:拷贝源操作数到目标操作数 1.源操作数可以是立即数.通用寄存器.段寄存器.或者内存单元. 2.目标操作 ...
- MySQL select join on 连表查询和自连接查询
连表查询 JOIN ON 操作 描述 inner join 只返回匹配的值 right join 会从右表中返回所有的值, 即使左表中没有匹配 left join 会从左表中返回所有的值, 即使右表中 ...
- linux硬盘分区和fdisk命令
分区的几个概念 硬盘分区有三种,主分区.扩展分区.逻辑分区.一个硬盘主分区至少有1个,最多4个,扩展分区可以没有,最多1个.且主分区+扩展分区总共不能超过4个.逻辑分区可以有若干个.在windows下 ...