省去让运维从线上服务器下载sql文件的麻烦
sql内容
运行sql文件,把线上数据库导入到本地,那不外乎3步
1.检查数据库表是否存在
2.创建数据表(结构)
3.插入数据
检测是否存在表并创建
1 2 3 4 5 6
| DROP TABLE IF EXISTS `table`; CREATE TABLE `table` ( `id` int(10) NOT NULL AUTO_INCREMENT, `name` varchar(255) NOT NULL COMMENT '名称', PRIMARY KEY (`id`) USING BTREE ) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;
|
插入数据
1 2 3 4
| INSERT INTO `table` VALUES ('1', 'admin'), ('2', 'editor');
|
需要的sql语句差不多就这些,用php开始拼接
PHP拼接sql语句
php部分没用原生,用的TP5框架
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| $info = "-- ----------------------------\r\n"; $info .= "-- 日期:".date("Y-m-d H:i:s",time())."\r\n"; $info .= "-- ----------------------------\r\n\r\n"; file_put_contents($to_file_name,$info,FILE_APPEND); //crate 语句 foreach($tableList as $val){ $sql = "show create table ".$val; $row = $this->show_createtable($sql); $info = "-- ----------------------------\r\n"; $info .= "-- Table structure for `".$val."`\r\n"; $info .= "-- ----------------------------\r\n"; $info .= "DROP TABLE IF EXISTS `".$val."`;\r\n"; $sqlStr = $info.$row.";\r\n\r\n"; //追加到文件 file_put_contents($to_file_name,$sqlStr,FILE_APPEND);
}
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| foreach($tableList as $val){ $sql = 'select * from '.$val; $data = Db::query($sql); $info = "-- ----------------------------\r\n"; $info .= "-- Records for `".$val."`\r\n"; $info .= "-- ----------------------------\r\n"; file_put_contents($to_file_name,$info,FILE_APPEND); //数据插入'
$row = $data; if(!empty($row)){ $sqlStr = "INSERT INTO `".$val."` VALUES ";
foreach($row as $zd){
$sqlStr = $sqlStr.' ('; foreach ($zd as $v){ if(empty($v)){$v=0;} $v = str_replace("'","\'",$v); $sqlStr .= "'".$v."', "; } //去掉最后一个逗号和空格 $sqlStr = substr($sqlStr,0,strlen($sqlStr)-2); $sqlStr .= "),\r\n"; } $sqlStr = substr($sqlStr,0,strlen($sqlStr)-3); $sqlStr .= ";\r\n"; file_put_contents($to_file_name,$sqlStr,FILE_APPEND); } }
|
生成插入语句的时候要注意把’ 单引号转义,不然导入数据库要报错
发起下载
先判断文件是否生成成功
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| if(!file_exists($to_file_name))
{
echo "下载文件不存在!"; exit;
}
$file_size = filesize($to_file_name);
Header("Content-type: application/octet-stream");
Header("Accept-Ranges: bytes");
Header("Accept-Length:".$file_size);
Header("Content-Disposition: attachment; filename=".$to_file_name); @readfile($to_file_name); exit;
|
到这里就完成了下载数据库sql文件的过程了。
最后更新时间: