我已经编写了一个PHP脚本来使用以下方法转储我的数据库:
system("mysqldump -h".$dbservername." -u".$dbusername." -p".$dbpassword." ".$dbname." > backup.sql");
readfile("backup.sql");
这很好,我的Java客户端代码
final String output = doPost("mydomain/getdb.php");
try (PrintWriter out = new PrintWriter("/home/user/desktop/backup.sql")) {
out.println(output);
out.close();
}
catch(Exception e)
{
// do something...
}
工作正常。输出看起来像我期望的那样,例如。
-- MySQL dump 10.13 Distrib 5.6.39, for Linux (x86_64)---- Host: localhost Database: mydomain_mydb-- -------------------------------------------------------- Server version 5.6.39-cll-lve/*!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_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;---- Table structure for table `Projects`--DROP TABLE IF EXISTS `Projects`;/*!40101 SET @saved_cs_client = @@character_set_client */;/*!40101 SET character_set_client = utf8 */;CREATE TABLE `Projects` ( `jobno` int(11) NOT NULL AUTO_INCREMENT, `state` int(11) NOT NULL, ... etc ...
(虽然它只在一行上,而不是很好地格式化成行)
无论如何,当我尝试将这个.sql
文件导回PHPMyAdmin时,在一个新创建的新数据库(没有表等)中,它可以正常工作,但不会添加任何表或数据。我得到绿色(没有出错)消息:
导入已成功完成,已执行1次查询。 (backup.sql)
和
MySQL返回一个空结果集(即零行)。 (查询耗时0.0005秒。)
任何想法可能出错?
PS出于某种原因我无法添加mysqldump
代码...
答案 0 :(得分:0)
我现在知道什么是错的。我只是尝试直接从我的服务器导入backup.sql
,这很好。
问题是我的客户端正在接收数据作为单个字符串而没有回车。
以下客户端下载代码有效:
BufferedReader buffer = new BufferedReader(new InputStreamReader(conn.getInputStream()));
Writer writer = new OutputStreamWriter(new FileOutputStream(new File(filename)));
int c;
while ((c = buffer.read()) != -1) {
writer.write((char) c);
}
writer.close();
buffer.close();
conn.disconnect();