一、逻辑的导出
导出本身时一种辅助数据备份的方法,使用与各种引擎,例如常见的innodb、myisam···
导出是对数据进行备份,对表中的一列或者多列进行备份,备份的仅仅是数据记录,不能备份表的结构或者新建数据库等等。
案例:存在一张表db.itheima.tb_student,现将表中数据导出到指定目录/tmp/sqlbak/
mysql>select * into outfile '/tmp/sqlbak/tb.student.txt' from db.itheima.tb_student;
导出时需注意:
- 对my.cnf配置逻辑导出的路径
vi my.cnf
[mysqld]
....
secure_file_priv=/tmp/sqlbak
- mysql账号对/tmp/sqlbak目录有写的权限
setfacl -m u:mysql:rwx /tmp/sqlbak
二、逻辑的导入
同样通过案例来说明
案例:恢复tb_student的数据,也就是数据的导入
mysql>load data local infile '/tmp/sqlbak/tb_student.txt' into table tb_student;
也可以使用另一种非交互式的方法
mysqlimport db_itheima /tmp/sqlbak/tb_student.txt -p
tips:
导出只能备份数据,因此表结构改变,是不能够恢复的;
作为一种辅助恢复手段,比较常见于测试环境造数据的场景;
当然,还有另一种经典场景:
可以把一些规则的文本文件导入到数据库中
案例:将/etc/passwd文件导入到数据库’password’这张表中
第一步,需要在数据库中建立’password’这张表
mysql>use db_itheima
mysql>create table `password`(
`uname` varchar(50) default null,
`pass` varchar(5) default null,
`uid` int(10) default null,
`gid` int(10) default null,
`comment` varchar(255) default null,
`home` varchar(50) default null,
`shell` varchar(50) default null)
engine=innodb default charset=utf8mb4;
第二步,将/etc/passwd文件拷贝到/tmp/sqlbak目录下,名字需要与数据库中的表名相同
cp /etc/passwd /tmp/sqlbak/password.txt
第三步,将文件导入
mysqlimport db_itheima --fields-terminated-by=':' --lines-terminated-by='\n' /tmp/sqlbak/password.txt -p
--fields-terminated-by : 指定导出文件的分隔符
--lines-terminated-by : 指定每一行的结尾使用的符号;\n表示换行符