October 24 2013

select into outfile

SELECT…INTO OUTFILE ‘file_name’形式的SELECT可以把被选择的行写入一个文件中。该文件被创建到服务器主机上,因此您必须拥有FILE

权限,才能使用此语法。file_name不能是一个原有的文件。原有文件会阻止例如“/etc/passwd”的文件和数据库表被销毁。

SELECT…INTO OUTFILE语句的主要作用是让您可以非常快速地把一个表转储到服务器机器上。如果您想要在服务器主机之外的部分客户主机

上创建结果文件,您不能使用SELECT…INTO OUTFILE。在这种情况下,您应该在客户主机上使用比如“mysql –e “SELECT …” >

file_name”的命令,来生成文件。
SELECT…INTO OUTFILE是LOAD DATA INFILE的补语;用于语句的exort_options部分的语法包括部分FIELDS和LINES子句,这些子句与LOAD

DATA INFILE语句同时使用

语法如下:

select columnlist  from Table WHERE condition  into outfile ‘filename’ [OPTIONS]
fields terminated by ‘VALUE’
fields [OPTIONALLY]  ENCLOSED BY ‘VALUE’
fields ESCAPED BY ‘VALUE’
lines STARTING by ‘VALUE’
lines terminated by ‘VALUE’

[OPTIONS]部分为可选参数,[OPTIONS]部分的语法包括FILED和LINES子句,其可能取值为:
fields子句:在FIELDS子句中有三个子句:TERMINATED BY、 [OPTIONALLY] ENCLOSED BY和ESCAPED BY

TERMINATED BY用来指定字段值之间的符号,例如,“TERMINATED BY ‘,’”指定了逗号作为两个字段值之间的标志,默认为“\t”制表符
LINES子句:在LINES子句中使用TERMINATED BY指定一行结束的标志,如“LINES TERMINATED BY ‘?’”表示一行以“?”作为结束标志,默

认值为“\n”。
SELECT INTO…OUTFILE语句把表数据导出到一个文本文件中,并用LOAD DATA …INFILE语句恢复数据。但是这种方法只能导出或导入数据的

内容,不包括表的结构,如果表的结构文件损坏,则必须先恢复原来的表的结构

——————————————————–select_into_bak.sh—————————–
#!/bin/bash
#FileName:select_into_bak.sh
#Desc:Use select into outfile to backup db or tables

DB=mysql
USER=test
PASSWD=test
HOST=192.168.164.129
BAK_DIR=/data/mysql/backup/$DB
DATE=`date “+%Y-%m-%d %H-%M-%S”`
[ -d “$BAK_DIR” ] || /bin/mkdir -p $BAK_DIR && /bin/chown mysql:mysql $BAK_DIR
/usr/local/mysql/bin/mysql -h$HOST -u$USER -p$PASSWD -e “show tables from $DB” | grep -v “Tables_in” > $BAK_DIR/tables.txt
for table in `cat $BAK_DIR/tables.txt`
do
/usr/local/mysql/bin/mysql -h$HOST -u$USER -p$PASSWD -e “select * from $DB.$table into outfile ‘”$BAK_DIR/$table”.txt’

character set utf8;”
done
cd $BAK_DIR
/bin/tar -czf “$DB-$DATE”.tar.gz *.txt
/bin/rm -f *.txt

exit 0



Copyright 2019. All rights reserved.

Posted 2013年10月24日 by ucjmh in category "mysql

Leave a Reply

Your email address will not be published. Required fields are marked *