环境描述:原mysql实例有db1、db2库,只迁移db1库到新的mysql实例。迁移后测试存储过程、触发器迁移成功;在新mysql实例中新建db2库并在db2库中创建与源库相同的表,可以正常创建,不会有与公共表空间原数据冲突的问题。

一、备份源实例中的所有库,恢复指定库进行迁移

创建存储过程

create procedure t1pro(a1 int,b1 int) begin declare a2 int; declare b2 int; declare c2 int; set a2=a1; set b2=b1; set c2=a2+b2; insert into t1 values(a2,b2,c2); end//

创建触发器

create trigger t1trigger before update on t1 for each row begin insert into t2 values(old.a,new.a,old.b,new.b,old.c,new.c); end;//

1、 完整备份

innobackupex --defaults-file=/home/local/mysql/my.cnf --user=root --password=probiz  --socket=/mylvmnt/mysql.sock  /home/bakup/20120722/1550

2、恢复指定的库

复制备份文件

cp -R 2012-07-22_00-50-35/ filebak

cd filebak/

删除db2库的备份

rm -rf db2

使用复制的备份文件恢复数据

innobackupex --apply-log --user=root --password=probiz --socket=/mylvmnt/mysql.sock --defaults-file=/home/local/mysql/my.cnf /home/bakup/20120722/1550/filebak/

3、迁移到新的mysql实例

使用二进制包部署新的mysql,注意配置中的表公共表空间、使用独立表空间、联机重做日志的配置一定要和备份mysql一致。

把恢复好的ibdata1、ibdata2、ib_logfile0、ib_logfile1、ib_logfile2、db1目录及其下的文件、mysql目录及其下的文件复制到/home/local/mysql3308/data目录(新mysql实例的数据目录)下,并把复制好的文件属主和属组改为mysql,并把复制好的权限设置为660。

注意一定要公共表空间和联机重做日志复制到新的mysql实例,如果使用新mysql实例生产的公共表空间和联机重做日志,并在新的实例中新建相同的表再把表的独立空间文件复制到新实例中会导致表的独立表空间文件的ID与公共表空间中记录的表的独立表空间文件ID不同,访问该表时导致mysqld重启。

另外要注意的是如果新的mysql实例不是全新的,在新的mysql实例中有原来其他库就不能用从源实例备份中恢复的公共表空间文件和联机重做日志覆盖新实例中的相同文件,如果覆盖是导致mysql无法启动或启动后访问不了原有库。

启动新的mysql实例,测试存储过程、触发器及各表mysql库中的记录(如用户权限等)都正常。

测试创建db2数据库,用use db2进入db2库,创建备份库中的表test和test2都可以正常创建。

二、备份指定库,进行迁移

1、备份:只备份db1库

vi  table.txt

db1.audit.frm

db1.t1

db1.audit

db1.db.opt

db1.t1.frm

db1.t1.TRG

db1.testref.TRN

注意:db1.t1不能写成db1.t1.ibd,如果写成db1.t1.ibd innobackupex 调用xtrabackup时是不会备份t1.ibd文件的。

innobackupex --defaults-file=/home/mysql/mysql3308/my.cnf --user=root --password=probiz --socket=/home/mysql/mysql3308/data/mysql.sock   --tables-file=./tables.txt    /home/bak/20120721/1812/

2、恢复

innobackupex --apply-log --defaults-file=/home/mysql/mysql3308/my.cnf  --user=root --password=probiz --socket=/home/mysql/mysql-3306/data/mysql.sock /home/bak/20120721/1812/2012-07-21_18-19-10/

检查/home/bak/20120721/1812/2012-07-21_18-19-10/目录下如果生成了3个联机重做日志就恢复成功了(备份的数据库配置是3个联机重做日志)

3、部署新的mysql,注意配置中的表公共表空间、使用独立表空间、联机重做日志的配置一定要和备份mysql一致。

4、把/home/bak/20120721/1812/2012-07-21_18-19-10/目录下的公共表空间文件和联机重做日志文件复制到新mysql的数据目录。

5、把/home/bak/20120721/1812/2012-07-21_18-19-10/db1(db1是个数据库)目录及目录下的文件复制到新的mysql的数据目录中。把mysql数据目录下的公共表空间文件和联机日志文件的属主和属组改为mysql用户,权限设置为660;/home/mysql/mysql3310/data/db1目录下的文件属主和属组改为mysql用户,权限设置为660.

注意一定要公共表空间和联机重做日志复制到新的mysql实例,如果使用新mysql实例生产的公共表空间和联机重做日志,并在新的实例中新建相同的表再把表的空间文件复制到新实例中会导致独立表空间文件的ID与公共表空间中记录的独立表空间文件ID不同,访问该表时导致mysqld重启。

另外要注意的是如果新的mysql实例不是全新的,在新的mysql实例中有原来其他库就不能用从源实例备份中恢复的公共表空间文件和联机重做日志覆盖新实例中的相同文件,如果覆盖是导致mysql无法启动或启动后访问不了原有库。

6、启动新的mysql实例,登录验证。

工作心得:

1、要完整查看与自己操作相关的日志及其它输出信息。此次innobackupex备份迁移mysql,在新的mysql实例中创建相同表,然后用恢复的独立表空间文件覆盖新实例中的独立表空间文件导致独立表空间文件ID与公共表空间中记录的独立表空间文件ID不一致导致访问迁移库时mysqld会重启(无法访问该库)。想删除表无法删除,在执行删除表或重命名表的操作时就会在mysql错误日志文件中写入独立表空间文件ID与公共表空间中记录的独立表空间ID不一致。但自己只看了后10调记录,没看操作时间中产生的全部日志,以致浪费了大量时间做了很多无用功。

2、操作前先想好操作步骤(流程)。

3、使用一款软件时要弄清楚其工作原理,这样遇到问题才能有依据的分析问题,否则就只会使用指令,     不断的瞎操作无法解决问题。

4、在32为linux上使用64位的xtrabackup,报错无法执行的二进制文件和没有指定数据目录的错误,自己     忽略了不可执行的二进制文件的信息,以没有指定数据文件为关键字在网上搜索信息并尝试了几个小     时无法解决问题。后来想到不可执行的二进制文件,可能是64位的文件,用file命令查看果然是64为     的文件,换32位程序后问题解决。

此次由于工作方法不对导致几分钟可以解决的问题使用了几个小时。

改善:

收集完整错误信息,对每条信息进行分析,把各个原因列出来,从最容易验证的原因开始实施验证,接下来验证第二容易解决的原因,依此类推最后验证最难解决的原因提升工作效率。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/21582653/viewspace-736323/,如需转载,请注明出处,否则将追究法律责任。

innobackupex 恢复到mysql目录_innobackupex备份mysql恢复后迁移到新的mysql实例相关推荐

  1. MySQL中的备份和恢复

    如何用mysql 命令进行备份和恢复?以test 库为例,创建一个备份,并再用此备份 进行恢复. mysqldump -u root -p test > test.sql mysql -u ro ...

  2. MySQL 数据库的备份和恢复

    MySQL 数据库的备份和恢复 imysql.cn 2006年09月30日 23:56 查看25126次 作者:   [大 中 小] 文章分类:数据库技术 关键字: mysql,mysqldump,导 ...

  3. mysql数据库整体备份和恢复_MySQL 数据库的备份和恢复

    MySQL 数据库的备份和恢复 基本知识>>>>>>> 逻辑备份: 1.mysqldump(数据导出工具) mysqldump options db_name ...

  4. mysql数据库后台命令备份_使用MySQL命令行备份及恢复数据库

    使用MySQL命令行备份及恢复数据库 下文对使用MySQL命令行备份及恢复数据库的方法及步骤进行了详细的介绍,如果您对MySQL命令行方面感兴趣的话,不妨一看. AD: 使用MySQL命令行,可以实现 ...

  5. mysql备份恢复_使用MySQL命令行备份及恢复数据库

    使用MySQL命令行,可以实现对数据库的备份以及恢复,下面就为您介绍使用MySQL命令行实现该功能的详细方法步骤,供您参考. MySQL命令行导出数据库: 1,进入MySQL目录下的bin文件夹:cd ...

  6. MySQL数据库-完全备份及恢复

    MySQL数据库-完全备份及恢复 数据库备份的分类 物理角度: 冷备份:也称脱机备份,特点:关掉数据库再备份 热备份:也称联机备份,特点:开启数据库再备份 温备份:数据库只有可读权限的状态下备份 逻辑 ...

  7. Mysql数据快速备份和恢复方法总结

    说到数据库备份很多人可能会立刻想到用mysql连接工具Navicat可以实现轻松备份,确实这是一种最基本的备份和恢复数据的方法但是很多场景下比如表的数据量比较大,用连接工具不管是导出还是导入都会耗时比 ...

  8. mysql ibata文件_重装系统后,怎么调用之前mysql的数据_mysql

    重装系统后,如何调用之前mysql的数据 前提是:必须保留之前的数据库数据 在介绍此方法之前,提醒各位最好的转移数据的方法为: 在原来MYSQL服务器导出SQL文件,然后再在新的MYSQL服务器导入数 ...

  9. xtrabackup对MySQL数据库的备份及恢复教程

    xtrabackup xtrabackup 是 percona 的一个开源项目,可以热备份innodb ,XtraDB,和MyISAM(会锁表).对MyISAM存储引擎会锁表,也是很郁闷的因为线上使用 ...

  10. mysql fulsh_mysql之备份和恢复(msyqldump、LVM、xtrabackup)

    备份类型: 根据备份时是服务器是否在线: 热备份(HOT): 读写操作不受影响 温备份(WARM): 进可以执行读操作,写操作不能执行 冷备份(COLD): 读写操作均不能进行 根据备份时对数据文件的 ...

最新文章

  1. 剪贴板所有api函数
  2. 【剑指offer】面试题31:连续子数组的最大和
  3. 她半年内举报了755篇问题论文,专挑中国“下手”?还牵扯到北大副校长.........
  4. 【AC自动机】单词(luogu 3966/ybtoj AC自动机-2)
  5. 机器学习实战(MachineLearinginAction) 第一章
  6. 计算机与数学专业的就业前景,2019数学与应用数学专业就业前景和就业方向分析...
  7. PHP5.4 Apache Mysql搭配与多站点配置
  8. 数学建模之统计回归模型详解
  9. 如何在卸载Citrix Receiver之后清理删除残留文件 【Mac】
  10. 计算机word表格计算教程F9,Word表格数据计算与域操作
  11. 【问题描述】在带头结点单链表中查找最大值,将其值与最后一个元素交换,输出交换后的单链表各元素。【输入形式】循环输入若干个整数,以字母结束输入,建立带头结点的单链表。【输出形式】输出最
  12. 迅为IMX6ULL开发板搭建Web服务器(二)
  13. CTP程序化交易入门系列之二:API基本架构及初始化
  14. 什么是加密?有哪些加密类型和加密算法?
  15. 常见传感器的应用领域和工作原理
  16. 2021年1月程序员工资统计,平均14915元
  17. 菜鸟数据分析师对数据可视化的理解—完整篇
  18. Java导出自定义Excel表格,一套组合拳解决
  19. 如何让IE下载时下载内容自动跳转到迅雷等下载软件中
  20. 流量卡计费及相关介绍

热门文章

  1. 抽象类实现接口,子类继承抽象类,这三个之间的关系?
  2. 用git push代码到远程仓库的时候出现错误
  3. 两个集合的交集 java版本
  4. 6.2. ExtUtils::MakeMaker
  5. 打算为IBatisNet 引入自定义Membership和Role
  6. 转:WaitForSingleObject()函数、WaitForMultipleObject()函数
  7. GridView控件RowDataBound事件中获取列字段途径
  8. 《编写可维护的 JavaScript》读书笔记第7章:事件处理
  9. 微信短信验证码注意事项(tp3.2-腾讯云)
  10. linux timeout 格式,Linux内核API wait_for_completion_timeout