Chinaunix

标题: [数据库备份] 大家都用什么方法来备份和迁移mysql数据库 [打印本页]

作者: imbiss    时间: 2005-09-29 19:22
标题: [数据库备份] 大家都用什么方法来备份和迁移mysql数据库
我一直用phpmyadmin,对于小的数据他很不错。但是对于大的数据,比如保存用户上传图片和二进制数据的数据库就显得力不从心了。
问题是,很容易就会
1 操作超时
2 出错

大家有没有这方面的经验?
作者: hightman    时间: 2005-09-29 19:44
标题: [数据库备份] 大家都用什么方法来备份和迁移mysql数据库
如果是自己的主机直接将数据库名对应的目录打包就可以了.

如果是远程的主机, 好像在备份数据时可以选择备份量吧, 比如1000条数据要超时,你就分成300条一次... :p

不过不管在哪儿,往数据库里硬塞大量的binary数据就不好, 维护不方便,浪费很多力气;

想想看,假设你一张600KB的图片存进mysql, 程序读取数据时, 从mysql server传递给web server, web server 再传组用户的 client, 不是浪费时间么.
作者: imbiss    时间: 2005-09-29 21:37
标题: [数据库备份] 大家都用什么方法来备份和迁移mysql数据库
1.主机不是自己的。服务商提供PHPMYADMIN,没有数据库服务器的SSH权限。有web服务器的FTP权限。 我想可以这样。先用FTP把备份的大的sql文件传到WEB目录下,然后写一个PHP读取此文件,然后写入数据库。

2.我也不想把二进制文件塞入数据库。可是有时候,服务器的php没有写的权限,不能把上传的内容写入web目录,所以才出此下策。
作者: HonestQiao    时间: 2005-09-29 22:44
标题: [数据库备份] 大家都用什么方法来备份和迁移mysql数据库
完全可以使用ftp上传来做的。

不过可能需要把sql切割成比较小的文件,然后分步读取写入
作者: hightman    时间: 2005-09-29 23:56
标题: [数据库备份] 大家都用什么方法来备份和迁移mysql数据库
原帖由 "imbiss" 发表:
1.主机不是自己的。服务商提供PHPMYADMIN,没有数据库服务器的SSH权限。有web服务器的FTP权限。 我想可以这样。先用FTP把备份的大的sql文件传到WEB目录下,然后写一个PHP读取此文件,然后写入数据库。

2.我也不想..........


1. 没有写的权限你怎么上传PHP文件,怎么FTP? 把相应的目录权限设为 777, 总应该可以吧.

2. 自己上传一个phpmyadmin,不要用服务商的; 把程序改一下 set_time_limit(0); 之类...
作者: dozec    时间: 2005-09-30 00:13
标题: [数据库备份] 大家都用什么方法来备份和迁移mysql数据库
自己用php实现一个mysql备份程序:
1.备份表结构
2.实现分批量备份表中的内容,把备份的每个批量形成若干文件,最好能有一个记录文件用于记录哪些批量文件属于哪个表。
3.打包批量文件,提供下载。或者分别下载。

以前做过一回将access库中的内容导到mysql库中,我就是按照这种思路去做的,只不过导出的不是批量文件,而是直接导入到数据库中。
作者: imbiss    时间: 2005-09-30 03:56
标题: [数据库备份] 大家都用什么方法来备份和迁移mysql数据库
原帖由 "hightman" 发表:


1. 没有写的权限你怎么上传PHP文件,怎么FTP? 把相应的目录权限设为 777, 总应该可以吧.

2. 自己上传一个phpmyadmin,不要用服务商的; 把程序改一下 set_time_limit(0); 之类...


1.自己FTP上传是可以的,因为要使用帐号登陆的。但是让PHP写入文件不可,因为OWNER是APACHE,apache没有权限在你自己的目录写东西。

2.可以尝试。但不是好的办法。因为php会超时,改phpmyadmin也没用的。
作者: imbiss    时间: 2005-09-30 03:58
标题: [数据库备份] 大家都用什么方法来备份和迁移mysql数据库
原帖由 "HonestQiao" 发表:
完全可以使用ftp上传来做的。

不过可能需要把sql切割成比较小的文件,然后分步读取写入

可以把sql文件通过ftp上传。但那就要自己写php倒入了。
作者: HonestQiao    时间: 2005-09-30 08:09
标题: [数据库备份] 大家都用什么方法来备份和迁移mysql数据库
原帖由 "imbiss" 发表:
我一直用phpmyadmin,对于小的数据他很不错。但是对于大的数据,比如保存用户上传图片和二进制数据的数据库就显得力不从心了。
问题是,很容易就会
1 操作超时
2 出错

大家有没有这方面的经验?


今天看清楚题目了,如果是保存的图片和二进制数据,那么采用sql来备份是非常不可取的。

如果保存的大的数据库,而且保存图片和二进制数据,这样子的站点,还用虚拟主机?
作者: hightman    时间: 2005-09-30 13:08
标题: [数据库备份] 大家都用什么方法来备份和迁移mysql数据库
晕,很多跟贴根本没看懂楼主的意思!

我的理解是楼主想从远程主机向本地机器备份数据库.  有的人回复的是告诉他如何上载数据库....

他的PHP是safe_mode运行吗, 否则将你的目录 chmod 777 也不可以吗?

那就试试他的 /tmp 目录或者从 phpinfo 中观察它的 session save path, 总之找一个能让PHP读写的临时目录(肯定存在). 写个PHP程序, 让 apache 把你要的数据资料 select 并写入 /tmp 目录 (试试 select .... into out file  之类的语句), 再写另一个程序去读取 /tmp 目录里刚刚存好的数据并下载, 然后删掉临时文件. :p
作者: HonestQiao    时间: 2005-09-30 14:29
标题: [数据库备份] 大家都用什么方法来备份和迁移mysql数据库
[quote]原帖由 "hightman" 发表:
晕,很多跟贴根本没看懂楼主的意思!

我的理解是楼主想从远程主机向本地机器备份数据库.  有的人回复的是告诉他如何上载数据库....

他的PHP是safe_mode运行吗, 否则将你的目录 chmod 777 也不可以吗?

那就试
作者: powerpolly    时间: 2005-09-30 17:58
标题: [数据库备份] 大家都用什么方法来备份和迁移mysql数据库
我晕,先用PHP把库dump成sql文本至FTP目录。然后直接用FTP下载不就得了?回帖办法一个比一个麻烦。
作者: imbiss    时间: 2005-09-30 18:11
标题: [数据库备份] 大家都用什么方法来备份和迁移mysql数据库
[quote]原帖由 "powerpolly"]我晕,先用PHP把库dump成sql文本至FTP目录。然后直接用FTP下载不就得了?回帖办法一个比一个麻烦。[/quote 发表:


谢谢大家的回复。我再把问题说清楚点。

我在本地机WIN32上作开发和测试,并且输入了大概3兆多的数据进入数据库。没有问题。
现在开发结束,我要上传到虚拟主机上服务器,在导入数据表的过程中,出现了问题:存放这个3兆多的数据表无法顺利导入的远程的服务器上。错误原因是超时,出错。或者是mysql回复,数据包超过最大设置等等。

所以我就有了这么一个问题,就这么小一个数据表尚且如此,对于大的数据库,大家是如何备份和迁移的?

对于我自己的问题,我决定修改程序,还是用为上传文件的方式取代上传文件入库的方式,但同时保留上传入数据库的方式作为备用。因为各种主机的设置不同,并不能保证上传文件的方式在所有的主机上顺利通过(有些主机,apache没有权限写入其他用户的目录)。

所以还是这个问题: 对于大的数据库,大家是如何备份和迁移的?
作者: HonestQiao    时间: 2005-09-30 18:32
标题: [数据库备份] 大家都用什么方法来备份和迁移mysql数据库
[quote]原帖由 "imbiss" 发表:


谢谢大家的回复。我再把问题说清楚点。

我在本地机WIN32上作开发和测试,并且输入了大概3兆多的数据进入数据库。没有问题。
现在开发结束,我要上传到虚拟主机上服务器,在导入数据表的过程中,出现了问题:
作者: imbiss    时间: 2005-09-30 19:07
标题: [数据库备份] 大家都用什么方法来备份和迁移mysql数据库
原帖由 "HonestQiao" 发表:


无论如何,你当前的虚拟主机下的目录,你是可以写的。

要不能写,那还要这个空间干嘛?


我能写,通过SSH,但是......
APACHE不能写。赫赫。这个空间不是商业空间,所以我就忍了。

其他的商业空间是可以的。

但问题还是: 大家是如何迁移数据库的??

就没有人带着数据搬过家吗?
作者: litie123    时间: 2005-10-01 10:41
提示: 作者被禁止或删除 内容自动屏蔽
作者: HonestQiao    时间: 2005-10-01 13:20
标题: [数据库备份] 大家都用什么方法来备份和迁移mysql数据库
原帖由 "imbiss" 发表:

就没有人带着数据搬过家吗?


肯定搬过家的啊。

我告诉你怎么测试是否可以写,一般而言:
你上传一个文件,然后看看是否可以取得这个文件的信息,如果可以,那么证明是可以写到临时文件目录的。
而临时文件目录,你在phpinfo();里面是完全可以看到的,那么这样子你可以把备份文件写入到临时文件里面。

select outfile 有一些限制:
SELECT ... INTO OUTFILE 'file_name'格式的SELECT语句将选择的行写入一个文件。文件在服务器主机上被创建,并且不能是已经存在的(不管别的,这可阻止数据库表和文件例如“/etc/passwd”被破坏)。在服务器主机上你必须有file权限以使用这种SELECT。

你也可以看看另外的情况,例如你自己建立一个mysql服务器,那么你的php可以连接你的服务器的服务器和你本地的服务器,来进行数据的取出和写入操作。

最不济的方法,你还可以一条一条取出数据之后,直接编码,用网页显示出来,你再写一个程序反向操作,也是可行的。
作者: imbiss    时间: 2005-10-01 16:53
标题: [数据库备份] 大家都用什么方法来备份和迁移mysql数据库
多谢各位帮助。我自己的问题已经解决(更换了服务商)。
但是,还是把大家的意见整理了一下,贴在下面。方便有同样问题的同志查询。

--------------------------------------------

1.在远程服务器上备份到文件
a 通过Web服务器(apache需要有写的权限),通过PHP写文件到指定临时目录
b 如果实在没有写权限就通过phpmyadmin备份直接发送到浏览器下载。

2.下载备份文件到本地
如果已经通过 1b 则跳过本步
  通过FTP下载临时文件。


3.上传备份文件到新服务器
最好通过FTP上载。
如果不行(不太可能,ftp或者sftp,SSH2一般都有),可以通过Web Server上载,至少能传到PHP或者系统临时文件内。(HonestQiao )
注:但是会受到PHP和apache上传文件大小的限制。

4.倒入备份数据
如果有SSH权限,可是用mysqldump  命令倒入数据 (litie123   )
或者用PHP执行 select outfile  (HonestQiao )




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2