如何从MySQL数据库单个表中备份部分数据?
MySQL 导出符合条件的部分表数据为带表头CSV的实现方案
你在PostgreSQL中通过COPY命令管道输出指定筛选条件的CSV数据的操作,在MySQL中可以通过官方命令行客户端直接实现,不需要额外安装工具,按你使用的MySQL版本选择对应写法即可:
MySQL 8.0.22及以上版本(推荐)
新版客户端原生支持CSV输出参数,行为和PostgreSQL的COPY ... TO STDOUT WITH(FORMAT CSV, HEADER)完全对齐,输出直接走客户端标准输出,支持管道传递、重定向到文件:mysql -h ${DB_HOST} -P ${DB_PORT} -u ${DB_USER} -p${DB_PASSWORD} ${DB_NAME} \ --csv \ -e "SELECT * FROM \`${TABLE}\` ${WHERE};"命令默认第一行输出表字段名作为表头,输出格式符合标准CSV规范,字段值中的引号、换行符会自动做转义处理。
如果不想在命令中明文写数据库密码,可以把-p${DB_PASSWORD}改成-p,执行命令时会交互式提示输入密码。MySQL 5.7等低于8.0.22的旧版本
旧版客户端没有原生CSV输出参数,可以通过批处理模式输出tab分隔的结果,再通过简单文本转换得到标准CSV:mysql -h ${DB_HOST} -P ${DB_PORT} -u ${DB_USER} -p${DB_PASSWORD} ${DB_NAME} \ -B -e "SELECT * FROM \`${TABLE}\` ${WHERE};" \ | awk 'BEGIN{FS="\t";OFS="","} {for(i=1;i<=NF;i++) gsub(/"/,"\"\"",$i); print "\"" $0 "\""}'
注意:不建议使用
SELECT ... INTO OUTFILE语法实现该需求,该语法会将文件写入MySQL服务端所在主机的文件系统,需要账号具备特殊的FILE权限,且无法在客户端侧直接获取输出流,不适配管道操作的场景。
内容的提问来源于stack exchange,提问作者Eugen Konkov
相关产品推荐
相关产品推荐

