将bash脚本中的文本插入mysql数据库并丢失格式

时间:2018-03-30 14:16:22

标签: mysql bash

我编写了一个脚本,它使用rsync运行备份,并将rsync的输出插入到数据库中。 除了一件小事之外,它运作良好。 DB中的文本是一行,没有“新行”空格或制表符。但是,如果我将查询写入屏幕,那很好。它在db cell中看起来我想要的东西。

任何人都可以帮忙解决这个问题吗?

这是脚本:

#!/bin/bash

DATUM=$(date +%Y-%m-%d)
IDO=$(date +%H:%M:%S)
LOG_FAJL="/media/2TB/MENTES_PC/log/"$DATUM"_"$IDO"_rsync_2TB.log"
LOG_FAJL_SED="/media/2TB/MENTES_PC/log/"$DATUM"_"$IDO"_rsync_2TB_SED.log"
CEL="/media/BACKUP_2TB/"
FORRAS="/media/2TB/"
KIZARAS1="--exclude='/media/2TB/lost+found/'" -- exclude='/media/2TB/.Trash-1000/'
DB_USER="user"
DB_PASSWORD="secret"
DB="xx"
TABLA="table"

if [ ! -f "$LOG_FAJL" ];
then
    printf "%b"     "\\\\n\\n\\t\\t\\t\\t\\t\\t\\t\\t##########################################" > "$LOG_FAJL"  # more fancy header...    
fi
printf "%b" "\\n\\n\\n   A mentés készült: $(date +%Y-%m-%d_%H:%M:%S)  \\n" >> "$LOG_FAJL"
printf "%b" "   *************************************\\n" >> "$LOG_FAJL"
KEZDES=$(date +%s)
printf "%b" "\\n   "$FORRAS" mentése ide: "$CEL >> "$LOG_FAJL"
printf "%b" "\\n   ==========================================\\n\\n" >> "$LOG_FAJL"
rsync -azvh --delete "$KIZARAS1" --stats --human-readable $FORRAS $CEL >> "$LOG_FAJL"
VEGE=$(date +%s)
ELTELT=$(($VEGE-$KEZDES))
printf "%b" "\\n\\n   A mentés tartott: " >> "$LOG_FAJL"
printf "%02dh:%02dm:%02ds" "$(($ELTELT/3600))" "$(($ELTELT%3600/60))"         "$(($ELTELT%60))"  >> "$LOG_FAJL"
printf "%b" "-ig\\n   ********************************" >> "$LOG_FAJL"

cat "$LOG_FAJL" | sed "s/'/\\\'/g" > "$LOG_FAJL_SED"
QUERY="INSERT INTO "$TABLA" (datum,ido,log) VALUES ('"$DATUM"','"$IDO"','"$(cat "$LOG_FAJL_SED")"');"
echo "$QUERY"
mysql -u$DB_USER -p$DB_PASSWORD $DB -e "$QUERY"

1 个答案:

答案 0 :(得分:0)

很奇怪您使用什么应用程序来查看插入的数据,Mysql Workbench,Squirrel等?

我怀疑新行/回车实际上是存在的,只是该应用没有显示它们。

您可以使用mysqldump将数据提取到文件中,并查看换行符是否在输出中。