/bin/shell/redumpall.sh

https://github.com/GunioRobot/ezpublish · Shell · 326 lines · 302 code · 17 blank · 7 comment · 8 complexity · 5395b254151ef9cee76cbfe9d517799f MD5 · raw file

  1. #!/bin/bash
  2. . ./bin/shell/sqlcommon.sh
  3. . ./bin/shell/common.sh
  4. if ! which php &>/dev/null; then
  5. echo "No PHP executable found, please add it to the path"
  6. exit 1
  7. fi
  8. function help
  9. {
  10. echo "Usage: $0 [options] DBNAME"
  11. echo "Imports and dumps all databases using database DBNAME"
  12. echo
  13. echo "Options: -h"
  14. echo " --help This message"
  15. echo " --db-user Which database user to connect with"
  16. echo " --db-host Which database host to connect to"
  17. echo " --schema Redump schema and validate for MySQL and PostgreSQL"
  18. echo " --data Redump data files"
  19. echo " --clean Cleanup various data entries before dumping (e.g. session, drafts)"
  20. echo " --clean-search Cleanup search index (implies --clean)"
  21. echo
  22. # Show options for database
  23. ezdist_mysql_show_options
  24. ezdist_postgresql_show_options
  25. echo
  26. echo "Example:"
  27. echo "$0 --mysql tmp"
  28. }
  29. DUMP_DATA=""
  30. PAUSE=""
  31. # Initialise several database related variables, see sqlcommon.sh
  32. ezdist_db_init
  33. # DataBaseArray file
  34. GENERIC_SCHEMA="share/db_schema.dba"
  35. # Temporary schema files
  36. TEMP_MYSQL_SCHEMA_FILE="mysql_schema.dba"
  37. TEMP_POSTGRESQL_SCHEMA_FILE="postgresql_schema.dba"
  38. TEMP_DATA_FILE="data_schema.dba"
  39. # Check parameters
  40. for arg in $*; do
  41. case $arg in
  42. --help|-h)
  43. help
  44. exit 1
  45. ;;
  46. --schema)
  47. DUMP_SCHEMA="1"
  48. ;;
  49. --data)
  50. DUMP_DATA="yes"
  51. ;;
  52. --pause)
  53. USE_PAUSE="yes"
  54. PAUSE="--pause"
  55. ;;
  56. --clean)
  57. CLEAN="--clean"
  58. ;;
  59. --clean-search)
  60. CLEAN="--clean"
  61. CLEAN_SEARCH="--clean-search"
  62. ;;
  63. --*)
  64. # Check for DB options
  65. ezdist_mysql_check_options "$arg" && continue
  66. ezdist_postgresql_check_options "$arg" && continue
  67. if [ $? -ne 0 ]; then
  68. echo "$arg: unknown long option specified"
  69. echo
  70. echo "Type '$0 --help\` for a list of options to use."
  71. exit 1
  72. fi
  73. ;;
  74. -*)
  75. # Check for DB options
  76. ezdist_mysql_check_short_options "$arg" && continue
  77. ezdist_postgresql_check_short_options "$arg" && continue
  78. if [ $? -ne 0 ]; then
  79. echo "$arg: unknown option specified"
  80. echo
  81. echo "Type '$0 --help\` for a list of options to use."
  82. exit 1
  83. fi
  84. ;;
  85. *)
  86. if [ -z $DBNAME ]; then
  87. DBNAME="$arg"
  88. else
  89. echo "$arg: unknown argument specified"
  90. echo
  91. echo "Type '$0 --help\` for a list of options to use."
  92. exit 1
  93. fi
  94. ;;
  95. esac;
  96. done
  97. if [ -z $DBNAME ]; then
  98. echo "Missing database name"
  99. echo
  100. help
  101. exit 1;
  102. fi
  103. function helpUpdateData
  104. {
  105. echo "You must create the sql update files before you can use this command"
  106. echo "Copy the data sqls (insert, update etc.) to data.sql"
  107. echo
  108. echo "The data is normally taken from the database update files for the current release"
  109. }
  110. function helpUpdateMySQL
  111. {
  112. echo "You must create the mysql sql update files before you can use this command"
  113. echo "Copy the definition sqls (create, alter etc.) to mysql_schema.sql"
  114. echo "and data sqls (insert, update etc.) to mysql_data.sql"
  115. echo
  116. echo "The definitions and data is normally taken from the database update files for the current release"
  117. }
  118. function helpUpdatePostgreSQL
  119. {
  120. echo "You must create the postgresql sql update files before you can use this command"
  121. echo "Copy the definition sqls (create, alter etc.) to postgresql_schema.sql"
  122. echo "and data sqls (insert, update etc.) to postgresql_data.sql"
  123. echo
  124. echo "The definitions and data is normally taken from the database update files for the current release"
  125. }
  126. if [ "$DUMP_SCHEMA" == "" -a "$DUMP_DATA" == "" ]; then
  127. echo "You must choose either to dump schema with --schema or data with --data"
  128. echo
  129. help
  130. exit 1
  131. fi
  132. DUMP_TYPE=""
  133. if [ -n "$DUMP_SCHEMA" ]; then
  134. #
  135. # Check for schema files
  136. #
  137. if [ ! -f $MYSQL_SCHEMA_UPDATES ]; then
  138. echo "Missing `ez_color_file $MYSQL_SCHEMA_UPDATES`"
  139. helpUpdateMySQL
  140. exit 1
  141. fi
  142. if [ ! -e $POSTGRESQL_SCHEMA_UPDATES ]; then
  143. echo "Missing `ez_color_file $POSTGRESQL_SCHEMA_UPDATES`"
  144. helpUpdatePostgreSQL
  145. exit 1
  146. fi
  147. #
  148. # Handle MySQL schema
  149. #
  150. # Init MySQL
  151. ezdist_db_init_mysql_from_defaults
  152. ezdist_mysql_prepare_params
  153. echo "Handling `ez_color_em MySQL` schema"
  154. ./bin/shell/sqlredump.sh --mysql $PARAM_EZ_MYSQL_ALL $PAUSE --sql-schema-file="$TEMP_MYSQL_SCHEMA_FILE" --sql-schema-only "$DBNAME" "$KERNEL_GENERIC_SCHEMA_FILE" "$MYSQL_SCHEMA_UPDATES"
  155. if [ $? -ne 0 ]; then
  156. echo "Failed re-dumping schema file `ez_color_file $KERNEL_GENERIC_SCHEMA_FILE`"
  157. exit 1
  158. fi
  159. #
  160. # Handle PostgreSQL schema
  161. #
  162. # Init PostgreSQL
  163. ezdist_db_init_postgresql_from_defaults
  164. ezdist_postgresql_prepare_params
  165. echo "Handling `ez_color_em PostgreSQL` schema"
  166. ./bin/shell/sqlredump.sh --postgresql $PARAM_EZ_POSTGRESQL_ALL $PAUSE --sql-schema-file="$TEMP_POSTGRESQL_SCHEMA_FILE" --sql-schema-only --setval-file=$KERNEL_POSTGRESQL_SETVAL_FILE "$DBNAME" "$KERNEL_GENERIC_SCHEMA_FILE" "$POSTGRESQL_SCHEMA_UPDATES"
  167. if [ $? -ne 0 ]; then
  168. echo "Failed re-dumping SQL file `ez_color_file $KERNEL_POSTGRESQL_SCHEMA_FILE`"
  169. exit 1
  170. fi
  171. #
  172. # Validate files with each other
  173. #
  174. echo -n "Validating schema files"
  175. diff -U3 "$TEMP_MYSQL_SCHEMA_FILE" "$TEMP_POSTGRESQL_SCHEMA_FILE" &>.dump.log
  176. ez_result_file $? .dump.log
  177. if [ $? -ne 0 ]; then
  178. rm -f "$TEMP_MYSQL_SCHEMA_FILE"
  179. rm -f "$TEMP_POSTGRESQL_SCHEMA_FILE"
  180. exit 1
  181. fi
  182. #
  183. # Validate schemas with each other
  184. #
  185. echo -n "Validating schemas"
  186. ./bin/php/ezsqldiff.php --source-type=mysql --match-type=postgresql "$TEMP_MYSQL_SCHEMA_FILE" "$TEMP_POSTGRESQL_SCHEMA_FILE" &>.dump.log
  187. ez_result_file $? .dump.log
  188. if [ $? -ne 0 ]; then
  189. rm -f "$TEMP_MYSQL_SCHEMA_FILE"
  190. rm -f "$TEMP_POSTGRESQL_SCHEMA_FILE"
  191. exit 1
  192. fi
  193. #
  194. # Validate schema with lint checker
  195. #
  196. echo -n "Checking schema syntax"
  197. ./bin/php/ezsqldiff.php --source-type=mysql --lint-check "$TEMP_MYSQL_SCHEMA_FILE" &>.dump.log
  198. ez_result_file $? .dump.log
  199. if [ $? -ne 0 ]; then
  200. rm -f "$TEMP_MYSQL_SCHEMA_FILE"
  201. rm -f "$TEMP_POSTGRESQL_SCHEMA_FILE"
  202. exit 1
  203. fi
  204. #
  205. # Copy temp schema to standard and cleanup
  206. #
  207. echo -n "Copying temp schema to standard"
  208. cp -f "$TEMP_MYSQL_SCHEMA_FILE" "$KERNEL_GENERIC_SCHEMA_FILE" 2>.dump.log
  209. ez_result_file $? .dump.log
  210. echo -n "Cleaning up temporary files"
  211. rm -f "$MYSQL_SCHEMA_UPDATES".done 2>.dump.log
  212. rm -f "$POSTGRESQL_SCHEMA_UPDATES".done 2>.dump.log
  213. mv "$MYSQL_SCHEMA_UPDATES" "$MYSQL_SCHEMA_UPDATES".done 2>.dump.log
  214. mv "$POSTGRESQL_SCHEMA_UPDATES" "$POSTGRESQL_SCHEMA_UPDATES".done 2>.dump.log
  215. rm -f "$TEMP_MYSQL_SCHEMA_FILE" 2>.dump.log
  216. rm -f "$TEMP_POSTGRESQL_SCHEMA_FILE" 2>.dump.log
  217. ez_result_file 0 .dump.log
  218. #
  219. # Update SQL files
  220. #
  221. # MySQL
  222. ezdist_db_prepare_params_from_mysql "1"
  223. echo -n "Updating MySQL file `ez_color_file $KERNEL_MYSQL_SCHEMA_FILE`"
  224. # We output InnoDB tables by default, older MySQLs will use MyISAM instead
  225. ./bin/php/ezsqldumpschema.php --type=mysql --output-sql --compatible-sql --table-type=innodb $PARAM_EZ_DB_ALL "$KERNEL_GENERIC_SCHEMA_FILE" "$KERNEL_MYSQL_SCHEMA_FILE" 2>.dump.log
  226. ez_result_file $? .dump.log || exit 1
  227. # PostgreSQL
  228. ezdist_db_prepare_params_from_postgresql "1"
  229. echo -n "Updating PostgreSQL file `ez_color_file $KERNEL_POSTGRESQL_SCHEMA_FILE`"
  230. ./bin/php/ezsqldumpschema.php --type=postgresql --output-sql --compatible-sql $PARAM_EZ_DB_ALL "$KERNEL_GENERIC_SCHEMA_FILE" "$KERNEL_POSTGRESQL_SCHEMA_FILE" 2>.dump.log
  231. ez_result_file $? .dump.log || exit 1
  232. fi
  233. if [ "$DUMP_DATA" != "" ]; then
  234. if [ ! -f "$DATA_UPDATES" ]; then
  235. echo "Missing `ez_color_file $DATA_UPDATES`"
  236. helpUpdateData
  237. exit 1
  238. fi
  239. #
  240. # Handle database data
  241. #
  242. # Init MySQL
  243. ezdist_db_init_mysql_from_defaults
  244. ezdist_mysql_prepare_params
  245. echo "Handling database data"
  246. ./bin/shell/sqlredump.sh --mysql $CLEAN $CLEAN_SEARCH $PAUSE $PARAM_EZ_MYSQL_ALL --sql-schema-file="$TEMP_DATA_FILE" --sql-data-only "$DBNAME" --schema-sql="$KERNEL_GENERIC_SCHEMA_FILE" "$KERNEL_GENERIC_DATA_FILE" "$DATA_UPDATES"
  247. if [ $? -ne 0 ]; then
  248. echo "Failed re-dumping SQL file `ez_color_file $KERNEL_GENERIC_DATA_FILE`"
  249. exit 1
  250. fi
  251. #
  252. # Copy temp schema to standard and cleanup
  253. #
  254. echo -n "Copying temp data to standard"
  255. cp -f "$TEMP_DATA_FILE" "$KERNEL_GENERIC_DATA_FILE" 2>.dump.log
  256. ez_result_file $? .dump.log
  257. echo -n "Cleaning up temporary files"
  258. rm -f "$DATA_UPDATES".done 2>.dump.log
  259. mv "$DATA_UPDATES" "$DATA_UPDATES".done 2>.dump.log
  260. rm -f "$TEMP_DATA_FILE" 2>.dump.log
  261. ez_result_file 0 .dump.log
  262. #
  263. # Update SQL files
  264. #
  265. echo -n "Updating data file `ez_color_file $KERNEL_SQL_DATA_FILE`"
  266. ./bin/php/ezsqldumpschema.php --type=mysql --output-sql --output-types=data --compatible-sql --diff-friendly --schema-file="$KERNEL_GENERIC_SCHEMA_FILE" "$KERNEL_GENERIC_DATA_FILE" "$KERNEL_SQL_DATA_FILE" 2>.dump.log
  267. ez_result_file $? .dump.log || exit 1
  268. fi