一、数据导入、导出

  • 查看当前数据库版本命令
  • show variables; 输出所有系统变量
  • mysql> show variables like "%version%";
    +-------------------------+------------------------------+
    | Variable_name           | Value                        |
    +-------------------------+------------------------------+
    | innodb_version          | 5.7.17                       |
    | protocol_version        | 10                           |
    | slave_type_conversions  |                              |
    | tls_version             | TLSv1,TLSv1.1                |
    | version                 | 5.7.17                       |
    | version_comment         | MySQL Community Server (GPL) |
    | version_compile_machine | x86_64                       |
    | version_compile_os      | Linux                        |
    +-------------------------+------------------------------+
    8 rows in set (0.00 sec)
    

1、搜索路径

1.1、查看搜索路径

  • 5.7版本的数据库要求,数据的导入导出必须在指定的目录。
    • /var/lib/mysql-files/ 系统默认的

mysql> show variables like "%secure_file_priv%";
+------------------+-----------------------+
| Variable_name    | Value                 |
+------------------+-----------------------+
| secure_file_priv | /var/lib/mysql-files/ |
+------------------+-----------------------+
1 row in set (0.00 sec)

1.2、修改系统默认的搜索路径

[root@db1 ~]# mkdir /myload
[root@db1 ~]# vim /etc/my.cnf
[mysqld]
secure_file_priv="/myload"
[root@db1 ~]# chown mysql /myload/		//必须要保证mysql用户对这个目录有读写的权限
[root@db1 ~]# ls -ld /myload/
[root@db1 ~]# systemctl restart mysqld

2、数据导入

  • 把系统文件的内容存储到数据库的表里
  • 批量存储数据
  • 命令格式
  • load data infile “目录名/文件名”
    into table 库名.表名
  • 数据导入操作步骤
    • (1)建表——表结构应该根据数据的内容来制定

    • (2)把系统文件拷贝到检索目录下

    • (3)导入数据

    • (4)查看数据

2.1、第一步建表

  • 示例
mysql> create database db3 ;
mysql> create table db3.user(
    -> name  char(30) , password  char(1) , uid int  , gid  int  ,
    -> comment  varchar(150) , homedir  char(80) , shell  char(60) 
    -> );
mysql> desc db3.user;

2.2、第二步拷贝数据到检索目录

mysql> system cp  /etc/passwd  /myload/		//system调用系统命令
mysql> system  ls /myload/
passwd

2.3、第三步导入数据

mysql>  load data infile "/myload/passwd"
    -> into table db3.user
    -> fields  terminated by ":" 	//定义分隔符,必须要和passwd文件的分隔符一致
    -> lines terminated by "\n";	//换行符
  • 注意防火墙和selinux可能会对导入数据产生拦截作用

  • 2.4、第四步查看数据

  • mysql> alter table db3.user  add  id  int  primary key  auto_increment first;	//添加id字段,方便查看
    Query OK, 0 rows affected (0.37 sec)
    Records: 0  Duplicates: 0  Warnings: 0
    
    mysql> select  * from db3.user ;
    

3、数据导出

  • 把表记录存储到系统文件里
  • 功能:批量处理数据
  • 命令格式:
sql查询命令  into  outfile  "目录/文件名"  [ fields  terminated by "列间隔符号" lines terminated by  "行间隔符号" ];
  • 注意事项
  • 示例
    • 将id小于等于10的行导出

mysql> select  * from db3.user where id <= 10  into outfile "/myload/a.txt";

mysql> system cat /myload/a.txt
    • 示例
    • 将name和shell两列数据导出,并以###为分隔符

  • mysql> select  name ,shell from db3.user  into outfile "/myload/b.txt" fields terminated  by "###";
    Query OK, 21 rows affected (0.00 sec)
    
    mysql> system cat /myload/b.txt
    
  • 示例
    • 将id小于等于3的name、shell和uid导出,字段间的分隔符为"???",行间用"###"

mysql> select name , shell ,  uid  from  db3.user where id <= 3 
    -> into outfile  "/myload/c.txt" 
    -> fields terminated by "????" lines terminated by "###" ;
mysql> system cat /myload/c.txt