大家好,我需要将windows xp上的一个128G的mysql数据库迁移到ubuntu linux上的mysql,请问该如何做?1、直接将mysql的数据库文件拷贝到linux下是否可行?2、如果使用mysqldump方式先备份再到linux下导入,128G的数据库太大,无法保存到一个备份文件中,该怎么做?谢谢;)

解决方案 »

  1.   

    1 数据太大,自己试一下比较浪费时间,所以问下这样做是否可以
    2 windows ntfs文件系统中,单个文件最大支持64G
      

  2.   


    谢谢,mysqldump可以指定将数据备份到多个文件吗?
      

  3.   

    哦,谢谢,拷贝到linux以后,mysql用root登录以及使用应该没有权限问题吧?
    另外,字符编码不会有问题吧?
      

  4.   

    可不可以通过联机备份方式把数据转移过去?另外6楼的疑问,可以通过修改my.ini修改字符编码。
      

  5.   

    这样的操作应该是一次性的,那么首先考虑的是数据的准确性,时间消耗不多考虑
    1:直接拷贝可能有问题,主要是大小写的问题。
    2:
    2.1:备份库结构
    2.2:select * from tbname into outfile,每个表生产一个数据文件
    3:拷贝到LINUX机器上,再挨个load data from ...
      

  6.   

    mysqldump也可用于从一个MySQL服务器向另一个服务器复制数据时装载数据库:
    shell> mysqldump --opt db_name | mysql --host=remote_host -C db_name
    可以用一个命令转储几个数据库:
    shell> mysqldump ---database db_name1 [db_name2 ...] > my_databases.sql
    如果你想要转储所有数据库,使用--all--database选项:
    shell> mysqldump --all-databases > all_databases.sql
    如果表保存在InnoDB存储引擎中,mysqldump提供了一种联机备份的途径(参见下面的命令)。该备份只需要在开始转储时对所有表进行全局读锁定(使用FLUSH TABLES WITH READ LOCK)。获得锁定后,读取二进制日志的相应内容并将锁释放。因此如果并且只有当发出FLUSH...时正执行一个长的更新语句,MySQL服务器才停止直到长语句结束,然后转储则释放锁。因此如果MySQL服务器只接收到短("短执行时间")的更新语句,即使有大量的语句,也不会注意到锁期间。
    shell> mysqldump --all-databases --single-transaction > all_databases.sql
    对于点对点恢复(也称为“前滚”,当你需要恢复旧的备份并重放该备份以后的更改时),循环二进制日志(参见5.11.3节,“二进制日志”)或至少知道转储对应的二进制日志内容很有用:
    shell> mysqldump --all-databases --master-data=2 > all_databases.sql或shell> mysqldump --all-databases --flush-logs --master-data=2 > all_databases.sql
    如果表保存在InnoDB存储引擎中,同时使用--master-data和--single-transaction提供了一个很方便的方式来进行适合点对点恢复的联机备份。关于备份的详细信息,参见5.9.1节,“数据库备份”。
    http://dev.mysql.com/doc/refman/5.1/zh/client-side-scripts.html#mysqldump
    参考一下这个吧。我也没做过
      

  7.   

    提醒楼主的是mysqldump还有compress选项。
    利用 管道功能,可以生成压缩的文件.mysqldump < mysqldump options> | gzip > outputfile.sql.gz这个gz文件甚至可以分多卷,| split -b 1000000000 甚至还有人做了这么一个工具:
    http://jivstudio.com/2008/11/26/great-mysql-mysqldump-split-utility/当然要使用这些命令,可能得下一些Gnuwin32中的命令行工具。
      

  8.   

    最好还是能够分表输出不同的sql当然,还可以用管道将输出放到7z或者其他压缩工具里面。把>换成|,直接生成压缩包,而不是.sql。
    比如
    mysqldump 原来的mysqldump参数列表 | 7z a -aoa -mx=9 -m0=PPMd:mem=256M -si x.sql.7z| 管道 替换 原来的 >7z 参数
    a 参数代表压缩
    -mx=9压缩率最大
    -m0=PPMd:mem=256M,使用PPMd压缩方式,内存256m,个人经验PPMd压缩纯文本,重复度较高的内容,压缩率较高。
    -si 代表从StdIn读取数据,这里也就是|管道左面命令的StdOut
    x.sql.7z是输出文件的路径,打开这个.7z,里面就一个x.sql文件,这个文件的内容,就是|左边mysqldump的输出。但愿能帮忙。
      

  9.   

    另外一个方法,不过不知道在跨系统XP->Linux(32/64bit??)下是否有问题。在目标服务器下安装好数据库,备份好data目录,然后将源服务器下的mysql data目录copy过去,试试看
      

  10.   

    mysqldump  可以的,但是要注意大小写和编码问题,好像可以冷备份吧,然后还原
      

  11.   

    if the database table engine is myisam ,just copy the table and it will do