龙网论坛

 找回密码
 注册
查看: 3911|回复: 1
收起左侧

[Mysql] 详解MySQL大数据量的导入与导出迁移

[复制链接]
发表于 2016-1-9 13:02 | 显示全部楼层 |阅读模式
如果我们的数据比较小(比如2M或以下),我们可以很方便的使用phpMyAdmin的导入导出功能
先说导出,我们在phpMyAdmin中导出SQL 脚本就相当于文件下载,如果PHP环境允许,脚本执行不会超时的情况也是可以导出大文件的,但是稳定性和速度不够。
我们还可以使用MySQL提供给我们的 命令行工具进行导出。如果是windows系统,在mysql的安装目录下的bin目录有一文件名字是mysqldump.exe,当然如果是集成环境 (比如wamp等)可能路径有些差别,我们只要找到mysqldump.exe就可以了。
我们打开命令行界面,进入到mysqldump.exe所在的目 录执行以下格式的命令:mysqldump.exe -umysql的用户名 -pmysql的密码 数据库名 > 要保存的路径和文件名。比如我执行的是mysqldump -uroot -proot demo > F:/test.sql(mysqldump.exe后的扩展名exe可以省略),回车后没有提示,但是在指定的目录下已经生成好了SQL脚本文件(这条命令将数据库demo导出sql脚本导出到F盘,名字是test.sql),导出速度也相当快。
        如果要导出数据库中的一张表或几张表而不是全部使用的命令是mysqldump.exe -umysql的用户名 -pmysql的密码 数据库名 表名1 表名2 > 要保存的路径和文件(数据库名后加空格表名就可以了,有多张表的话使用空格隔开),例如执行mysqldump -uroot -proot demo users photo > F:/test.sql(意思是将demo数据库下的user表和photo表导出)。你可能要问如果要导出多个数据库呢。也有对应的命 令:mysqldump -uroot -proot --databases ci demo > F:/test.sql(增加了--databases参数后面直接跟数据库名空格隔开就可以了,想导出几个就导出几个数据库)。
        以上介绍的是windows平台下的导出命令,在Linux下也是一样的道理,需要执行mysql安装目录下的mysqldump(注意:linux下没有exe扩展名了),例如:
其他参数都是一样的,这里就不再赘述。
        完成了导出,我们再来看一下导入,同样因为phpMyAdmin就是一个PHP程序,在导入SQL脚本的时候使用的是文件上产的方式,能够导入的数据大小和PHP的环境有关,并且在导入的时候有提示,比如我当前的PHP环境允许上传的最大大小是10M:
        
        虽然我们可以修改我们的PHP环境配置,但是如果我们要导入的SQL文件很大,比如说几百M,甚至上G大小,那么就不可能使用此方式进行导入了。同样 MySQL为我们提供了命令行导入,与导出不同的是需要再命令行下登录mysql,在windows下登录mysql用到的可执行文件是bin目录下的 mysql.exe,命令格式是mysql -u用户名 -p密码,例如mysql -uroot -proot,执行此命令后进入mysql的命令行界面,接下来执行以下命令:
        1.设置编码,否则可能出现乱码。比如我们要导入的sql文件编码是utf-8的则执行 set names utf8;(注:如果在sql脚本中已经有选择数据库的命令,此命令可以不执行,当然执行了也没有影响)
        2.选择数据库,use 数据库名,比如要导入的数据库名demo则执行 use demo;(注:如果在sql脚本中已经有选择数据库的命令,此命令可以不执行)
        3.这是比较关键的导入环节执行source sql脚本路径和名字,例如source F:/a.sql
        这样sql脚本就会被导入了,如果是Linux环境,也是同样的方式,只是路径不同而已。

set names gbk;
create  database name;
use name;






 楼主| 发表于 2016-1-9 13:18 | 显示全部楼层
MySQL数据库迁移(数据文件直接迁移)
在今年10月下旬的时候,公司的服务器需要迁移,其中涉及到了MySQL数据库迁移。查看了一下MySQL数据文件的大小,接近60G的大小(实际数据并没用那么多)。由于服务器上业务需要,要尽量减少服务器迁移时的损失。所以迁移时间选在了晚上零点开始,而且要尽量减少迁移所用的时间。
在迁移之前有三种方案:
  • 数据库直接导出,拷贝文件到新服务器,在新服务器上导入。
  • 使用【MySQL GUI Tools】中的 MySQLMigrationTool。
  • 数据文件和库表结构文件直接拷贝到新服务器,挂载到同样配置的MySQL服务下。

我在我的电脑上用虚拟机测试后,选中了占用时间最少的第三种方案。下面是三种方案的对比:

    第一种方案的优点:会重建数据文件,减少数据文件的占用空间。
    第一种方案的缺点:时间占用长。(导入导出都需要很长的时间,并且导出后的文件还要经过网络传输,也要占用一定的时间。)
    第二种方案的优点:设置完成后传输无人值守
    第二种方案的缺点:

    • 设置繁琐。
    • 传输中网络出现异常,不能及时的被发现,并且会一直停留在数据传输的状态不能被停止,如不仔细观察不会被发现异常。
    • 传输相对其他fang时间长。
    • 异常后很难从异常的位置继续传输。
    第三种方案的优点:时间占用短,文件可断点传输。操作步骤少。(绝大部分时间都是在文件的网络传输)
    第三种方案的缺点:可能引起未知问题,暂时未发现。
下面介绍一下第三种方案d迁移步骤:
  • 保证Mysql版本一致,安装配置基本一致(注意:这里的数据文件和库表结构文件都指定在同一目录data下)
  • 停止两边的Mysql服务(A服务器--迁移-->B服务器)
  • 删除B服务器Mysql的data目录下所有文件
  • 拷贝A服务器Mysql的data目录下除了ib_logfile.err之外的文件到B服务器data下
  • 启动B服务器的Mysql服务,检测是否发生异常
迁移完成后,服务启动正常,未发现其他异常问题。
data文件夹文件列表如下:


备注:经测试,源mysql的安装目录及数据文件目录 可以与 目标Mysql的安装目录及数据文件目录 不一致。
此时,只需要拷贝您所需移动的dbname(如上:pa、testdb)及'mysql'和'ibdata1',即可。

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|龙网论坛 ( 辽ICP备06014320号 )

GMT+8, 2022-10-7 18:25

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表