使用Bash脚本获取MySQL LOAD DATA命令的加载记录信息
通过Bash脚本获取MySQL LOAD DATA加载记录数的实现方法
下面介绍两种实用的实现方式,你可以根据场景选择:
方法一:直接解析MySQL命令输出
通过捕获LOAD DATA命令的执行输出,用文本处理工具提取记录数:
#!/bin/bash # 配置MySQL参数和LOAD DATA命令 MYSQL_USER="你的用户名" MYSQL_DB="目标数据库名" LOAD_DATA_CMD="LOAD DATA INFILE '/实际路径/test.txt' INTO TABLE DEMO;" # 执行命令并捕获输出(若需要密码,添加-p"你的密码"参数) exec_output=$(mysql -u"$MYSQL_USER" "$MYSQL_DB" -e "$LOAD_DATA_CMD" 2>&1) # 提取Records字段后的数字 loaded_records=$(echo "$exec_output" | grep -oP 'Records: \K\d+') echo "本次加载的记录数: $loaded_records"
说明:
-e参数让MySQL直接执行指定的SQL命令2>&1合并标准输出和错误输出,确保能捕获到所有返回信息grep -oP使用Perl正则,\K会忽略前面匹配的Records:,只提取后面的数字
方法二:利用MySQL会话状态变量(更可靠)
通过查询MySQL的Rows_imported会话状态变量,对比LOAD DATA执行前后的值,得到准确的加载记录数:
#!/bin/bash # 配置MySQL参数和LOAD DATA命令 MYSQL_USER="你的用户名" MYSQL_DB="目标数据库名" LOAD_DATA_CMD="LOAD DATA INFILE '/实际路径/test.txt' INTO TABLE DEMO;" # 获取执行前的Rows_imported值 initial_count=$(mysql -u"$MYSQL_USER" "$MYSQL_DB" -e "SHOW SESSION STATUS LIKE 'Rows_imported';" | awk 'NR==2 {print $2}') # 执行LOAD DATA命令 mysql -u"$MYSQL_USER" "$MYSQL_DB" -e "$LOAD_DATA_CMD" # 获取执行后的Rows_imported值 final_count=$(mysql -u"$MYSQL_USER" "$MYSQL_DB" -e "SHOW SESSION STATUS LIKE 'Rows_imported';" | awk 'NR==2 {print $2}') # 计算加载的记录数 loaded_records=$((final_count - initial_count)) echo "本次加载的记录数: $loaded_records"
说明:
Rows_imported是MySQL会话级别的状态变量,会记录当前会话中通过LOAD DATA导入的总行数- 这种方法不受输出格式变化影响,比解析文本更稳定
安全提示
不要在脚本中明文写密码,建议通过~/.my.cnf配置文件存储认证信息:
[client] user=你的用户名 password=你的密码 database=目标数据库名
配置后,脚本中的mysql命令无需再添加-u、-p和数据库名参数。
内容的提问来源于stack exchange,提问作者Asuwini P
相关产品推荐
相关产品推荐

