作者:晨星1032

一、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)查看是否成功

作者:晨星1032

参考

MySQL数据库迁移(数据文件直接迁移)-CSDN

MySQL直接拷贝数据库文件后出现table xxx doesn't exist解决方法-Penguin

Mysql,innodb使用.ibd文件快速批量恢复数据---批量快速-CSDN

MySQL数据库迁移与MySQL数据库批量恢复的更多相关文章

  1. mysql数据库迁移到oracle数据库后 如何删除相同的数据

    mysql数据库迁移到oracle数据库后 如何删除相同的数据 首先搞清楚有多少数据是重复的 select pid from product group by pid having count(pid ...

  2. [转载]如何将OFBIZ(opentaps)默认数据库迁移至mysql((2

    原文地址:如何将OFBIZ(opentaps)默认数据库迁移至mysql(利昂原创)作者:利昂 ofbiz自带的数据库是Derby,这是一种小型的适合与测试系统的数据库,但不适合在产品级系统中使用,所 ...

  3. Oracle 数据库迁移到MySQL (kettle,navicate,sql developer等工具

    Oracle 数据库迁移到MySQL (kettle,navicate,sql developer等工具 1 kettle --第一次使用kettle玩迁移,有什么不足之处和建议,请大家指正和建议. ...

  4. 从其他数据库迁移到MySQL及MySQL特点

    从其他数据库迁移到MySQL Oracle,SQL Server迁移到MySQL 一些变化 不再使用存储过程.视图.定时作业 表结构变更,如采用自增id做主键,以及其他语法变更 业务SQL改造,不使用 ...

  5. 将ACCESS数据库迁移到SQLSERVER数据库

    原文:将ACCESS数据库迁移到SQLSERVER数据库 将ACCESS数据库迁移到SQLSERVER数据库 ACCESS2000文件 用ACCESS2007打开,并迁移到SQLSERVER2005里 ...

  6. MYSQL数据库迁移到ORACLE数据库

    一.环境和需求1.环境 MySQL数据库服务器: OS version:Linux 5.3 for 64 bit mysql Server version: 5.0.45 Oracle数据库服务器: ...

  7. 将sqllite3数据库迁移到mysql

    一.安装python mysql module (OneDrive): 1.运行python D:\OneDrive\Work\django\mysqlregistry.py2.http://www. ...

  8. ubuntu系统lamp环境搭建、数据库迁移、设置数据库外部访问

    sudo passwd root设置两次密码su输入设置的密码exit (退出root帐号) 1.sudo apt-get update 2.sudo apt-get install apache2 ...

  9. [MySQL] SqlServer 迁移到 MySQL 方法介绍

    一.原则: 只迁移表结构和数据,存储过程.函数.触发器尽量自己改写,并充分测试. 迁移前,先设置好数据库的一些参数,比如默认存储引擎,默认编码等,方便后续导入. 二.方法: 1.使用MySQL Wor ...

随机推荐

  1. MFC3 基本对话框的使用(三) 滑块与进度条(sdnu)(C++大作业)

    一.完成界面 运行前: 运行后: 二.工具 (1)滑块 (2)进度条 (3)文本框 (4)文本示例 (5)按钮 三.添加变量 四.添加事件 右键单击主对话框空白部分,打开类向导,选择"消息& ...

  2. 杭电OJ2010---水仙花数(c++)(方法:输出几个数之间用空格隔开,最后一个数没有空格)

    水仙花数 Problem Description 春天是鲜花的季节,水仙花就是其中最迷人的代表,数学上有个水仙花数,他是这样定义的: "水仙花数"是指一个三位数,它的各位数字的立方 ...

  3. HP PROLIANT DL388 GEN10 (故障3019)SPP损坏

    HP PROLIANT DL388 GEN10 (故障3019)SPP损坏 1. 开机硬件自检,提示错误ERROR 3019: 2. 根据服务器版本GEN10下载最新固件SPP,可找服务商或者HP售后 ...

  4. 【Flutter】布局类组件之对齐和相对定位

    前言 如果只想简单的调整一个子元素在父元素中的位置的话,使用Align组件会更简单一些. 接口描述 const Align({ Key key, // 需要一个AlignmentGeometry类型的 ...

  5. LeetCode 371两数之和

    题目描述: 不使用运算符 + 和 - ​​​​​​​,计算两整数 ​​​​​​​a .b ​​​​​​​之和. 思路: 既然不能使用运算符操作就要考虑到,位运算的加法. 加法有进位的时候和不进位的时候 ...

  6. Centos 6 下安装 OSSEC-2.8.1 邮件告警 (二)

    Ossec 配置邮件通知 ## 1 安装软件包: yum install -y sendmail mailx cyrus-sasl cyrus-sasl-plain #安装postfix邮件相关的软件 ...

  7. (十九)hashlib模块

    hashlib模块用于加密相关的操作,3.x里代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法 注意:md5和sha25 ...

  8. zabbix自定义监控nginx

    nginx配置ngx_status 1.编译安装时带上--with-http_stub_status_module参数 2.vi nginx.conf location ~* ^/ngx_status ...

  9. P1967 货车运输(倍增LCA,生成树)

    题目链接: https://www.luogu.org/problemnew/show/P1967 题目描述 A国有n座城市,编号从 1到n,城市之间有 m 条双向道路.每一条道路对车辆都有重量限制, ...

  10. C# datagridview设置标题为汉语

    正常情况下,在给datagridview绑定数据源之后,显示的是SQL语句中的栏位,如下 我们想让标题显示汉语,可以有一下两种方法 1.在SQL中设置列别名 SELECT TITLE AS '报警标题 ...