sql文件比较大,一般会压缩至大概十分之一大小。 一、压缩文件 非打包 tar -czvf test.tar.gz test.sql //压缩 test.sql文件为test.tar.gz(会保留原文件) tar -czvf test.tar.gz test/ //压缩目录下的文件 (不过目录的压缩效果就通常了) 二、列出压缩文件内容 tar -tzvf test.tar.gz rw-r--r-- root/root 0 2010-05-24 16:51:59 test.sql 三、解压文件 tar -xzvf test.tar.gz (会保留原文件)
今天遇到一个问题,要将一个很大的sql脚本导入数据库,谁可想这个文件已经40G多。刚开始直接导入,结果导入了几个G以后就卡死再也不执行了,在网上查了一下,感受是文件太大了,内存不够没法一次性缓存这么多内容。因而我就想到了拆分文件的方式,被我拆成了100多个文件,以后找到上一次执行的位置,一个个小文件执行,最终完美解决了问题。
只不过有一个注意事项,因为文件是按行拆分的,因此可能会将建立表的create语句截断了,因此执行这个文件以前要先检查一下,若有问题就编辑一下文件再执行。mysql
1.功能:
将文件分割成多个git
2.语法:
split [OPTION]... [INPUT [PREFIX]]web
3.描述:
将输入文件'INPUT'分割,输出固定大小的文件片断"PREFIXaa,PREFIXab,...",默认大小为1000行,而且PREFIX的默认值为'x',若是没有指定输入文件(INPUT文件),或者输入为-,那么会从标准输入读取。sql
4.经常使用参数
-a, --suffix-length=N
使用的后缀的长度,默认长度为2,例如'aa','ab'等后缀,其长度就是2。
-b, --bytes=SIZE
指定每一个输出文件片断的大小。
-C, --line-bytes=SIZE
指定每一个输出文件片断的最大行字节(???)。
-d, --numeric-suffixes
指定输出文件片断后缀为数字而不是默认的字母形式。
-l, --lines=NUMBER
指定每一个输出文件片断的行数。数据库
以上,指定的大小"SIZE"能够用以下的方式指定单位:后缀为b表示512字节,后缀为k表示1K,后缀为m表示1M。缓存
5.本次使用
每300行拆分红一个文件,拆分后的文件名以name开头,以数字做为后缀,后缀长度为3。(好比:name001)
split -l 300 test.sql -d -a 3 nameide
一、mysql -uxxxx -pxxxx -h119.xxx.xxx.xxx --port=36991 -A;(这咱们链接数据库的命令,须要带ip和端口。带上-A 在切换数据库时就不用预读表数据,要否则会很卡)命令行
2.show databases ; 查询数据库。日志
use xxxx; 使用某个数据库code
5.一个报错处理
导入完成以后,在打开数据表示,mysql报错! Can't create/write to file '/tmp/#sql_c62_0.MYI' ......
重启数据库也报错了,因而查看日志:
cd /var/log/
tail -50 mysqld.log
日志中也是这样的错误
/usr/libexec/mysqld: Can't create/write to file '/tmp/ibyPwDHe' (Errcode: 13)
解决:
看了下系统目录/tmp的权限不够,以前设置的是1666 改为 1777就能够了。
这方面的说明,可查看个人另外一篇文章:https://blog.51cto.com/ycgit/1406909