这个解析不好弄,其实可以换一种思路,把所有的表名全查出来,然后在按表名生成导出脚本,生成的文件就一个表一个了。
shell样例如下,仅供参考,请在自己测试环境下测试。脚本可以包装在一个大的shell里面一起执行。
一、生成所有的表名
mysql<<EOF
use cpai;
show tables;
quit
EOF
输入结果保持到tmp.txt
二、生成导出单个表数据的脚本
awk 'NR>1' tmp.txt >tables.txt #从第二行开始取
cat tables.txt |awk '{printf "mysqldump 数据库名 %s >%s.sqln",$1,$1}' >mysql_dump_sig.sh
三、执行mysql_dump_sig.sh脚本,既可以导出一个个表到单独的每个文件里面。
mysqldump可以把整个数据库的所有表都备份到一个sql文件里,但随着数据量的增大,往往需要查看历史记录的某个表数据,再把对应的备份sql导入就很耗时间。于是想到,mysqldump备份的时候直接按表来备份到不同的sql文件里,但这样做可能会导致数据不一致,造成以后故障恢复时出问题所以现在想到的方法是,备份的时候还是把所有表备份到一个sql文件里,然后再通过shell做分割。以下是截取开头的部分内容。-- MySQL dump 10.13 Distrib 5.5.20, for Linux (x86_64)---- Host: localhost,Database: misscoquines-- -------------------------------------------------------- Server version,5.5.20-log/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;/*!40101 SET NAMES utf8 */;/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;/*!40103 SET TIME_ZONE='+00:00' */;/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;/*!40014 SET @OLD_FOREIGN_KEY_CHEC