phpmyadmin数据库导入导出问题
错误
有可能您发现了 SQL 分析器的臭虫。请仔细检查您的查询,包括引号是否正确及是否匹配。其它可能的失败原因可能由于您上传了超过引用文本区域外的二进制数据。您还可以在 MySQL 命令行界面试一下您的查询。如果可能的话,以下会列出 MySQL 服务器的错误输出,这可能对您解决问题有一定的帮助作用。如果您仍然有问题,或者命令行界面执行成功而分析器出错,请将您的 SQL 查询缩减到导致问题的某一条语句,然后和下面剪切区中的数据一起提交一个臭虫报告:
----开始剪切----
………………(各种字符)
----结束剪切----
----开始原文---
………………(各种乱码)
在然后,就各种baidu、google、sougou。。。没找到解决办法。
记得过去搭建DZ站时也遇到这种问题。当时,就是无意的在导入时随便点了编码选择某项就导入进去。。可这次行不通,纠结。。再次百度看看有没有类似的修复软件。没找到= =#。 用Notepad++打开sql看看,没乱码,比较可以导入的sql文件。高版本的都可以导入,低版本应该不是问题,格式也没错。按照以往对这些上传文件思路。
在本地mysql里尝试导入.
先改下名字,上传看看。。发现没报上面的错误了!!!不过还是有 一行错误提示(英语也懒的去翻译了)。
然后重压缩在导入。。!!!OK,本地的mysql可以导入了。
去导入空间里的mysql.
压缩了的SQL还是报上面的哪个上面 臭虫 错误。我去。。。解压后上传,只导入了多说的表,外加 一行错误提示。太坑了,不懂。
索性本地上已经导入完整,再次从本地的mysql里导出,在上传。。解决。
总结:
看数据库内容是否完整且是否乱码(如果是,基本上就没救了= =)。
本地搭建phpmyadmin尝试导入(我用的是phpStudy绿色版的)
在然后各种主流、非主流思路。(编码转换、版本比较、格式比较……)
(我是改文件名后压缩本地mysql,在然后导出本地,在导入到空间,貌似有运气成分,呵呵。)
百度上说,可以用mysql自带的修复工具,尝试修复下。我数据库格式和内容都完整,且也懒得去装,就没有尝试了!
Ps:在也不用phpmyadmin来备份了。。= =
注意以下事项:
必要知识:
mysql编码:
在mysql的安装目录,如:
E:\Program Files\MySQL\MySQL Server 5.0\my.ini
可以找到mysql库的编码,大部分情况下,可以设置为uft-8:
default-character-set=utf8
或gbk:
default-character-set=gbk
编码不对,就会造成无法导入.修改编码后要重启数据库才会生效.
1.条件:在同一台服务器,
mysql数据库可以用平台的导出导入功能正常备份及还原.
2.条件:不同服务器上,在my.ini编码一致的情况下,
mysql数据库可以用平台的导出导入功能正常备份及还原.
2.条件:不同服务器上,在my.ini编码不一致的情况下,
必须修改my.ini成为一致的编码,mysql数据库才可以用平台的导出导入功能正常备份及还原.
3.对于用phpmyadmin或其他工具导入的文件,您需要再次加工后,才能用平台的导入功能:
以phpmyadmin为例,导出后,将生成的SQL语句另存为一个.sql文件,然后,用记事本修改它:
(1)找到CREATE DATABASE开头的这一行如:
CREATE DATABASE `数据库名` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci;
在前面加上--符号,取消这行的运行权(原因是导入时是用普通用户角度导入,不允许建立数据库)
这样,才有可能用平台的导入功能导入.
(2)然后,您可以看看这个库的编码是否和您服务器上的一致
如果编码不一致,那么,
<1>要么用phpmymyadmin重新备份成编码一致的.sql文件才能导入.(在phpmyadmin登陆的首页可以选编码)
<2>要么是修改my.ini中的编码,并重启Mysql才能导入(重启Mysql可以在服务器上,管理工具,服务管理中重启),这种方式成功机会高一些,建议这样操作.
一、数据库的导出
一般而言,数据库的导出是为了备份或者为了数据库的移置。那么导出时我们一般选择SQL或者Excel,而不选择Word,PDF等。导出时选择要导出的表或者所有表。选项选择时要注意,要选择没有必要的选项,如果选择了其他选项会给数据库入库带来麻烦或错误。那么到底选择什么呢?
在结构选项(structure)选项中,我们一般使用Add if not exists,Add auto_increment value,Enclose table and field names with backquotes(使用中文相应地翻译成汉字就成),也就是在选项的前面框内打勾(你不会告诉我这个你不会吧),在数据(data)选项中选择 Complete inserts,Extended inserts,Use hexadecimal for BLOB,Export type 为Insert,当然如果你是为了更新或替换可选择UPDATE或replace。当Save as file前打勾时,会自动存为文件(推荐),然后按Go,这样数据库就存为zip,gzip或bzip格式了。
二、数据库的导入
尤其要注意的是,我在数据库的导入时先建好了与导出数据库同名的一个空数据库(没 有表的)才能导入,否则经常报错。建好了数据库后点击相应数据库进入(当然要在phpMyAdmin环境下了),这时我们再点击Import按纽,忘记说 了,如果你选择的是压缩的导出结果,最好先解压成一个文件形式,虽然phpMyAdmin说可以识别压缩文件(Imported file compression will be automatically detected from: 无, gzip, zip),其实还是识别不了的:<),不然,phpMyAdmin会告诉你发现了臭虫(真有臭虫倒好),字符集选择与导出时一样,默认utf8,然 后点击Go或执行就OK了,这样数据库就移到了另一个地方,同时也方便你移站了。
临时写的一个东西省时间而写的,因为有几千个产品带大图,所以我们写了这么一个程序了,希望对各位有帮助。
目录效果如
导入方法
http://www.111cn.net/ a.php?typeid=你的id&path=你的目录
处理php文件
代码如下 | 复制代码 |
$typeid = $_GET['typeid']; $path = $_GET['path']; if( $path =="" )
$sql2 ="INSERT INTO `dedecms_addonarticle17` (`aid`, `typeid`, `body`, `redirecturl`, `templet`, `userip`, `s_type`) VALUES mysql_query( $sql3 ) or die( mysql_error().$sql3 ); echo '导入成功'; print_r($array); |
之后碰到一个小问题,就是导入数据在栏目可以看到,但在所有数据中看不到记录,生成时只有选择栏目生成才可以但用一键生成有问题,这个时我在发布时间是固定一个以前的时间了,大家可以使用time函数来获取当前时间了。
本站原创文章,转让注明来自http://www.111cn.net/phper/php.html
用 Memcache 可以缓解 php和数据库压力下面代码是解决高负载下数据库写入瓶颈问题。遇到最实用的:写入ip pv uv的时候 ,用户达到每分钟几万访问量,要记录这些数据,实时写入数据库必定奔溃
用以下技术就能解决。
还有如用户注册,同一时间断内,大量用户注册。可以缓存后一次性写入到数据库。
代码如下:
代码如下 | 复制代码 |
public function cldata(){ $memcache_obj = new Memcache; $memcache_obj->connect('127.0.0.1', '11211'); $all_items = $memcache_obj->getExtendedStats('items'); foreach($all_items as $option=>$vall){ if (isset($all_items[$option]['items'])) { $items = $all_items[$option]['items']; foreach ($items as $number => $item) { $str = $memcache_obj->getExtendedStats('cachedump', $number, 0); $line = $str[$option]; if(is_array($line) && count($line) > 0){ foreach($line as $key => $value) { $keys[] = $key; } } } } } dump(count($keys));//获取到key if(count($keys)>50){//要写入的数据条数 $end=50; }else{ $end=count($keys); } for($i=0;$i<=$end;$i++){ if(!strstr($keys[$i],'datadb')) continue; $ksv = str_replace('datadb','',$keys[$i]); /*$logdata = unserialize(S('login'.$ksv));//登录写入 if(is_array($logdata)){ $this->addsuidinlogin($logdata[0],$logdata[1],$logdata[2],1); } */ /*$sdata = unserialize(S('regadd'.$ksv));//注册写入 if(is_array($sdata)){ $this->baiduad($sdata[0],$sdata[1],$sdata[2],$sdata[3],$sdata[4],1); } */ $regdata = unserialize(S('datadb'.$ksv)); $ress[]=$regdata; S('datadb'.$ksv,null); } $addb = M()->db(66,C('DB_WEB_AD'));//批量写入 addall $addb->table('mj_ad_count')->addall($ress); echo M()->getLastSql(); } |
附:
可以使用的工具如:memadmin 还有memadmin 文档。
首先我们需要了解下查询MySQL数据库/表相关信息的SQL语句:
代码如下 | 复制代码 |
SHOW DATABASES //列出 MySQL Server 数据库。 SHOW TABLES [FROM db_name] //列出数据库数据表。 SHOW CREATE TABLES tbl_name //导出数据表结构。 SHOW TABLE STATUS [FROM db_name] //列出数据表及表状态信息。 SHOW COLUMNS FROM tbl_name [FROM db_name] //列出资料表字段 SHOW FIELDS FROM tbl_name [FROM db_name],DESCRIBE tbl_name [col_name]。 SHOW FULL COLUMNS FROM tbl_name [FROM db_name]//列出字段及详情 SHOW FULL FIELDS FROM tbl_name [FROM db_name] //列出字段完整属性 SHOW INDEX FROM tbl_name [FROM db_name] //列出表索引。 SHOW STATUS //列出 DB Server 状态。 SHOW VARIABLES //列出 MySQL 系统环境变量。 SHOW PROCESSLIST //列出执行命令。 SHOW GRANTS FOR user //列出某用户权限 |
由上述SQL语句可以看到,我们可以使用SHOW FULL COLUMNS来列出字段及详情信息,示例代码:
代码如下 | 复制代码 |
$rescolumns = mysql_query("SHOW FULL COLUMNS FROM ".TB_NAME."") ; while($row = mysql_fetch_array($rescolumns)){ // echo '字段名称:'.$row['Field'].'-数据类型:'.$row['Type'].'-注释:'.$row['Comment']; // echo '<br/> www.111cn.net <br/>'; print_r($row); } |
打印结果:
代码如下 | 复制代码 |
Array ( [0] => id [Field] => id [1] => char(2) [Type] => char(2) [2] => utf8_general_ci [Collation] => utf8_general_ci [3] => NO [Null] => NO [4] => PRI [Key] => PRI [5] => [Default] => [6] => [Extra] => [7] => select,insert,update,references [Privileges] => select,insert,update,references [8] => [Comment] => ) Array ( [0] => title [Field] => title [1] => char(50) [Type] => char(50) [2] => utf8_general_ci [Collation] => utf8_general_ci [3] => YES [Null] => YES [4] => [Key] => [5] => [Default] => [6] => [Extra] => [7] => select,insert,update,references [Privileges] => select,insert,update,references [8] => 建议存储:标题、姓名等信息 [Comment] => 建议存储:标题、姓名等信息 ) Array ( [0] => des [Field] => des [1] => varchar(255) [Type] => varchar(255) [2] => utf8_general_ci [Collation] => utf8_general_ci [3] => YES [Null] => YES [4] => [Key] => [5] => [Default] => [6] => [Extra] => [7] => select,insert,update,references [Privileges] => select,insert,update,references [8] => [Comment] => ) ………… |
补充说明信息:
当然你也可以通过mysql_list_fields — 列出 MySQL 结果中的字段。mysql_list_fields() 取得给定表名的信息,参数是数据库名和表名,返回一个结果指针。
但是,mysql_list_fields() 函数已过时。最好用 mysql_query() 来发出一条 SHOW COLUMNS FROM table [LIKE 'name'] 的 SQL 语句来代替。详细可参考PHP帮助文档:PHP: mysql_list_fields - Manua
对于数百万条数据量的CSV文件,文件大小可能达到数百M,如果简单读取的话很可能出现超时或者卡死的现象。
为了成功将CSV文件里的数据导入数据库,分批处理是非常必要的。
下面这个函数是读取CSV文件中指定的某几行数据:
代码如下 | 复制代码 |
/**
$data = csv_get_lines('path/bigfile.csv', 10, 2000000); print_r($data); |
函数主要采用行定位的思路,通过跳过起始行数来实现文件指针定位。
至于数据如何入库本文不再详细讲述。
上述函数对500M以内的文件进行过测试,运行通畅,对于1GB的文件发现有点慢了,于是再接着找方法。
如何快速完整的操作大文件仍然还存在一些问题。
1、如何快速获取CSV大文件的总行数?
办法一:直接获取文件内容,使用换行符进行拆分得出总行数,这种办法对小文件可行,处理大文件时不可行;
办法二:使用fgets一行一行遍历,得出总行数,这种办法比办法一好一些,但大文件仍有超时的可能;
办法三:借助SplFileObject类,直接将指针定位到文件末尾,通过SplFileObject::key方法获取总行数,这种办法可行,且高效。
具体实现方法:
代码如下 | 复制代码 |
$csv_file = 'path/bigfile.csv'; $spl_object = new SplFileObject($csv_file, 'rb'); $spl_object->seek(filesize($csv_file)); echo $spl_object->key(); |
2、如何快速获取CSV大文件的数据?
仍然使用PHP的SplFileObject类,通过seek方法实现快速定位。
代码如下 | 复制代码 |
$csv_file = 'path/bigfile.csv'; $start = 100000; // 从第100000行开始 www.111cn.net读取 $num = 100; // 读取100行 $data = array(); $spl_object = new SplFileObject($csv_file, 'rb'); $spl_object->seek($start); while ($num-- && !$spl_object->eof()) { $data[] = $spl_object->fgetcsv(); $spl_object->next(); } print_r($data); |
综合上面两点,整理成一个csv文件读取的类:
代码如下 | 复制代码 |
class CsvReader { public function get_data($length = 0, $start = 0) { |
调用方法如下:
代码如下 | 复制代码 |
include('CsvReader.class.php'); $csv_file = 'path/bigfile.csv'; $csvreader = new CsvReader($csv_file); $line_number = $csvreader->get_lines(); $data = $csvreader->get_data(10);
echo $line_number, chr(10); print_r($data);
|
其实,上述CsvReader类并不只针对CSV大文件,对于其他文本类型的大文件或超大文件同样可用,前提是将类中fgetcsv方法稍加改动为current即可。
相关文章
- 操作类就是把一些常用的一系列的数据库或相关操作写在一个类中,这样调用时我们只要调用类文件,如果要执行相关操作就直接调用类文件中的方法函数就可以实现了,下面整理了...2016-11-25
- 本文给大家分享C#连接SQL数据库和查询数据功能的操作技巧,本文通过图文并茂的形式给大家介绍的非常详细,需要的朋友参考下吧...2021-05-17
- 这篇文章主要介绍了C#从数据库读取图片并保存的方法,帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下...2021-01-16
- 这篇文章主要介绍了Intellij IDEA连接Navicat数据库的方法,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借价值,需要的朋友可以参考下...2021-03-25
- 在开发过程中,我们经常会将日期时间的毫秒数存放到数据库,但是它对应的时间看起来就十分不方便,我们可以使用一些函数将毫秒转换成date格式。 一、 在MySQL中,有内置的函数from_unixtime()来做相应的转换,使用如下: 复制...2014-05-31
- C#使用System.IO中的文件操作方法在Windows系统中处理本地文件相当顺手,这里我们还总结了在Oracle中保存文件的方法,嗯,接下来就来看看整理的C#操作本地文件及保存文件到数据库的基本方法总结...2020-06-25
- 通过内网连另外一台机器的mysql服务, 确发现速度N慢! 等了大约几十秒才等到提示输入密码。 但是ping mysql所在服务器却很快! 想到很久之前有过类似的经验, telnet等一些服务在连接请求的时候,会做一些反向域名解析(如果...2015-10-21
- 某些时候,例如为了搭建一个测试环境,或者克隆一个网站,需要复制一个已存在的mysql数据库。使用以下方法,可以非常简单地实现。假设已经存在的数据库名字叫db1,想要复制一份,命名为newdb。步骤如下:1. 首先创建新的数据库newd...2015-10-21
- mysqldump命令的用法1、导出所有库系统命令行mysqldump -uusername -ppassword --all-databases > all.sql 2、导入所有库mysql命令行mysql>source all.sql; 3、导出某些库系统命令行mysqldump -uusername -ppassword...2015-10-21
- 这篇文章主要介绍了node.js如何操作MySQL数据库,帮助大家更好的进行web开发,感兴趣的朋友可以了解下...2020-10-29
- 1005:创建表失败1006:创建数据库失败1007:数据库已存在,创建数据库失败1008:数据库不存在,删除数据库失败1009:不能删除数据库文件导致删除数据库失败1010:不能删除数据目录导致删除数据库失败1011:删除数据库...2013-09-23
- phpmyadmin config.inc.php配置示例...2013-09-29
- 这篇文章主要介绍了c#从数据库里取得数据并异步更新ui的方法,大家参考使用吧...2020-06-25
- yii2.0框架是PHP开发的一个比较高效率的框架,集合了作者的大量心血,下面通过用户为例给大家详解yii2使用中的一些基本的增删改查操作。 User::find()->all(); //返回所有用户数据; User::findOne($id); //返回 主键...2015-11-24
详解在IDEA中将Echarts引入web两种方式(使用js文件和maven的依赖导入)
这篇文章主要介绍了在IDEA中将Echarts引入web两种方式(使用js文件和maven的依赖导入),本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-07-11- 1.用phpmyadmin创建数据库和数据表 创建数据库的时候,请将“整理”设置为:“utf8_general_ci” 或执行语句: 复制代码 代码如下:CREATE DATABASE `dbname` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; 创...2015-10-21
- 这篇文章主要介绍了springBoot 项目排除数据库启动方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-09-10
- 这篇文章主要介绍了Linux 下使用shell脚本定时维护数据库,本文通过案例分析给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-07-11
- 这篇文章主要介绍了Java连接数据库oracle中文乱码解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-05-16
- “主机,用户名,密码”得到连接、“数据库,sql,连接”得到结果,最后是结果的处理显示。当然,数据库连接是扩展库为我们完成的,我们能做的仅仅是处理结果而已。...2013-09-29