MySQL 几种导数据的方法与遇到的问题

零、说在前面

        MySQL导数据通常使用第三方工具和MySQL自身的工具,本文分别就这两类方法分别介绍。

一、第三方工具之 Navicat

1.1、Navicat的“数据传输”工具

        打开Navicat,点击“工具”标签,找到“数据传输”,即可看到操作界面。这里不对这个工具本身做过多介绍,侧重点在于工具中的一些配置选项的含义的介绍上。如下图所示

        上图的传输选项选择好之后,点击下一步,看到如下界面。然后根据需要选择传递哪些表或哪些对象。选好后点击“下一步”

        以传输单表举例。选中左侧的某个表,然后可以在右侧看到“高级”选项,这里重点说一下高级选项中的一些参数

       点击“下一步”开始数据传输阶段,如果一切顺利,那么过一段时间传输就完成了。

1.2、感想

        上图中的“对每个记录集使用事务”勾选项,个人认为不会对数据源库有太大影响,仅仅当目标库开启了binlog后,才会对目标库有影响。众所周知有许多条件会个触发binlog写入磁盘,而完成一次事务也是触发条件之一。因此当这个选项被勾选后,那么我理解每一条插入语句都会被包装成一个事物,那么就会造成频繁的写binlog进而造成过多的IO开销,但好处就是不会造成关键数据的丢失。所以根据数据的重要程度来决定是否勾选这个选项吧。

二、MySQL自身工具之 mysqldump

2.1、使用方法

        linux 操作系统下,通常会使用mysqldump 这种基于数据的逻辑备份方式来导出数据,此方法在恢复数据阶段的速度不是很快,但胜在稳定而且备份的文件是基于数据的,所以能不受数据库引擎影响。

        导库命令格式为 "mysqldump -u登录名 -p 库名  > 路径 文件名";导表与导库方式的区别在于需要加上表名,命令格式为 "mysqldump -u登录名 -p 库名 表名 > 文件期望保存的路径 文件名",如下图所示

        上图中的导出数据的命令本身沒有什么可说的,只要命令正确就能导出成功。上图中有一点要说的就是我在导出命令前还加了一个 time 命令,目的是查看操作过程中的耗时情况。当导出操作成功后,会看到如上图下面三行所示的内容,其含义分别是 

real: 实际用时,即从命令开始到命令结束的总用时,包括所有进程执行和阻塞等待的时间
user: 用户进程的CPU用时
sys:  CPU内核中执行系统命令调用花费的时间

        当需要使用导出的文件进行数据恢复数据时的命令不再区分全库导入还是单表导入,命令都是 "mysql -u登录名 -p 库名 < 文件路径 文件名 ",成功之后会在库中看到最新的数据,如下图所示

2.2、加快dump导数据的速度

        如果MySQL打开了二进制日志,那么必然会影响写入速度,因此可以临时修改binlog的模式。关于binlog的一些原理,我将在稍后另开帖子补完。这里只说做法。

        第一,将 innodb_flush_log_at_trx_commit 参数从默认值1改为0。其含义是把数据库操作写入binlog 和 将数据写入磁盘的频率固定为一秒一次,且不受数据库操作是否含有事务的影响。

        第二,将 sync_binlog 参数设置为0,此时 数据库操作写入binlog文件和写入磁盘的频率受操作系统控制,不受数据库操作次数阈值的控制。

三、遇到的问题

3.1、磁盘空间不足

        我在使用mysqldump导入单表的数据时,发现很久很久都没有动静,其耗时远高于导出数据用时,可以在MySQL的命令行中执行 "SHOW PROCESSLIST" 命令,如下图所示

        在三次执行show processlist 命令后,观察这几次time字段的值,不难发现的一个insert 语句消耗了太多的时间却毫无进展。可以确认的是这个插入语句没有什么特殊考虑应该是某个环节出现了问题。

        通过排查发现原来是存储空间满了。解决方法见我的 VMWare虚拟机扩容并挂载磁盘 帖子扩容即可解决 ,此处就不再赘述了。

        此外,除了使用“show processlist”命令查看之外,还可以通过使用 "show status" 命令查看收发的数据量增幅大小来判断任务是否有进展。如下图所示

        需要注意的地方在于,做查询条件的参数名一定要用大写,切切!

3.2、字符集编码不一致 

       目前常用的MySQL版本多为5.7和8.0。其中5.7的编码默认为 latin1,而8.0及以后默认的utf-8编码是 utf8mb4。因此需要在互导数据之前确认一下源头与目标的字符集是否統一。同时建议新建数据库最好都使用 utf8mb4 编码。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: MySQL 有多种方法可以用来入大数据量。这里列举几种常见的方法: 1. 数据库备份文件:如果你已经有了数据库的备份文件,可以使用 MySQL 的 `mysql` 命令行工具来入。例如: ``` mysql -u username -p db_name < backup-file.sql ``` 2. 使用 `LOAD DATA INFILE` 语句:这个语句可以快速地将数据从文本文件入到 MySQL 表中。例如: ``` LOAD DATA INFILE '/path/to/data.csv' INTO TABLE tbl_name FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n' ``` 3. 使用 `mysqlimport` 工具:这是 MySQL 安装时自带的一个命令行工具,可以用来快速入 CSV 文件。例如: ``` mysqlimport --ignore-lines=1 --fields-terminated-by=, --local -u username -p db_name /path/to/data.csv ``` 4. 使用 MySQL 工具:如 MySQL Workbench 等工具可以方便地数据。这些工具通常都有图形界面,使用起来非常方便。 5. 使用编程语言:你也可以使用编程语言,如 PHP 或 Python 等,来连接 MySQL 数据库,然后执行 SQL 语句来数据。 ### 回答2: 在入大数据量到MySQL数据库时,可以采取以下几种方法: 1. 使用LOAD DATA命令:该命令可以直接从文件中批量数据MySQL。将大数据量的数据保存为文本文件(如CSV或TXT),然后使用LOAD DATA命令将数据加载到MySQL中。这种方法适用于数据量较大,且文件格式规范的情况。 2. 使用MySQL提供的入工具:MySQL提供了一些专门用于数据的工具,如mysqldump、mysqlimport等。通过使用这些工具,可以将大数据量的数据入到MySQL中。这些工具可以根据需求选择不同的入方式,如单个表入、整个数据库入等。 3. 数据拆分入:如果一次性入大数据量会致性能问题,可以考虑将数据进行拆分,分批入到MySQL中。这可以通过对数据进行分区、分片、分页等方式进行实现。例如,可以将数据按照时间范围、地理位置等因素进行拆分,然后逐个批次入。 4. 使用并行入:在入大数据量时,可以尝试使用并行入的方式。通过同时使用多个数据库连接,将数据进行分割并同时入,可以提高入的效率。使用并行入需要注意保持数据的一致性,并合理设置入的并发数。 在进行大数据入时,还需注意数据库的配置参数,如innodb_buffer_pool_size、innodb_log_file_size等,合理调整这些参数可以提高入的效率。同时,监控入过程中的系统资源使用情况,及时调整相关参数。 ### 回答3: MySQL是一种常用的关系数据库管理系统,用于存储和管理大量数据。当面临大数据入的情况时,我们可以采取以下几种方法来提高入的效率。 第一,使用LOAD DATA INFILE命令。这个命令允许我们从文本文件中数据MySQL数据库中。与使用INSERT语句逐条插入数据相比,使用LOAD DATA INFILE可以大大提高入速度。我们可以通过制定数据文件的路径,以及指定数据文件的格式和字段分隔符等信息,来数据。 第二,使用批量插入语句。在插入大量数据时,使用批量插入语句可以减少与数据库之间的通信次数,从而提高入速度。通过将多条INSERT语句合并成一条,并使用VALUES子句一次性插入多个值,可以有效地将数据批量入到MySQL数据库中。 第三,优化数据库配置。在入大数据量之前,我们可以通过调整MySQL的配置参数来提高入速度。例如,可以增加Innodb_buffer_pool_size参数的值,以提高数据的读取和写入性能。还可以适当调整其他与磁盘读写相关的配置参数,以优化入过程的性能。 第四,使用并行入工具。有些第三方工具可以帮助我们在入大量数据时实现并行处理,从而提高入速度。例如,可以使用MySQL的并行复制功能来同时入多个数据文件,或使用并行入工具如mydumper等来加速入过程。 总之,入大数据量到MySQL数据库可以采取多种方法来提高入效率。通过选择合适的入命令、优化数据库配置、使用批量插入语句以及利用并行入工具等,我们能够更加高效地将数据入到MySQL中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值