如何将xp上的一个128G的mysql数据库迁移到ubuntu linux? 谢谢

sinosinux 2011-06-03 09:19:40
大家好,我需要将windows xp上的一个128G的mysql数据库迁移到ubuntu linux上的mysql,请问该如何做?

1、直接将mysql的数据库文件拷贝到linux下是否可行?

2、如果使用mysqldump方式先备份再到linux下导入,128G的数据库太大,无法保存到一个备份文件中,该怎么做?

谢谢;)
...全文
260 15 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
flykick 2011-06-18
  • 打赏
  • 举报
回复
if the database table engine is myisam ,just copy the table and it will do
回南山种豆 2011-06-04
  • 打赏
  • 举报
回复
mysqldump 可以的,但是要注意大小写和编码问题,好像可以冷备份吧,然后还原
songchunbo 2011-06-03
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 sinosinux 的回复:]

引用 7 楼 songchunbo 的回复:

可不可以通过联机备份方式把数据转移过去?

另外6楼的疑问,可以通过修改my.ini修改字符编码。

两个服务器网络是通的,请教如何连机备份?
[/Quote]


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
参考一下这个吧。我也没做过。。。
zuoxingyu 2011-06-03
  • 打赏
  • 举报
回复
[Quote=引用楼主 sinosinux 的回复:]
大家好,我需要将windows xp上的一个128G的mysql数据库迁移到ubuntu linux上的mysql,请问该如何做?

1、直接将mysql的数据库文件拷贝到linux下是否可行?

2、如果使用mysqldump方式先备份再到linux下导入,128G的数据库太大,无法保存到一个备份文件中,该怎么做?

谢谢;)
[/Quote]
这样的操作应该是一次性的,那么首先考虑的是数据的准确性,时间消耗不多考虑
1:直接拷贝可能有问题,主要是大小写的问题。
2:
2.1:备份库结构
2.2:select * from tbname into outfile,每个表生产一个数据文件
3:拷贝到LINUX机器上,再挨个load data from ...
sinosinux 2011-06-03
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 songchunbo 的回复:]

可不可以通过联机备份方式把数据转移过去?

另外6楼的疑问,可以通过修改my.ini修改字符编码。
[/Quote]
两个服务器网络是通的,请教如何连机备份?
songchunbo 2011-06-03
  • 打赏
  • 举报
回复
可不可以通过联机备份方式把数据转移过去?

另外6楼的疑问,可以通过修改my.ini修改字符编码。
sinosinux 2011-06-03
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 zhihaokesion 的回复:]

真接用移动硬盘拷过去,但要注意数据库文件权限问题,
[/Quote]
哦,谢谢,拷贝到linux以后,mysql用root登录以及使用应该没有权限问题吧?
另外,字符编码不会有问题吧?
zhihaokesion 2011-06-03
  • 打赏
  • 举报
回复
真接用移动硬盘拷过去,但要注意数据库文件权限问题,
sinosinux 2011-06-03
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 iihero 的回复:]

2,应该是可以的,甚至可以备份分裂成多个文件,然后再合并。
[/Quote]

谢谢,mysqldump可以指定将数据备份到多个文件吗?
sinosinux 2011-06-03
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 rucypli 的回复:]

1 自己试下
2 128G的数据库太大,无法保存到一个备份文件中?
[/Quote]
1 数据太大,自己试一下比较浪费时间,所以问下这样做是否可以
2 windows ntfs文件系统中,单个文件最大支持64G
iihero 2011-06-03
  • 打赏
  • 举报
回复
2,应该是可以的,甚至可以备份分裂成多个文件,然后再合并。
rucypli 2011-06-03
  • 打赏
  • 举报
回复
1 自己试下
2 128G的数据库太大,无法保存到一个备份文件中?
shine333 2011-06-03
  • 打赏
  • 举报
回复
另外一个方法,不过不知道在跨系统XP->Linux(32/64bit??)下是否有问题。

在目标服务器下安装好数据库,备份好data目录,然后将源服务器下的mysql data目录copy过去,试试看
shine333 2011-06-03
  • 打赏
  • 举报
回复
最好还是能够分表输出不同的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的输出。

但愿能帮忙。
iihero 2011-06-03
  • 打赏
  • 举报
回复
提醒楼主的是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中的命令行工具。


56,864

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧