Guest User

Untitled

a guest
May 20th, 2016
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.78 KB | None | 0 0
  1. #!/bin/sh
  2. # script to convert mysql schema to be compatible with data warehouse software
  3. # make sure that s3cmd and maatkit utility is installed
  4.  
  5. db_name=${1:-'test'}
  6. > /root/$db_name.txt
  7.  
  8. temppath='/mnt/data/pdump1'
  9. host='localhost'
  10. user='maatkit'
  11. password='maatkit123'
  12.  
  13. bucket=`date '+%b%d'`
  14. s3path="s3://$bucket$db_name"
  15.  
  16. access='ABC'
  17. secret='PQR+XYZ'
  18. options="emptyasnull blanksasnull maxerror 5000 ignoreblanklines escape delimiter '\t' gzip "
  19.  
  20. adminmail='you.name@gmail.com'
  21.  
  22. # reset dump path
  23. rm -rf $temppath
  24. mkdir $temppath
  25. #mkdir $temppath/$db_name
  26. chmod 777 $temppath
  27.  
  28.  
  29. # use maatkit to dump tab separated data
  30.  
  31. time mk-parallel-dump -h"$host" -u"$user" -p"$password" --base-dir "$temppath" --databases $db_name --tab
  32.  
  33. # if maatkit is not installed, use built-in tab parameter
  34. #extra="--tab=$temppath/$db_name -f --no-create-info"
  35. #time mysqldump $db_name $extra
  36.  
  37. # generate drop table statements
  38. for tbl_name in ` mysql $db_name -Bse"show tables" `
  39. do
  40. echo "drop table $tbl_name ;" >> /root/$db_name.txt
  41. done
  42.  
  43. # create table statements modified using sed
  44. mysqldump $db_name --skip-triggers --no-data --compact --compatible=ansi,no_table_options,no_key_options,no_field_options --force |
  45. grep -v ' KEY "' |
  46. grep -v ' UNIQUE KEY "' |
  47. grep -v ' PRIMARY KEY ' |
  48. grep -v ' CONSTRAINT "' |
  49. sed '/^SET/d' |
  50. sed 's/ unsigned / /g' |
  51. sed 's/ zerofill / /g' |
  52. sed 's/ auto_increment/ primary key autoincrement/g' |
  53. sed 's/ tinyint([0-9]*) / smallint /g' |
  54. sed 's/ smallint([0-9]*) / smallint /g' |
  55. sed 's/ mediumint([0-9]*) / integer /g' |
  56. sed 's/ int([0-9]*) / integer /g' |
  57. sed 's/ bigint([0-9]*) / bigint /g' |
  58. sed 's/ double / float /g' |
  59. sed 's/ double(.*) / float /g' |
  60. sed 's/ double, / float, /g' |
  61. sed 's/ double(.*), / float, /g' |
  62. sed 's/ float(.*)/ float /g' |
  63. sed 's/ decimal(.*)/ decimal(29,2) /g' |
  64. sed 's/ time / varchar(255) /g' |
  65. sed 's/ time,/ varchar(255), /g' |
  66. sed 's/ tinytext/ varchar(255) /g' |
  67. sed 's/ text / varchar(max) /g' |
  68. sed 's/ text,/ varchar(max), /g' |
  69. sed 's/ mediumtext/ varchar(max) /g' |
  70. sed 's/ longtext/ varchar(max) /g' |
  71. sed 's/ tinyblob/ varchar(max) /g' |
  72. sed 's/ blob/ varchar(max) /g' |
  73. sed 's/ mediumblob/ varchar(max) /g' |
  74. sed 's/ longblob/ varchar(max) /g' |
  75. sed 's/ set(.*)/ varchar(max) /g' |
  76. sed 's/ CHARACTER SET \w*/ /g' |
  77. sed 's/ enum([^)]*) / varchar(255) /g' |
  78. sed "s/ COMMENT.*'[^']*'/ /" |
  79. sed "s/date DEFAULT '0000-00-00'/ date /g" |
  80. sed "s/date NOT NULL DEFAULT '0000-00-00'/ date /g" |
  81. sed "s/timestamp NOT NULL DEFAULT '0000-00-00 00:00:00'/ timestamp /g" |
  82. sed "s/timestamp DEFAULT '0000-00-00 00:00:00'/ timestamp /g" |
  83. sed "s/datetime NOT NULL DEFAULT '0000-00-00 00:00:00'/ datetime /g" |
  84. sed "s/datetime DEFAULT '0000-00-00 00:00:00'/ datetime /g" |
  85. sed 's/ on update [^,]*//g' |
  86. sed 's/a/aA/g;s/__/aB/g;s/#/aC/g' | sed 's/aC/#/g;s/aB/__/g;s/aA/a/g' |
  87. sed 's/ DEFAULT .*,/,/' |
  88. sed 's/ DEFAULT .*//' |
  89. sed 's/NOT NULL AUTO_INCREMENT,/,/' |
  90. sed 's/NOT NULL//' |
  91. sed 's/ char(.*)/ varchar(max)/' |
  92. sed '/\/\*/d' |
  93. sed -r ':a; s%(.*)/\*.*\*/%\1%; ta; /\/\*/ !b; N; ba' |
  94. perl -e 'local $/;$_=<>;s/,\n\)/\n\)/gs;print "\n";print;print "\n"' |
  95. perl -pe '
  96. if (/^(INSERT.+?)\(/) {
  97. $a=$1;
  98. s/\\'\''/'\'\''/g;
  99. s/\\n/\n/g;
  100. s/\),\(/\);\n$a\(/g;
  101. }
  102. ' >> /root/$db_name.txt 2> /root/$db_name.err
  103.  
  104.  
  105. # generate copy statements
  106. for tbl_name in ` mysql $db_name -Bse"show tables" `
  107. do
  108. echo "copy $tbl_name from '$s3path/$tbl_name.' credentials 'aws_access_key_id=$access;aws_secret_access_key=$secret' $options;" >> /root/$db_name.txt
  109. done
  110.  
  111. # compress files
  112. time gzip $temppath/$db_name/*.txt
  113.  
  114. # copy to amazon s3
  115. s3cmd mb $s3path
  116. s3cmd sync /$temppath/$db_name/ $s3path
  117.  
  118. # send the create table statements file by email
  119.  
  120. echo "create table statements compatible with redshift for db $db_name attached. " | mutt -s "redshift commands for $db_name" -a /root/$db_name.txt -- $adminmail
Add Comment
Please, Sign In to add comment