MySQL8快速导入百万级别数据,仅需要10多秒

2024-02-22T01:54:12

1. 准备数据文件

  • 检查文件格式和结构

    • 确保数据文件(如CSV,TXT,SQL)的格式与目标数据库表的列结构相匹配。
    • 文件应使用与数据库相同的字符编码,通常是UTF-8
    • 检查并清除文件中的多余空格、换行符等。
  • 统计文件行数

    • LinuxUnix-like系统中,使用wc -l /path/to/your/data.csv来计算文件中的行数。
    • Windows系统中,可以在命令提示符或PowerShell中使用Get-Content /path/to/your/data.csv | Measure-Object -Line
    • 这可以帮助估计导入时间和调整数据库性能设置。
  • 示例文件路径/path/to/your/data.csv

2. 优化MySQL设置

  • 减少事务日志写入频率:

    -- 减少事务日志的写入频率,提高导入速度,但可能会降低数据安全性
    SET GLOBAL innodb_flush_log_at_trx_commit = 0;
  • 禁用二进制日志同步:

    -- 禁用二进制日志同步,提高性能,但在崩溃时可能会丢失数据
    SET GLOBAL sync_binlog = 0;
  • 增加InnoDB缓冲池大小:

    -- 增加InnoDB缓冲池大小,以适应数据导入的需要(根据服务器内存调整)
    SET GLOBAL innodb_buffer_pool_size = '1G';

3. 使用LOAD DATA INFILE语句导入数据

  • 执行导入:

    -- 导入数据
    LOAD DATA INFILE '/path/to/your/data.csv' 
    INTO TABLE your_table
    FIELDS TERMINATED BY ',' -- 字段分隔符
    ENCLOSED BY '"' -- 文本包围符
    LINES TERMINATED BY '\n' -- 行分隔符
    IGNORE 1 LINES; -- 如果文件包含头部标题行,则忽略
  • 调整命令:根据你的文件路径、表名和文件格式进行调整。

4. 数据后处理

  • 检查数据完整性:

    -- 检查数据行数是否正确
    SELECT COUNT(*) FROM your_table;
    
    -- 检查是否有明显的数据错误(如NULL值、格式错误等)
    SELECT * FROM your_table WHERE some_column IS NULL;

5. 恢复MySQL设置

  • 恢复设置:

    -- 恢复事务日志的写入频率
    SET GLOBAL innodb_flush_log_at_trx_commit = 1;
    
    -- 恢复二进制日志同步
    SET GLOBAL sync_binlog = 1;

注意事项

  • 数据备份:在进行大规模数据操作之前,务必备份好相关数据。
  • 权限问题:确保MySQL服务对数据文件有读取权限。
  • 安全性:临时调整的MySQL配置可能会影响数据库的稳定性和数据的完整性,在导入结束后应立即恢复。
  • 性能监控:在导入过程中监控服务器性能,确保资源不会被过度消耗。
当前页面是本站的「Baidu MIP」版。发表评论请点击:完整版 »