8.Mysql之数据的导入和导出(数据的迁移)

1.前言

  作为MySQ DBA可能经常会遇到这种情况,就是需要将某个库下的某一张表的数据导入到另外一个库下,这时可以用以下方法进行

2.使用Mysqldump

  mysqldump是一款强大的备份工具,关于它的更多介绍我这里就不一一累述,具体可以看我的Mysql工具篇中关于它的介绍

  2.1导出数据

     --> mysqldump -u用户名 -p用户密码  -h主机 -P端口号  --master-data=1  --single-transaction   zmc   t >/tmp/t.sql

  2.2导入数据(这里可以用mysql命令也可以用source命令),注意这里导入时要进入数据库内进行。

3.使用select xxxx into outfile  --- load data 进行数据迁移

  说明:该命令一般用于对某张表进行数据导出操作,且导出的只是数据,而不包括数据结构。因此,在使用这个命令的时候,我们在导入数据之前需要先创建好表结构文件(也就是创表语句),然后再使用load data infile  'file_name'  into table table_name语句进行数据导入。

  3.1举例:  

##导出语句

  -->select * from titles into outfile '/tmp/titles1.csv'  fields terminated by ',' optionally enclosed by '"' lines terminated by '
';


##这里要先建表结构文件(用创表语句),跨库进行创建表结构

  -->create table   db1.tablename  like  db2.tablename;

##导入语句

  -->load data infile  '导出是的文件的绝对路径'  into  table table_name

##注意以上命令都是在mysql客户端中执行,而不是linux系统命令下

4.利用物理的复制的方法进行数据的拷贝(重点)

   有时候不知道大家有没有想过,如果我们可以直接把一张表(表定义文件.frm和表数据文件.ibd)通过在cp命令拷贝到另一个数据库下或者另一个实例下就能使用而不用以上的命令进行导入导出该是多好呀,在之前的早期版本中,Mysql用的是Myism存储引擎的时候就可以这样做了。不过下面也能介绍一种物理拷贝的方法进行数据的迁移。

  4.1步骤:  

第一步:先去目的数据库下创建一张和源数据表结构相同的表
       create table db1.tale_name like db2.table_name;

第二步:然后再删除目的数据表中的数据文件(xxx.idb)
        alter table table_name  discard tablespace;   

第三步:在源表中执行flush table 源表 for export 命令从而生成一个源表.cfg文件

第四步: 将源数据库中的表数据文件(.ibd)和源表.cfg文件物理拷贝到目录数据库下
        cp  -ar  源数据文件.ibd      目的目录下
        cp  -ar  源数据文件.cfg      目的目录下

第五步:释放flush table执行时获取的MDL共享锁
         unlock  tables

第六步:执行导入数据命令(实则是注册表的元数据信息到表空间中)
        alter table table_name(目的数据文件)  import tablespace;

##第三步和第五步之间不允许出现DDL操作的出现,会阻塞DDl语句的。

4.2 以上过程说明(重点):

  首先是alter table for export 这个命令的说明:

  • 这个命令是为了将内存中关于这个表的数据刷新到磁盘上,确保数据都能被binlog所记录
  • 这个操作需要flush table 或者 reload权限
  • 这个操作会持有当前表的共享MDL锁,阻止其他会话对这个表做DDL(或持有排他锁),且该锁不会在该语句执行后自动释放,需要手工unlock tables进行释放
  • 执行完这个flush操作后会在该数据库下创建一个.cfg文件,该文件包含了当前表的原信息
  • 因此这种物理复制更适合在从库上停止复制关系,然后用这种物理复制的方法进行数据的迁移(复制),所以如果有业务操作当前的原表是,不建议使用这种方法。  

  

      

    

  

原文地址:https://www.cnblogs.com/zmc60/p/14903915.html