⒈select ... into outfile导出数据/load data infile导入数据
⑴创建新表,定义表结构
  ⅰ方法一:在同一数据库中
      ①复制表结构及数据到新表
      CREATE TABLE newtable  SELECT * FROM oldtable
      ② 只复制表结构到新表
       CREATE TABLE newtable  SELECT * FROM oldtable WHERE 1=2
  ⅱ方法二:适应库与库之间,或者单库
      ①只复制表结构到新表
     导出:
     mysqldump -uroot -pdbpasswd -d dbname [tablename]>createtable.sql;
     导入:
      mysql>source /path/createtable.sql  or  mysql -u root -p <createtable.sql;
    mysql> source /usr/yzx_loadtest/createbus_dt.sql;
   Query OK, 0 rows affected (0.01 sec)
⑵导出/导入表数据
导出数
select * from mytbl into outfile '/tmp/mytbl2.txt' fields terminated by ',' enclosed by '"' lines terminated by '\n';
select * from bus_dt into outfile '/usr/yzx_loadtest/bus_dtbackdata.txt' fields terminated by ',' enclosed by '"' lines terminated by '\n';
导入数据
LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'file_name.txt'  [REPLACE | IGNORE]  INTO TABLE tbl_name  [FIELDS  [TERMINATED BY 'string']  [[OPTIONALLY] ENCLOSED BY 'char'] [ESCAPED BY 'char' ] ]     [LINES  [STARTING BY 'string']  [TERMINATED BY 'string'] ]
load data infile '/usr/yzx_loadtest/bus_dtbackdata.txt' into table bus_dt fields terminated by ',' enclosed by '"' lines terminated by '\n';
关于NULL值
null值被处理成\N

⑶大数据表如何节省导入/导出的时间


ⅰ对于Myisam类型的表,可以通过以下方式快速的导入大量的数据。 ALTER TABLE tblname DISABLE KEYS; loading the data ALTER TABLE tblname ENABLE KEYS; 这两个命令用来打开    或者关闭Myisam表非唯一索引的更新。在导入大量的数据到一个非空的Myisam表时,通过设置这两个命令,可以提高导入的效率。 对于导入大量数据到一个空的Myisam表,默认就是先    导入数据然后才创建索引的,所以不用进行设置。


ⅱ对于Innodb类型的表,有以下几种方式可以提高导入的效率:
①因为Innodb类型的表是按照主键的顺序保存的,所以将导入的数据按照主键的顺序排列,可以有效的提高导入数据的效率。如果Innodb表没有主键,那么系统会默认创建一个内部列作    为主键,所以如果可以给表创建一个主键,将可以利用这个优势提高导入数据的效率。
②在导入数据前执行SET UNIQUE_CHECKS=0,关闭唯一性校验,在导入结束后执行SET UNIQUE_CHECKS=1,恢复唯一性校验,可以提高导入的效率。
③如果应用使用自动提交的方式,建议在导入前执行SET AUTOCOMMIT=0,关闭自动提交,导入结束后再执行SET AUTOCOMMIT=1,打开自动提交,也可以提高导入的效率。


ⅲ对于表级上千万或者上亿,需要分文件进行导入;
为什么?load data file需要写二进制日志,另外如果是主从复制,还会有延迟,如果失败,回退仍需要时间。
查看插入数据的行数:
[root@node1 yzx_loadtest]# wc -l bus_dtbackdata.txt
1021 bus_dtbackdata.txt
利用split进行分割:
[root@node1 yzx_loadtest]# split -l 500 bus_dtbackdata.txt bus_dtbackdata.txt001
[root@node1 yzx_loadtest]# ls -l
total 48
-rw-rw-rw- 1 mysql mysql 17247 Apr  9 11:45 bus_dtbackdata.txt
-rw-r--r-- 1 root  root   7907 Apr  9 13:40 bus_dtbackdata.txt001aa
-rw-r--r-- 1 root  root   8939 Apr  9 13:40 bus_dtbackdata.txt001ab
-rw-r--r-- 1 root  root    401 Apr  9 13:40 bus_dtbackdata.txt001ac
-rw-r--r-- 1 root  root   1640 Apr  9 11:50 createbus_dt.sql
[root@node1 yzx_loadtest]#

分割之后使用:
load data infile '/usr/yzx_loadtest/bus_dtbackdata.txt001aa' into table bus_dt fields terminated by ',' enclosed by '"' lines terminated by '\n';
load data infile '/usr/yzx_loadtest/bus_dtbackdata.txt001ab' into table bus_dt fields terminated by ',' enclosed by '"' lines terminated by '\n';

注意事项:必须保证导入的库与导出的库的字符集相同
 show variables like 'char%'
 set ...=gbk;