quocvuongdn

#bash: insert batch data to MySQL

Apr 26th, 2017
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 1.17 KB | None | 0 0
  1. #!/usr/bin/env bash
  2. echo "Bash version is ${BASH_VERSION}"
  3.  
  4. # Initialize sql query
  5. mysqldb=benchmark
  6. mysqlusr=root
  7. mysqlpwd=root
  8. mysqloptions=""
  9. mysqltable=simple
  10. startSql="INSERT INTO $mysqltable(id, name) VALUES"
  11.  
  12. # Create data list
  13. min=0
  14. max=200000
  15. stepRun=1000
  16. arrSQL=()
  17.  
  18. # Make data as many parts. Max data for single query is step run
  19. for i in $(seq $min $stepRun $max)
  20. do
  21.   childMax=$i
  22.   childMin=$(($childMax-$stepRun))
  23.   sql=$startSql
  24.  
  25.   # Make part sql
  26.   for j in $(seq $childMin $childMax)
  27.   do
  28.     if [ $j -gt $min ]; then
  29.       # Fill row data
  30.       sql="$sql(1, $j)"
  31.       if [ $j -lt $childMax ]; then
  32.         sql="$sql,"
  33.       fi
  34.     fi
  35.   done
  36.  
  37.   # Append part query sql to array
  38.   if [ "$sql" != "$startSql" ]; then
  39.     arrSQL[$i]="$sql;"
  40.   fi
  41. done
  42.  
  43. # Run the query
  44. mysql -u $mysqlusr -p$mysqlpwd $mysqloptions -D $mysqldb -B -e "TRUNCATE $mysqltable"
  45. echo "Table `$mysqltable` has truncated"
  46. echo "Start insert from value $min to value $max"
  47. echo "---------------------------"
  48.  
  49. for i in "${!arrSQL[@]}"
  50. do
  51.   mysql -u $mysqlusr -p$mysqlpwd $mysqloptions -D $mysqldb -B -s -e "${arrSQL[$i]}"
  52.   echo "Added data of index $i"
  53. done
Advertisement
Add Comment
Please, Sign In to add comment