db.sh 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645
  1. # Get database host
  2. get_next_dbhost() {
  3. if [ -z "$host" ] || [ "$host" == 'default' ]; then
  4. IFS=$'\n'
  5. host='EMPTY_DB_HOST'
  6. config="$VESTA/conf/$type.conf"
  7. host_str=$(grep "SUSPENDED='no'" $config)
  8. check_row=$(echo "$host_str"|wc -l)
  9. if [ 0 -lt "$check_row" ]; then
  10. if [ 1 -eq "$check_row" ]; then
  11. for db in $host_str; do
  12. eval $db
  13. if [ "$MAX_DB" -gt "$U_DB_BASES" ]; then
  14. host=$HOST
  15. fi
  16. done
  17. else
  18. old_weight='100'
  19. for db in $host_str; do
  20. eval $db
  21. let weight="$U_DB_BASES * 100 / $MAX_DB" &>/dev/null
  22. if [ "$old_weight" -gt "$weight" ]; then
  23. host="$HOST"
  24. old_weight="$weight"
  25. fi
  26. done
  27. fi
  28. fi
  29. fi
  30. }
  31. # Database charset validation
  32. is_charset_valid() {
  33. host_str=$(grep "HOST='$host'" $VESTA/conf/$type.conf)
  34. eval $host_str
  35. if [ -z "$(echo $CHARSETS | grep -wi $charset )" ]; then
  36. echo "Error: charset $charset not exist"
  37. log_event "$E_NOTEXIST $EVENT"
  38. exit $E_NOTEXIST
  39. fi
  40. }
  41. # Increase database host value
  42. increase_dbhost_values() {
  43. host_str=$(grep "HOST='$host'" $VESTA/conf/$type.conf)
  44. eval $host_str
  45. old_dbbases="U_DB_BASES='$U_DB_BASES'"
  46. new_dbbases="U_DB_BASES='$((U_DB_BASES + 1))'"
  47. if [ -z "$U_SYS_USERS" ]; then
  48. old_users="U_SYS_USERS=''"
  49. new_users="U_SYS_USERS='$user'"
  50. else
  51. old_users="U_SYS_USERS='$U_SYS_USERS'"
  52. new_users="U_SYS_USERS='$U_SYS_USERS'"
  53. if [ -z "$(echo $U_SYS_USERS|sed -e "s/,/\n/g"|grep -w $user)" ]; then
  54. old_users="U_SYS_USERS='$U_SYS_USERS'"
  55. new_users="U_SYS_USERS='$U_SYS_USERS,$user'"
  56. fi
  57. fi
  58. sed -i "s/$old_dbbases/$new_dbbases/g" $VESTA/conf/$type.conf
  59. sed -i "s/$old_users/$new_users/g" $VESTA/conf/$type.conf
  60. }
  61. # Decrease database host value
  62. decrease_dbhost_values() {
  63. host_str=$(grep "HOST='$HOST'" $VESTA/conf/$TYPE.conf)
  64. eval $host_str
  65. old_dbbases="U_DB_BASES='$U_DB_BASES'"
  66. new_dbbases="U_DB_BASES='$((U_DB_BASES - 1))'"
  67. old_users="U_SYS_USERS='$U_SYS_USERS'"
  68. U_SYS_USERS=$(echo "$U_SYS_USERS" |\
  69. sed -e "s/,/\n/g"|\
  70. sed -e "s/^$user$//g"|\
  71. sed -e "/^$/d"|\
  72. sed -e ':a;N;$!ba;s/\n/,/g')
  73. new_users="U_SYS_USERS='$U_SYS_USERS'"
  74. sed -i "s/$old_dbbases/$new_dbbases/g" $VESTA/conf/$TYPE.conf
  75. sed -i "s/$old_users/$new_users/g" $VESTA/conf/$TYPE.conf
  76. }
  77. # Create MySQL database
  78. add_mysql_database() {
  79. host_str=$(grep "HOST='$host'" $VESTA/conf/mysql.conf)
  80. eval $host_str
  81. if [ -z $HOST ] || [ -z $USER ] || [ -z $PASSWORD ] || [ -z $PORT ]; then
  82. echo "Error: mysql config parsing failed"
  83. log_event "$E_PARSING" "$EVENT"
  84. exit $E_PARSING
  85. fi
  86. query='SELECT VERSION()'
  87. mysql -h $HOST -u $USER -p$PASSWORD -P $PORT -e "$query" &> /dev/null
  88. if [ '0' -ne "$?" ]; then
  89. echo "Error: Connection failed"
  90. log_event "$E_DB $EVENT"
  91. exit $E_DB
  92. fi
  93. query="CREATE DATABASE \`$database\` CHARACTER SET $charset"
  94. mysql -h $HOST -u $USER -p$PASSWORD -P $PORT -e "$query" &> /dev/null
  95. query="GRANT ALL ON \`$database\`.* TO \`$dbuser\`@\`%\`
  96. IDENTIFIED BY '$dbpass'"
  97. mysql -h $HOST -u $USER -p$PASSWORD -P $PORT -e "$query" &> /dev/null
  98. query="GRANT ALL ON \`$database\`.* TO \`$dbuser\`@localhost
  99. IDENTIFIED BY '$dbpass'"
  100. mysql -h $HOST -u $USER -p$PASSWORD -P $PORT -e "$query" &> /dev/null
  101. query="SHOW GRANTS FOR \`$dbuser\`"
  102. md5=$(mysql -h $HOST -u $USER -p$PASSWORD -P $PORT -e "$query")
  103. md5=$(echo "$md5" |grep 'PASSWORD' |tr ' ' '\n' |tail -n1 |cut -f 2 -d \')
  104. }
  105. # Create PostgreSQL database
  106. add_pgsql_database() {
  107. host_str=$(grep "HOST='$host'" $VESTA/conf/pgsql.conf)
  108. eval $host_str
  109. export PGPASSWORD="$PASSWORD"
  110. if [ -z $HOST ] || [ -z $USER ] || [ -z $PASSWORD ] || [ -z $TPL ]; then
  111. echo "Error: postgresql config parsing failed"
  112. log_event "$E_PARSING" "$EVENT"
  113. exit $E_PARSING
  114. fi
  115. query='SELECT VERSION()'
  116. psql -h $HOST -U $USER -p $PORT -c "$query" &> /dev/null
  117. if [ '0' -ne "$?" ]; then
  118. echo "Error: Connection failed"
  119. log_event "$E_DB" "$EVENT"
  120. exit $E_DB
  121. fi
  122. query="CREATE ROLE $dbuser WITH LOGIN PASSWORD '$dbpass'"
  123. psql -h $HOST -U $USER -p $PORT -c "$query" &> /dev/null
  124. query="CREATE DATABASE $database OWNER $dbuser"
  125. if [ "$TPL" = 'template0' ]; then
  126. query="$query ENCODING '$charset' TEMPLATE $TPL"
  127. else
  128. query="$query TEMPLATE $TPL"
  129. fi
  130. psql -h $HOST -U $USER -p $PORT -c "$query" &> /dev/null
  131. query="GRANT ALL PRIVILEGES ON DATABASE $database TO $dbuser"
  132. psql -h $HOST -U $USER -p $PORT -c "$query" &> /dev/null
  133. query="GRANT CONNECT ON DATABASE template1 to $dbuser"
  134. psql -h $HOST -U $USER -p $PORT -c "$query" &> /dev/null
  135. query="SELECT rolpassword FROM pg_authid WHERE rolname='$dbuser';"
  136. md5=$(psql -h $HOST -U $USER -p $PORT -c "$query"|grep md5|cut -f 2 -d \ )
  137. }
  138. # Check if database host do not exist in config
  139. is_dbhost_new() {
  140. if [ -e "$VESTA/conf/$type.conf" ]; then
  141. check_host=$(grep "HOST='$host'" $VESTA/conf/$type.conf)
  142. if [ ! -z "$check_host" ]; then
  143. echo "Error: db host exist"
  144. log_event "$E_EXISTS" "$EVENT"
  145. exit $E_EXISTS
  146. fi
  147. fi
  148. }
  149. # Check MySQL database host
  150. is_mysql_host_alive() {
  151. query='SELECT VERSION()'
  152. mysql -h $host -u $dbuser -p$dbpass -P $port -e "$query" &> /dev/null
  153. if [ '0' -ne "$?" ]; then
  154. echo "Error: Connection to $host failed"
  155. log_event "$E_DB" "$EVENT"
  156. exit $E_DB
  157. fi
  158. }
  159. # Check PostgreSQL database host
  160. is_pgsql_host_alive() {
  161. export PGPASSWORD="$dbpass"
  162. psql -h $host -U $dbuser -p $port -c "SELECT VERSION()" &> /dev/null
  163. if [ '0' -ne "$?" ]; then
  164. echo "Error: Connection to $host failed"
  165. log_event "$E_DB" "$EVENT"
  166. exit $E_DB
  167. fi
  168. }
  169. # Get database values
  170. get_database_values() {
  171. db_str=$(grep "DB='$database'" $USER_DATA/db.conf)
  172. eval $db_str
  173. }
  174. # Change MySQL database password
  175. change_mysql_password() {
  176. host_str=$(grep "HOST='$HOST'" $VESTA/conf/mysql.conf)
  177. eval $host_str
  178. if [ -z $HOST ] || [ -z $USER ] || [ -z $PASSWORD ] || [ -z $PORT ]; then
  179. echo "Error: mysql config parsing failed"
  180. log_event "$E_PARSING" "$EVENT"
  181. exit $E_PARSING
  182. fi
  183. query='SELECT VERSION()'
  184. mysql -h $HOST -u $USER -p$PASSWORD -P $PORT -e "$query" &> /dev/null
  185. if [ '0' -ne "$?" ]; then
  186. echo "Error: Connection failed"
  187. log_event "$E_DB $EVENT"
  188. exit $E_DB
  189. fi
  190. query="GRANT ALL ON \`$database\`.* TO \`$DBUSER\`@\`%\`
  191. IDENTIFIED BY '$dbpass'"
  192. mysql -h $HOST -u $USER -p$PASSWORD -P $PORT -e "$query" &> /dev/null
  193. query="GRANT ALL ON \`$database\`.* TO \`$DBUSER\`@localhost
  194. IDENTIFIED BY '$dbpass'"
  195. mysql -h $HOST -u $USER -p$PASSWORD -P $PORT -e "$query" &> /dev/null
  196. query="SHOW GRANTS FOR '$DBUSER'"
  197. md5=$(mysql -h $HOST -u $USER -p$PASSWORD -P $PORT -e "$query")
  198. md5=$(echo "$md5" |grep 'PASSWORD' |tr ' ' '\n' |tail -n1 |cut -f 2 -d \')
  199. }
  200. # Change PostgreSQL database password
  201. change_pgsql_password() {
  202. host_str=$(grep "HOST='$HOST'" $VESTA/conf/pgsql.conf)
  203. eval $host_str
  204. export PGPASSWORD="$PASSWORD"
  205. if [ -z $HOST ] || [ -z $USER ] || [ -z $PASSWORD ] || [ -z $TPL ]; then
  206. echo "Error: postgresql config parsing failed"
  207. log_event "$E_PARSING" "$EVENT"
  208. exit $E_PARSING
  209. fi
  210. query='SELECT VERSION()'
  211. psql -h $HOST -U $USER -p $PORT -c "$query" &> /dev/null
  212. if [ '0' -ne "$?" ]; then
  213. echo "Error: Connection failed"
  214. log_event "$E_DB" "$EVENT"
  215. exit $E_DB
  216. fi
  217. query="ALTER ROLE $DBUSER WITH LOGIN PASSWORD '$dbpass'"
  218. psql -h $HOST -U $USER -p $PORT -c "$query" &> /dev/null
  219. query="SELECT rolpassword FROM pg_authid WHERE rolname='$DBUSER';"
  220. md5=$(psql -h $HOST -U $USER -p $PORT -c "$query"|grep md5|cut -f 2 -d \ )
  221. }
  222. # Delete MySQL database
  223. delete_mysql_database() {
  224. host_str=$(grep "HOST='$HOST'" $VESTA/conf/mysql.conf)
  225. eval $host_str
  226. if [ -z $HOST ] || [ -z $USER ] || [ -z $PASSWORD ] || [ -z $PORT ]; then
  227. echo "Error: mysql config parsing failed"
  228. log_event "$E_PARSING" "$EVENT"
  229. exit $E_PARSING
  230. fi
  231. query='SELECT VERSION()'
  232. mysql -h $HOST -u $USER -p$PASSWORD -P $PORT -e "$query" &> /dev/null
  233. if [ '0' -ne "$?" ]; then
  234. echo "Error: Connection failed"
  235. log_event "$E_DB $EVENT"
  236. exit $E_DB
  237. fi
  238. query="DROP DATABASE \`$database\`"
  239. mysql -h $HOST -u $USER -p$PASSWORD -P $PORT -e "$query" &> /dev/null
  240. query="REVOKE ALL ON \`$database\`.* FROM \`$DBUSER\`@\`%\`"
  241. mysql -h $HOST -u $USER -p$PASSWORD -P $PORT -e "$query" &> /dev/null
  242. query="REVOKE ALL ON \`$database\`.* FROM \`$DBUSER\`@localhost"
  243. mysql -h $HOST -u $USER -p$PASSWORD -P $PORT -e "$query" &> /dev/null
  244. if [ "$(grep "DBUSER='$DBUSER'" $USER_DATA/db.conf |wc -l)" -lt 2 ]; then
  245. query="DROP USER '$DBUSER'@'%'"
  246. mysql -h $HOST -u $USER -p$PASSWORD -P $PORT -e "$query" &> /dev/null
  247. query="DROP USER '$DBUSER'@'localhost'"
  248. mysql -h $HOST -u $USER -p$PASSWORD -P $PORT -e "$query" &> /dev/null
  249. fi
  250. }
  251. # Delete PostgreSQL database
  252. delete_pgsql_database() {
  253. host_str=$(grep "HOST='$HOST'" $VESTA/conf/pgsql.conf)
  254. eval $host_str
  255. export PGPASSWORD="$PASSWORD"
  256. if [ -z $HOST ] || [ -z $USER ] || [ -z $PASSWORD ] || [ -z $TPL ]; then
  257. echo "Error: postgresql config parsing failed"
  258. log_event "$E_PARSING" "$EVENT"
  259. exit $E_PARSING
  260. fi
  261. query='SELECT VERSION()'
  262. psql -h $HOST -U $USER -p $PORT -c "$query" &> /dev/null
  263. if [ '0' -ne "$?" ]; then
  264. echo "Error: Connection failed"
  265. log_event "$E_DB" "$EVENT"
  266. exit $E_DB
  267. fi
  268. query="REVOKE ALL PRIVILEGES ON DATABASE $database FROM $DBUSER"
  269. psql -h $HOST -U $USER -p $PORT -c "$query" &> /dev/null
  270. query="DROP DATABASE $database"
  271. psql -h $HOST -U $USER -p $PORT -c "$query" &> /dev/null
  272. if [ "$(grep "DBUSER='$DBUSER'" $USER_DATA/db.conf |wc -l)" -lt 2 ]; then
  273. query="REVOKE CONNECT ON DATABASE template1 FROM $db_user"
  274. psql -h $HOST -U $USER -p $PORT -c "$query" &> /dev/null
  275. query="DROP ROLE $db_user"
  276. psql -h $HOST -U $USER -p $PORT -c "$query" &> /dev/null
  277. fi
  278. }
  279. # Dump MySQL database
  280. dump_mysql_database() {
  281. host_str=$(grep "HOST='$HOST'" $VESTA/conf/mysql.conf)
  282. eval $host_str
  283. if [ -z $HOST ] || [ -z $USER ] || [ -z $PASSWORD ] || [ -z $PORT ]; then
  284. rm -rf $tmpdir
  285. echo "Can't parse mysql config" | mail -s "$subj" $email
  286. echo "Error: mysql config parsing failed"
  287. log_event "$E_PARSING" "$EVENT"
  288. exit $E_PARSING
  289. fi
  290. query='SELECT VERSION()'
  291. mysql -h $HOST -u $USER -p$PASSWORD -P $PORT -e "$query" &> /dev/null
  292. if [ '0' -ne "$?" ]; then
  293. rm -rf $tmpdir
  294. echo "Can't connect to mysql server $HOST" | mail -s "$subj" $email
  295. echo "Error: Connection failed"
  296. log_event "$E_DB $EVENT"
  297. exit $E_DB
  298. fi
  299. mysqldump -h $HOST -u $USER -p$PASSWORD -P$PORT -r $dump $database
  300. if [ '0' -ne "$?" ]; then
  301. rm -rf $tmpdir
  302. echo "Can't dump mysql database $database" | mail -s "$subj" $email
  303. echo "Error: dump $database failed"
  304. log_event "$E_DB $EVENT"
  305. exit $E_DB
  306. fi
  307. query="SHOW GRANTS FOR '$DBUSER'@'localhost'"
  308. mysql -h $HOST -u $USER -p$PASSWORD -P $PORT -e "$query" |\
  309. grep -v "Grants for" > $grants
  310. query="SHOW GRANTS FOR '$DBUSER'@'%'"
  311. mysql -h $HOST -u $USER -p$PASSWORD -P $PORT -e "$query" |\
  312. grep -v "Grants for" > $grants
  313. }
  314. # Dump PostgreSQL database
  315. dump_pgsql_database() {
  316. host_str=$(grep "HOST='$HOST'" $VESTA/conf/pgsql.conf)
  317. eval $host_str
  318. export PGPASSWORD="$PASSWORD"
  319. if [ -z $HOST ] || [ -z $USER ] || [ -z $PASSWORD ] || [ -z $TPL ]; then
  320. rm -rf $tmpdir
  321. echo "Can't parse pgsql config" | mail -s "$subj" $email
  322. echo "Error: postgresql config parsing failed"
  323. log_event "$E_PARSING" "$EVENT"
  324. exit $E_PARSING
  325. fi
  326. query='SELECT VERSION()'
  327. psql -h $HOST -U $USER -p $PORT -c "$query" &> /dev/null
  328. if [ '0' -ne "$?" ]; then
  329. rm -rf $tmpdir
  330. echo "Can't connect to pgsql server $HOST" | mail -s "$subj" $email
  331. echo "Error: Connection failed"
  332. log_event "$E_DB" "$EVENT"
  333. exit $E_DB
  334. fi
  335. pg_dump -h $HOST -U $USER -p $PORT -c -d -O -x -i -f $dump $database \
  336. 2> /dev/null
  337. if [ '0' -ne "$?" ]; then
  338. rm -rf $tmpdir
  339. echo "Can't dump pgsql database $database" | mail -s "$subj" $email
  340. echo "Error: dump $database failed"
  341. log_event "$E_DB $EVENT"
  342. exit $E_DB
  343. fi
  344. query="SELECT rolpassword FROM pg_authid WHERE rolname='$DBUSER';"
  345. md5=$(psql -h $HOST -U $USER -p $PORT -c "$query"|head -n1|cut -f 2 -d \ )
  346. pw_str="UPDATE pg_authid SET rolpassword='$md5' WHERE rolname='$DBUSER';"
  347. gr_str="GRANT ALL PRIVILEGES ON DATABASE $database to '$DBUSER'"
  348. echo -e "$pw_str\n$gr_str" >> $grants
  349. }
  350. # Check if database server is in use
  351. is_dbhost_free() {
  352. host_str=$(grep "HOST='$host'" $VESTA/conf/$type.conf)
  353. eval $host_str
  354. if [ 0 -ne "$U_DB_BASES" ]; then
  355. echo "Error: host $HOST is used"
  356. log_event "$E_INUSE" "$EVENT"
  357. exit $E_INUSE
  358. fi
  359. }
  360. # Suspend MySQL database
  361. suspend_mysql_database() {
  362. host_str=$(grep "HOST='$HOST'" $VESTA/conf/mysql.conf)
  363. eval $host_str
  364. if [ -z $HOST ] || [ -z $USER ] || [ -z $PASSWORD ] || [ -z $PORT ]; then
  365. echo "Error: mysql config parsing failed"
  366. log_event "$E_PARSING" "$EVENT"
  367. exit $E_PARSING
  368. fi
  369. query='SELECT VERSION()'
  370. mysql -h $HOST -u $USER -p$PASSWORD -P $PORT -e "$query" &> /dev/null
  371. if [ '0' -ne "$?" ]; then
  372. echo "Error: Connection failed"
  373. log_event "$E_DB $EVENT"
  374. exit $E_DB
  375. fi
  376. query="REVOKE ALL ON \`$database\`.* FROM \`$DBUSER\`@\`%\`"
  377. mysql -h $HOST -u $USER -p$PASSWORD -P $PORT -e "$query" &> /dev/null
  378. query="REVOKE ALL ON \`$database\`.* FROM \`$DBUSER\`@localhost"
  379. mysql -h $HOST -u $USER -p$PASSWORD -P $PORT -e "$query" &> /dev/null
  380. }
  381. # Suspend PostgreSQL database
  382. suspend_pgsql_database() {
  383. host_str=$(grep "HOST='$HOST'" $VESTA/conf/pgsql.conf)
  384. eval $host_str
  385. export PGPASSWORD="$PASSWORD"
  386. if [ -z $HOST ] || [ -z $USER ] || [ -z $PASSWORD ] || [ -z $TPL ]; then
  387. echo "Error: postgresql config parsing failed"
  388. log_event "$E_PARSING" "$EVENT"
  389. exit $E_PARSING
  390. fi
  391. query='SELECT VERSION()'
  392. psql -h $HOST -U $USER -p $PORT -c "$query" &> /dev/null
  393. if [ '0' -ne "$?" ]; then
  394. echo "Error: Connection failed"
  395. log_event "$E_DB" "$EVENT"
  396. exit $E_DB
  397. fi
  398. query="REVOKE ALL PRIVILEGES ON $database FROM $DBUSER"
  399. psql -h $HOST -U $USER -p $PORT -c "$query" &> /dev/null
  400. }
  401. # Unsuspend MySQL database
  402. unsuspend_mysql_database() {
  403. host_str=$(grep "HOST='$HOST'" $VESTA/conf/mysql.conf)
  404. eval $host_str
  405. if [ -z $HOST ] || [ -z $USER ] || [ -z $PASSWORD ] || [ -z $PORT ]; then
  406. echo "Error: mysql config parsing failed"
  407. log_event "$E_PARSING" "$EVENT"
  408. exit $E_PARSING
  409. fi
  410. query='SELECT VERSION()'
  411. mysql -h $HOST -u $USER -p$PASSWORD -P $PORT -e "$query" &> /dev/null
  412. if [ '0' -ne "$?" ]; then
  413. echo "Error: Connection failed"
  414. log_event "$E_DB $EVENT"
  415. exit $E_DB
  416. fi
  417. query="GRANT ALL ON \`$database\`.* FROM \`$DBUSER\`@\`%\`"
  418. mysql -h $HOST -u $USER -p$PASSWORD -P $PORT -e "$query" &> /dev/null
  419. query="GRANT ALL ON \`$database\`.* TO \`$DBUSER\`@localhost"
  420. mysql -h $HOST -u $USER -p$PASSWORD -P $PORT -e "$query" &> /dev/null
  421. }
  422. # Unsuspend PostgreSQL database
  423. unsuspend_pgsql_database() {
  424. host_str=$(grep "HOST='$HOST'" $VESTA/conf/pgsql.conf)
  425. eval $host_str
  426. export PGPASSWORD="$PASSWORD"
  427. if [ -z $HOST ] || [ -z $USER ] || [ -z $PASSWORD ] || [ -z $TPL ]; then
  428. echo "Error: postgresql config parsing failed"
  429. log_event "$E_PARSING" "$EVENT"
  430. exit $E_PARSING
  431. fi
  432. query='SELECT VERSION()'
  433. psql -h $HOST -U $USER -p $PORT -c "$query" &> /dev/null
  434. if [ '0' -ne "$?" ]; then
  435. echo "Error: Connection failed"
  436. log_event "$E_DB" "$EVENT"
  437. exit $E_DB
  438. fi
  439. query="GRANT ALL PRIVILEGES ON DATABASE $database TO $DBUSER"
  440. psql -h $HOST -U $USER -p $PORT -c "$query" &> /dev/null
  441. }
  442. # Get MySQL disk usage
  443. get_mysql_disk_usage() {
  444. host_str=$(grep "HOST='$HOST'" $VESTA/conf/mysql.conf)
  445. eval $host_str
  446. if [ -z $HOST ] || [ -z $USER ] || [ -z $PASSWORD ] || [ -z $PORT ]; then
  447. echo "Error: mysql config parsing failed"
  448. log_event "$E_PARSING" "$EVENT"
  449. exit $E_PARSING
  450. fi
  451. query='SELECT VERSION()'
  452. mysql -h $HOST -u $USER -p$PASSWORD -P $PORT -e "$query" &> /dev/null
  453. if [ '0' -ne "$?" ]; then
  454. echo "Error: Connection failed"
  455. log_event "$E_DB $EVENT"
  456. exit $E_DB
  457. fi
  458. query="SELECT SUM( data_length + index_length ) / 1024 / 1024 \"Size\"
  459. FROM information_schema.TABLES WHERE table_schema='$database'"
  460. usage=$(mysql -h $HOST -u $USER -p$PASSWORD -P $PORT -e "$query" |tail -n1)
  461. if [ "$usage" == 'NULL' ] || [ "${usage:0:1}" -eq '0' ]; then
  462. usage=1
  463. fi
  464. export LC_ALL=C
  465. usage=$(printf "%0.f\n" $usage)
  466. }
  467. # Get PostgreSQL disk usage
  468. get_pgsql_disk_usage() {
  469. host_str=$(grep "HOST='$HOST'" $VESTA/conf/pgsql.conf)
  470. eval $host_str
  471. export PGPASSWORD="$PASSWORD"
  472. if [ -z $HOST ] || [ -z $USER ] || [ -z $PASSWORD ] || [ -z $TPL ]; then
  473. echo "Error: postgresql config parsing failed"
  474. log_event "$E_PARSING" "$EVENT"
  475. exit $E_PARSING
  476. fi
  477. query='SELECT VERSION()'
  478. psql -h $HOST -U $USER -p $PORT -c "$query" &> /dev/null
  479. if [ '0' -ne "$?" ]; then
  480. echo "Error: Connection failed"
  481. log_event "$E_DB" "$EVENT"
  482. exit $E_DB
  483. fi
  484. query="SELECT pg_database_size('$database');"
  485. usage=$(psql -h $HOST -U $USER -p $PORT -c "$query")
  486. usage=$(echo "$usage" | grep -v "-" | grep -v 'row' | sed -e "/^$/d")
  487. usage=$(echo "$usage" | grep -v "pg_database_size" | awk '{print $1}')
  488. if [ -z "$usage" ]; then
  489. usage=0
  490. fi
  491. usage=$(($usage / 1048576))
  492. if [ "$usage" -eq '0' ]; then
  493. usage=1
  494. fi
  495. }
  496. # Rebuild MySQL database
  497. rebuild_mysql_database() {
  498. host_str=$(grep "HOST='$HOST'" $VESTA/conf/mysql.conf)
  499. eval $host_str
  500. if [ -z $HOST ] || [ -z $USER ] || [ -z $PASSWORD ] || [ -z $PORT ]; then
  501. echo "Error: mysql config parsing failed"
  502. log_event "$E_PARSING" "$EVENT"
  503. exit $E_PARSING
  504. fi
  505. query='SELECT VERSION()'
  506. mysql -h $HOST -u $USER -p$PASSWORD -P $PORT -e "$query" &> /dev/null
  507. if [ '0' -ne "$?" ]; then
  508. echo "Error: Connection failed"
  509. log_event "$E_DB $EVENT"
  510. exit $E_DB
  511. fi
  512. query="CREATE DATABASE \`$database\` CHARACTER SET $CHARSET"
  513. mysql -h $HOST -u $USER -p$PASSWORD -P $PORT -e "$query" &> /dev/null
  514. query="GRANT ALL ON \`$database\`.* TO \`$DBUSER\`@\`%\`"
  515. mysql -h $HOST -u $USER -p$PASSWORD -P $PORT -e "$query" &> /dev/null
  516. query="GRANT ALL ON \`$database\`.* TO \`$DBUSER\`@localhost"
  517. mysql -h $HOST -u $USER -p$PASSWORD -P $PORT -e "$query" &> /dev/null
  518. query="UPDATE mysql.user SET Password='$MD5' WHERE User='$DBUSER';"
  519. mysql -h $HOST -u $USER -p$PASSWORD -P $PORT -e "$query" &> /dev/null
  520. }
  521. # Rebuild PostgreSQL database
  522. rebuild_pgsql_database() {
  523. host_str=$(grep "HOST='$HOST'" $VESTA/conf/pgsql.conf)
  524. eval $host_str
  525. export PGPASSWORD="$PASSWORD"
  526. if [ -z $HOST ] || [ -z $USER ] || [ -z $PASSWORD ] || [ -z $TPL ]; then
  527. echo "Error: postgresql config parsing failed"
  528. log_event "$E_PARSING" "$EVENT"
  529. exit $E_PARSING
  530. fi
  531. query='SELECT VERSION()'
  532. psql -h $HOST -U $USER -p $PORT -c "$query" &> /dev/null
  533. if [ '0' -ne "$?" ]; then
  534. echo "Error: Connection failed"
  535. log_event "$E_DB" "$EVENT"
  536. exit $E_DB
  537. fi
  538. query="CREATE ROLE $DBUSER"
  539. psql -h $HOST -U $USER -p $PORT -c "$query" &> /dev/null
  540. query="UPDATE pg_authid SET rolpassword='$MD5' WHERE rolname='$DBUSER'"
  541. psql -h $HOST -U $USER -p $PORT -c "$query" &> /dev/null
  542. query="CREATE DATABASE $database OWNER $DBUSER"
  543. if [ "$TPL" = 'template0' ]; then
  544. query="$query ENCODING '$CHARSET' TEMPLATE $TPL"
  545. else
  546. query="$query TEMPLATE $TPL"
  547. fi
  548. psql -h $HOST -U $USER -p $PORT -c "$query" &> /dev/null
  549. query="GRANT ALL PRIVILEGES ON DATABASE $database TO $DBUSER"
  550. psql -h $HOST -U $USER -p $PORT -c "$query" &> /dev/null
  551. query="GRANT CONNECT ON DATABASE template1 to $dbuser"
  552. psql -h $HOST -U $USER -p $PORT -c "$query" &> /dev/null
  553. }