近期我需要做一分工作是将一个论坛从GO的空间转进新服务器中。而数据库又相对而言还是比较大的,1G左右的数据库,在服务器上可以说不大,而在空间上,下载备份可想而知。我现在的网速电信的8M要下载的话还是需要一点时间的,然后大家也许都知道phpmyadmin能不能给力的让你下载1G的数据还是个问题。在这种情况下,没有办法了只能硬着头皮下了。
但回顾一下mysql数据库的备份有几个方法,1,利用程序软件工具,比如帝国的备份王,但是空间商已经暂停了空间的使用,显然无效。
2.利用,mysqldump 显然也是不行的,因为我没办法通过SSH进入mysql的终端,mysqldump -u 用户名 -p 数据库名 > 数据库文件名.sql
mysql -u 用户名 -p 数据库名 < 数据库文件名.sql。
所以这段命令也是无用的。那怎么办,只能通过SELECT INTO OUTFILE语句备份数据,并用LOAD DATA INFILE语句恢复数据。可是这种方法只能导出数据的内容,不包括表的结构,如果表的结构文件损坏,只能先恢复原来的表结构。这样的话很麻烦,暂时不考虑此方法,再看看有没有别的方法了。
3.这数据库通过下载两个phpmyadmin后发现根本下不下来。。下载到250M后别想了。。也许有些人想到了 分割法,就是会行下载。可是这么大你分行下你怎么知道下载的数据完整性。有人会讲你多下次几次不就行了。每次下载的都是一样大小那就是完整的。 虽然这玩意大不算大,但对于空间来说还是不小的,毕竟phpmyadmin下载是要看服务器和本地的网络的。暂时认为这一方法可行。 也许下载本地是可行的。
4.有人讲你不会在服务器下载。这个说得好,可是你要进图形界面,不然你还是和第二个方法一样,进行 mysqldump -u 用户名 -p 数据库名 > 数据库文件名.sql 这还不是费话嘛。。
5.那么第二个后面的那个备份怎么搞的,我就简单的介绍一下 先导出你的全部信息
SELECT * INTO {OUTFILE | DUMPFILE} 'file_name' FROM tbl_name LOAD DATA [LOW_PRIORITY] [LOCAL] INFILE 'file_name.txt' [REPLACE | IGNORE]
INTO TABLE tbl_name
如果表具有PRIMARY KEY或UNIQUE索引,那只能锁定数据表避免在备份过程中,表被更新 LOCK TABLES READ ###表;再解锁表
接下来就要利用mysqlimport进行恢复数据,擦看来我今天只能通过phpmyadmin了。
mysqlimport [options] db_name filename ...
常用的选项为:
-C, --compress 如果客户和服务器均支持压缩,压缩两者之间的所有信息。
-d, --delete 在导入文本文件前倒空表格。
l, --lock-tables 在处理任何文本文件前为写入所定所有的表。这保证所有的表在服务器上被同步。
--low-priority,--local,--replace,--ignore分别对应LOAD DATA语句的LOW_PRIORITY,LOCAL,REPLACE,IGNORE关键字
接下来再用mysqldump备份数据,这玩意就不要我说了,你懂的。
最后表都生成好了,直接复制吧。。