MySql批量导入csv文件

前置条件:因为在数据库在云端,且测试数据库与生产数据库不一致,索性就在本地搭建一个MySql数据库,把生产的可用数据导入到本地,方便本地测试。当然要注意一点,csv文件是没有建表语句的,需要你先建表

步骤1:启用MySQL本地文件加载
打开终端,执行:
bash
# 连接到MySQL
mysql -u root -p


输入密码:xxxxx
在MySQL中执行:
sql
SET GLOBAL local_infile = 1;
exit;


步骤2:创建导入脚本
在终端中执行:
bash
# 进入桌面目录
cd ~/Desktop

# 创建脚本文件
touch import_csv.sh

# 用文本编辑器打开
open -a TextEdit import_csv.sh


步骤3:复制脚本内容
在TextEdit中粘贴以下内容:
bash
#!/bin/bash

# 数据库配置
DB_HOST="localhost"
DB_USER="root"
DB_PASS="xxxx"  # 你的密码
DB_NAME="db_xxx"
CSV_DIR="/Users/mac/Desktop/aliyun-mysql"  # 这里是存放csv文件的文件夹

echo "开始批量导入CSV文件到 db_crm 数据库..."
echo "CSV文件目录: $CSV_DIR"
echo "----------------------------------------"

# 检查目录是否存在
if [ ! -d "$CSV_DIR" ]; then
    echo "❌ 错误: CSV目录不存在: $CSV_DIR"
    exit 1
fi

# 检查是否有CSV文件
csv_count=$(ls "$CSV_DIR"/*.csv 2>/dev/null | wc -l | tr -d ' ')
if [ $csv_count -eq 0 ]; then
    echo "❌ 错误: 在 $CSV_DIR 中没有找到CSV文件"
    exit 1
fi

echo "找到 $csv_count 个CSV文件"
echo "----------------------------------------"

# 遍历所有CSV文件
for csv_file in "$CSV_DIR"/*.csv; do
    if [ -f "$csv_file" ]; then
        # 从文件名获取表名(去掉.csv后缀)
        table_name=$(basename "$csv_file" .csv)
        
        echo "📥 正在导入: $(basename "$csv_file") → 表: $table_name"
        
        # 使用LOAD DATA INFILE导入
        mysql --local-infile=1 -h $DB_HOST -u $DB_USER -p$DB_PASS $DB_NAME 2>/dev/null << EOF
SET FOREIGN_KEY_CHECKS=0;
LOAD DATA LOCAL INFILE '$csv_file'
INTO TABLE $table_name
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS;
SET FOREIGN_KEY_CHECKS=1;
EOF
        
        # 检查导入结果
        if [ $? -eq 0 ]; then
            # 查询导入的数据量
            count=$(mysql -h $DB_HOST -u $DB_USER -p$DB_PASS $DB_NAME -s -N -e "SELECT COUNT(*) FROM $table_name;" 2>/dev/null)
            echo "✅ 成功导入: $table_name (数据量: $count 行)"
        else
            echo "❌ 导入失败: $table_name"
            echo "   可能原因: 表不存在或数据格式不匹配"
        fi
        echo "----------------------------------------"
    fi
done

echo "🎉 批量导入完成!"
echo "请在MySQL中验证数据:"
echo "  USE db_xxx;"
echo "  SHOW TABLES;"
echo "  SELECT COUNT(*) FROM 表名;"


步骤4:保存并设置权限
在TextEdit中:
按 Command + S 保存
关闭TextEdit
回到终端:
bash
# 给脚本执行权限
chmod +x import_csv.sh

# 验证脚本
ls -la import_csv.sh


步骤5:运行导入脚本
bash
# 运行脚本
./import_csv.sh


步骤6:验证导入结果
导入完成后,在MySQL中检查:
bash
# 连接到MySQL
mysql -u root -p


输入密码后执行:

USE db_xxx;

-- 查看所有表
SHOW TABLES;

-- 查看某个表的数据量示例
SELECT COUNT(*) FROM sys_user;

-- 查看前几条数据示例
SELECT * FROM sys_user LIMIT 5;

 

posted @ 2025-11-12 16:52  此间正年少  阅读(18)  评论(0)    收藏  举报