mysql---数据导入导出的几种情况汇总
数据导出成.sql文件
第一种方式使用 mysqldump工具:
(linux 和window 下是同样的语法只是路径的写法不同而已)
1、导出mysql 中的数据库 databaseName
(1)、进入mysql的安装目录 …….bin
(2)、mysqldump –hlocalhost –uroot –p databaseName >d:\dump.sql (window)
mysqldump –hlocalhost –uroot –pdatabaseName >/dump.sql (linux)
(3)、mysqldump -hlocalhost -uroot -padmin --databases databaseName > d:\dump.sql (2 3 是一样的)
2、导出数据库服务器上的所有数据库
mysqldump -hlocalhost -uroot -padmin --all-databases > dump.sql
3、导出mysql数据库databaseName的tb_user表及数据
进入mysql安装目录C:\Program Files\MySQL\MySQLServer 5.5\bin>
mysqldump –hlocalhost –uroot –padmin databaseName tb_user > d:\dump.sql
mysqldump -hlocalhost -uroot -padmin databaseName tb_user --result-file=dump.sql
( 这样写是为了在windows下方便)
4、导出mysql数据库databaseName的结构未实现
进入mysql安装目录C:\ProgramFiles\MySQL\MySQL Server 5.5\bin>
mysqldump –hlocalhost –uroot –padmin databaseName -add-drop-table>d:\dump.sql
5、mysql对导入文件大小有限制,最大为2M,可修改配置
在php.ini中修改参数:memory_limit=128M,upload_max_filesize=2M,post_max_size=8M
修改upload_max_filesize=200M;memory_limit=250M,post_max_size=2000M
第二种方式 使用 : select into outfile :SQL命令如下
(这种格式也是在linux下,window修改路劲书写方式)
// 将你选中的数据导出到这个指定的目录下
select * into outfile '/tmp/bump.txt'
// 属性使用 逗号分开
fields terminated by ','
//
optionally enclosed by ' " '
// 一行结束的标志位换行符
lines terminated by '\n'
// 这是你要导出的数据库表
from linuxtest.test2 ;
使用select into outfile 以及load data infile 这种方式比 导出 .sql这种文件更加紧凑,而且速度也更快!
数据导入导出到csv文件
MySQL: 使用 load data 快速导入数据
建表
USE test;
CREATE TABLE test_table (
id bigint NOT NULL AUTO_INCREMENT,
name varchar(32) NOT NULL DEFAULT '' COMMENT '名字',
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
生成数据
生成 2000w 条记录。
Python 代码:
// 文件名: gen_test_table_data.py
for i in range(1, 2000_0000):
print('{},name{}'.format(i, i))
生成文件:
$ python3 gen_test_table_data.py > /tmp/data.csv
/tmp/data.csv中的内容长这个样子:
1,name1
2,name2
配置 MySQL
默认情况下,MySQL 禁止导入/导出数据,可以通过配置secure_file_priv 解决。
找到 my.cnf(linux 下的位置是/etc/my.cnf),添加secure_file_priv=''。然后重启MySQL。
如果只允许处理 /tmp目录下的文件,可以配置成secure_file_priv='/tmp'。
在mysql客户端中,可以通过select @@secure_file_priv; 或者show variables like '%secure%';查询配置的值。
导入数据
LOAD DATA INFILE '/tmp/data.csv' INTO TABLE test_table FIELDS TERMINATED BY ','
2000w条数据导入,在我的电脑上耗时约40秒。
// 导出数据
select * from test_table
into outfile '/tmp/test_table.csv'
fields terminated by ',' optionally enclosed by '"'
lines terminated by '\r\n';
查看导出文件的内容:
$ cat /tmp/test_table.csv
1,"name01"
2,"name02"
将数据导入到指定的数据库
第一种导入方式:
(linux下和Windows 下语法是一样的,只是路劲的书写方式不同而已)
1、创建一个空数据库
2、进入mysql安装目录bin下
3、导入命令 mysql -uroot –p密码 数据库名 < 要导入的表数据(d:\bbs.sql)(将选定的表导入到指定的数据库)
mysql -uroot –padmin databaseName <d:\dump.sql (window)
mysql -uroot –padmin databaseName < /dump.sql (linux)
(将备份的整个数据库导入)
4、导入命令: mysql -u用户名 -p密码 < 要导入的数据库数据
mysql -uroot -padmin < d:\dump.sql (window)
mysql -uroot -padmin < /dump.sql (linux)
(将备份出来的数据库导入,这里没有写数据库名,也可以写但要求是要写同样的名称)
第二种使用Load Data infile 命令导入:
(这里的格式是在 linux下的在window 下修改路劲的写法就可以)
// 要导入的数据
Load data infile '/tmp/dump.txt'
// 数据要导入到那个 数据库的那个表, 前提是要有这个表,否则会报 表不存在错误!
into table linuxtest1.test
// fields (属性 字段) terminated (终止,结束) 属性之间的分隔符 为逗号
fields terminated by ','
// optionally(需要,可选择 ) enclosed(封闭) 也就是字符串使用引号
optionally enclosed by ' " '
// 换行符结束一行
lines terminated by '\n' ;
第三种导入方式即 使用source命令:
Mysql> Use databasename;
Mysql>Source d:\dump.sql
浙公网安备 33010602011771号