db.sh 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619
  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'@'%' IDENTIFIED BY '$dbpass'"
  96. mysql -h $HOST -u $USER -p$PASSWORD -P $PORT -e "$query" &> /dev/null
  97. query="GRANT ALL ON $database.* TO '$dbuser'@'localhost'
  98. IDENTIFIED BY '$dbpass'"
  99. mysql -h $HOST -u $USER -p$PASSWORD -P $PORT -e "$query" &> /dev/null
  100. query="SHOW GRANTS FOR '$dbuser'"
  101. md5=$(mysql -h $HOST -u $USER -p$PASSWORD -P $PORT -e "$query")
  102. md5=$(echo "$md5" |grep 'PASSWORD' |tr ' ' '\n' |tail -n1 |cut -f 2 -d \')
  103. }
  104. # Create PostgreSQL database
  105. add_pgsql_database() {
  106. host_str=$(grep "HOST='$host'" $VESTA/conf/pgsql.conf)
  107. eval $host_str
  108. export PGPASSWORD="$PASSWORD"
  109. if [ -z $HOST ] || [ -z $USER ] || [ -z $PASSWORD ] || [ -z $TPL ]; then
  110. echo "Error: postgresql config parsing failed"
  111. log_event "$E_PARSING" "$EVENT"
  112. exit $E_PARSING
  113. fi
  114. query='SELECT VERSION()'
  115. psql -h $HOST -U $USER -p $PORT -c "$query" &> /dev/null
  116. if [ '0' -ne "$?" ]; then
  117. echo "Error: Connection failed"
  118. log_event "$E_DB" "$EVENT"
  119. exit $E_DB
  120. fi
  121. query="CREATE ROLE $dbuser WITH LOGIN PASSWORD '$dbpass'"
  122. psql -h $HOST -U $USER -p $PORT -c "$query" &> /dev/null
  123. query="CREATE DATABASE $database OWNER $dbuser"
  124. if [ "$TPL" = 'template0' ]; then
  125. query="$query ENCODING '$charset' TEMPLATE $TPL"
  126. else
  127. query="$query TEMPLATE $TPL"
  128. fi
  129. psql -h $HOST -U $USER -p $PORT -c "$query" &> /dev/null
  130. query="GRANT ALL PRIVILEGES ON DATABASE $database TO $dbuser"
  131. psql -h $HOST -U $USER -p $PORT -c "$query" &> /dev/null
  132. query="GRANT CONNECT ON DATABASE template1 to $dbuser"
  133. psql -h $HOST -U $USER -p $PORT -c "$query" &> /dev/null
  134. query="SELECT rolpassword FROM pg_authid WHERE rolname='$dbuser';"
  135. md5=$(psql -h $HOST -U $USER -p $PORT -c "$query"|grep md5|cut -f 2 -d \ )
  136. }
  137. # Check if database host do not exist in config
  138. is_dbhost_new() {
  139. if [ -e "$VESTA/conf/$type.conf" ]; then
  140. check_host=$(grep "HOST='$host'" $VESTA/conf/$type.conf)
  141. if [ ! -z "$check_host" ]; then
  142. echo "Error: db host exist"
  143. log_event "$E_EXISTS" "$EVENT"
  144. exit $E_EXISTS
  145. fi
  146. fi
  147. }
  148. # Check MySQL database host
  149. is_mysql_host_alive() {
  150. query='SELECT VERSION()'
  151. mysql -h $host -u $dbuser -p$dbpass -P $port -e "$query" &> /dev/null
  152. if [ '0' -ne "$?" ]; then
  153. echo "Error: Connection to $host failed"
  154. log_event "$E_DB" "$EVENT"
  155. exit $E_DB
  156. fi
  157. }
  158. # Check PostgreSQL database host
  159. is_pgsql_host_alive() {
  160. export PGPASSWORD="$dbpass"
  161. psql -h $host -U $dbuser -p $port -c "SELECT VERSION()" &> /dev/null
  162. if [ '0' -ne "$?" ]; then
  163. echo "Error: Connection to $host failed"
  164. log_event "$E_DB" "$EVENT"
  165. exit $E_DB
  166. fi
  167. }
  168. # Get database values
  169. get_database_values() {
  170. db_str=$(grep "DB='$database'" $USER_DATA/db.conf)
  171. eval $db_str
  172. }
  173. # Change MySQL database password
  174. change_mysql_password() {
  175. host_str=$(grep "HOST='$HOST'" $VESTA/conf/mysql.conf)
  176. eval $host_str
  177. if [ -z $HOST ] || [ -z $USER ] || [ -z $PASSWORD ] || [ -z $PORT ]; then
  178. echo "Error: mysql config parsing failed"
  179. log_event "$E_PARSING" "$EVENT"
  180. exit $E_PARSING
  181. fi
  182. query='SELECT VERSION()'
  183. mysql -h $HOST -u $USER -p$PASSWORD -P $PORT -e "$query" &> /dev/null
  184. if [ '0' -ne "$?" ]; then
  185. echo "Error: Connection failed"
  186. log_event "$E_DB $EVENT"
  187. exit $E_DB
  188. fi
  189. query="GRANT ALL ON $database.* TO '$DBUSER'@'%' IDENTIFIED BY '$dbpass'"
  190. mysql -h $HOST -u $USER -p$PASSWORD -P $PORT -e "$query" &> /dev/null
  191. query="GRANT ALL ON $database.* TO '$DBUSER'@'localhost'
  192. IDENTIFIED BY '$dbpass'"
  193. mysql -h $HOST -u $USER -p$PASSWORD -P $PORT -e "$query" &> /dev/null
  194. query="SHOW GRANTS FOR '$DBUSER'"
  195. md5=$(mysql -h $HOST -u $USER -p$PASSWORD -P $PORT -e "$query")
  196. md5=$(echo "$md5" |grep 'PASSWORD' |tr ' ' '\n' |tail -n1 |cut -f 2 -d \')
  197. }
  198. # Change PostgreSQL database password
  199. change_pgsql_password() {
  200. host_str=$(grep "HOST='$HOST'" $VESTA/conf/pgsql.conf)
  201. eval $host_str
  202. export PGPASSWORD="$PASSWORD"
  203. if [ -z $HOST ] || [ -z $USER ] || [ -z $PASSWORD ] || [ -z $TPL ]; then
  204. echo "Error: postgresql config parsing failed"
  205. log_event "$E_PARSING" "$EVENT"
  206. exit $E_PARSING
  207. fi
  208. query='SELECT VERSION()'
  209. psql -h $HOST -U $USER -p $PORT -c "$query" &> /dev/null
  210. if [ '0' -ne "$?" ]; then
  211. echo "Error: Connection failed"
  212. log_event "$E_DB" "$EVENT"
  213. exit $E_DB
  214. fi
  215. query="ALTER ROLE $DBUSER WITH LOGIN PASSWORD '$dbpass'"
  216. psql -h $HOST -U $USER -p $PORT -c "$query" &> /dev/null
  217. query="SELECT rolpassword FROM pg_authid WHERE rolname='$DBUSER';"
  218. md5=$(psql -h $HOST -U $USER -p $PORT -c "$query"|grep md5|cut -f 2 -d \ )
  219. }
  220. # Delete MySQL database
  221. delete_mysql_database() {
  222. host_str=$(grep "HOST='$HOST'" $VESTA/conf/mysql.conf)
  223. eval $host_str
  224. if [ -z $HOST ] || [ -z $USER ] || [ -z $PASSWORD ] || [ -z $PORT ]; then
  225. echo "Error: mysql config parsing failed"
  226. log_event "$E_PARSING" "$EVENT"
  227. exit $E_PARSING
  228. fi
  229. query='SELECT VERSION()'
  230. mysql -h $HOST -u $USER -p$PASSWORD -P $PORT -e "$query" &> /dev/null
  231. if [ '0' -ne "$?" ]; then
  232. echo "Error: Connection failed"
  233. log_event "$E_DB $EVENT"
  234. exit $E_DB
  235. fi
  236. query="DROP DATABASE $database"
  237. mysql -h $HOST -u $USER -p$PASSWORD -P $PORT -e "$query" &> /dev/null
  238. query="REVOKE ALL ON $database.* FROM '$DBUSER'@'%'"
  239. mysql -h $HOST -u $USER -p$PASSWORD -P $PORT -e "$query" &> /dev/null
  240. query="REVOKE ALL ON $database.* FROM '$DBUSER'@'localhost'"
  241. mysql -h $HOST -u $USER -p$PASSWORD -P $PORT -e "$query" &> /dev/null
  242. if [ "$(grep "DBUSER='$DBUSER'" $USER_DATA/db.conf |wc -l)" -lt 2 ]; then
  243. query="DROP USER '$DBUSER'@'%'"
  244. mysql -h $HOST -u $USER -p$PASSWORD -P $PORT -e "$query" &> /dev/null
  245. query="DROP USER '$DBUSER'@'localhost'"
  246. mysql -h $HOST -u $USER -p$PASSWORD -P $PORT -e "$query" &> /dev/null
  247. fi
  248. }
  249. # Delete PostgreSQL database
  250. delete_pgsql_database() {
  251. host_str=$(grep "HOST='$HOST'" $VESTA/conf/pgsql.conf)
  252. eval $host_str
  253. export PGPASSWORD="$PASSWORD"
  254. if [ -z $HOST ] || [ -z $USER ] || [ -z $PASSWORD ] || [ -z $TPL ]; then
  255. echo "Error: postgresql config parsing failed"
  256. log_event "$E_PARSING" "$EVENT"
  257. exit $E_PARSING
  258. fi
  259. query='SELECT VERSION()'
  260. psql -h $HOST -U $USER -p $PORT -c "$query" &> /dev/null
  261. if [ '0' -ne "$?" ]; then
  262. echo "Error: Connection failed"
  263. log_event "$E_DB" "$EVENT"
  264. exit $E_DB
  265. fi
  266. query="REVOKE ALL PRIVILEGES ON DATABASE $database FROM $DBUSER"
  267. psql -h $HOST -U $USER -p $PORT -c "$query" &> /dev/null
  268. query="DROP DATABASE $database"
  269. psql -h $HOST -U $USER -p $PORT -c "$query" &> /dev/null
  270. if [ "$(grep "DBUSER='$DBUSER'" $USER_DATA/db.conf |wc -l)" -lt 2 ]; then
  271. query="REVOKE CONNECT ON DATABASE template1 FROM $db_user"
  272. psql -h $HOST -U $USER -p $PORT -c "$query" &> /dev/null
  273. query="DROP ROLE $db_user"
  274. psql -h $HOST -U $USER -p $PORT -c "$query" &> /dev/null
  275. fi
  276. }
  277. # Dump MySQL database
  278. dump_mysql_database() {
  279. host_str=$(grep "HOST='$HOST'" $VESTA/conf/mysql.conf)
  280. eval $host_str
  281. if [ -z $HOST ] || [ -z $USER ] || [ -z $PASSWORD ] || [ -z $PORT ]; then
  282. echo "Error: mysql config parsing failed"
  283. log_event "$E_PARSING" "$EVENT"
  284. exit $E_PARSING
  285. fi
  286. query='SELECT VERSION()'
  287. mysql -h $HOST -u $USER -p$PASSWORD -P $PORT -e "$query" &> /dev/null
  288. if [ '0' -ne "$?" ]; then
  289. echo "Error: Connection failed"
  290. log_event "$E_DB $EVENT"
  291. exit $E_DB
  292. fi
  293. mysqldump -h $HOST -u $USER -p$PASSWORD -P$PORT -r $dump $database
  294. query="SHOW GRANTS FOR '$DBUSER'@'localhost'"
  295. mysql -h $HOST -u $USER -p$PASSWORD -P $PORT -e "$query" |\
  296. grep -v "Grants for" > $grants
  297. query="SHOW GRANTS FOR '$DBUSER'@'%'"
  298. mysql -h $HOST -u $USER -p$PASSWORD -P $PORT -e "$query" |\
  299. grep -v "Grants for" > $grants
  300. }
  301. # Dump PostgreSQL database
  302. dump_pgsql_database() {
  303. host_str=$(grep "HOST='$HOST'" $VESTA/conf/pgsql.conf)
  304. eval $host_str
  305. export PGPASSWORD="$PASSWORD"
  306. if [ -z $HOST ] || [ -z $USER ] || [ -z $PASSWORD ] || [ -z $TPL ]; then
  307. echo "Error: postgresql config parsing failed"
  308. log_event "$E_PARSING" "$EVENT"
  309. exit $E_PARSING
  310. fi
  311. query='SELECT VERSION()'
  312. psql -h $HOST -U $USER -p $PORT -c "$query" &> /dev/null
  313. if [ '0' -ne "$?" ]; then
  314. echo "Error: Connection failed"
  315. log_event "$E_DB" "$EVENT"
  316. exit $E_DB
  317. fi
  318. pg_dump -h $HOST -U $USER -p $PORT -c -d -O -x -i -f $dump $database \
  319. 2> /dev/null
  320. query="SELECT rolpassword FROM pg_authid WHERE rolname='$DBUSER';"
  321. md5=$(psql -h $HOST -U $USER -p $PORT -c "$query"|head -n1|cut -f 2 -d \ )
  322. pw_str="UPDATE pg_authid SET rolpassword='$md5' WHERE rolname='$DBUSER';"
  323. gr_str="GRANT ALL PRIVILEGES ON DATABASE $database to '$DBUSER'"
  324. echo -e "$pw_str\n$gr_str" >> $grants
  325. }
  326. # Check if database server is in use
  327. is_dbhost_free() {
  328. host_str=$(grep "HOST='$host'" $VESTA/conf/$type.conf)
  329. eval $host_str
  330. if [ 0 -ne "$U_DB_BASES" ]; then
  331. echo "Error: host $HOST is used"
  332. log_event "$E_INUSE" "$EVENT"
  333. exit $E_INUSE
  334. fi
  335. }
  336. # Suspend MySQL database
  337. suspend_mysql_database() {
  338. host_str=$(grep "HOST='$HOST'" $VESTA/conf/mysql.conf)
  339. eval $host_str
  340. if [ -z $HOST ] || [ -z $USER ] || [ -z $PASSWORD ] || [ -z $PORT ]; then
  341. echo "Error: mysql config parsing failed"
  342. log_event "$E_PARSING" "$EVENT"
  343. exit $E_PARSING
  344. fi
  345. query='SELECT VERSION()'
  346. mysql -h $HOST -u $USER -p$PASSWORD -P $PORT -e "$query" &> /dev/null
  347. if [ '0' -ne "$?" ]; then
  348. echo "Error: Connection failed"
  349. log_event "$E_DB $EVENT"
  350. exit $E_DB
  351. fi
  352. query="REVOKE ALL ON $database.* FROM '$DBUSER'@'%'"
  353. mysql -h $HOST -u $USER -p$PASSWORD -P $PORT -e "$query" &> /dev/null
  354. query="REVOKE ALL ON $database.* FROM '$DBUSER'@'localhost'"
  355. mysql -h $HOST -u $USER -p$PASSWORD -P $PORT -e "$query" &> /dev/null
  356. }
  357. # Suspend PostgreSQL database
  358. suspend_pgsql_database() {
  359. host_str=$(grep "HOST='$HOST'" $VESTA/conf/pgsql.conf)
  360. eval $host_str
  361. export PGPASSWORD="$PASSWORD"
  362. if [ -z $HOST ] || [ -z $USER ] || [ -z $PASSWORD ] || [ -z $TPL ]; then
  363. echo "Error: postgresql config parsing failed"
  364. log_event "$E_PARSING" "$EVENT"
  365. exit $E_PARSING
  366. fi
  367. query='SELECT VERSION()'
  368. psql -h $HOST -U $USER -p $PORT -c "$query" &> /dev/null
  369. if [ '0' -ne "$?" ]; then
  370. echo "Error: Connection failed"
  371. log_event "$E_DB" "$EVENT"
  372. exit $E_DB
  373. fi
  374. query="REVOKE ALL PRIVILEGES ON $database FROM $DBUSER"
  375. psql -h $HOST -U $USER -p $PORT -c "$query" &> /dev/null
  376. }
  377. # Unsuspend MySQL database
  378. unsuspend_mysql_database() {
  379. host_str=$(grep "HOST='$HOST'" $VESTA/conf/mysql.conf)
  380. eval $host_str
  381. if [ -z $HOST ] || [ -z $USER ] || [ -z $PASSWORD ] || [ -z $PORT ]; then
  382. echo "Error: mysql config parsing failed"
  383. log_event "$E_PARSING" "$EVENT"
  384. exit $E_PARSING
  385. fi
  386. query='SELECT VERSION()'
  387. mysql -h $HOST -u $USER -p$PASSWORD -P $PORT -e "$query" &> /dev/null
  388. if [ '0' -ne "$?" ]; then
  389. echo "Error: Connection failed"
  390. log_event "$E_DB $EVENT"
  391. exit $E_DB
  392. fi
  393. query="GRANT ALL ON $database.* FROM '$DBUSER'@'%'"
  394. mysql -h $HOST -u $USER -p$PASSWORD -P $PORT -e "$query" &> /dev/null
  395. query="GRANT ALL ON $database.* FROM '$DBUSER'@'localhost'"
  396. mysql -h $HOST -u $USER -p$PASSWORD -P $PORT -e "$query" &> /dev/null
  397. }
  398. # Unsuspend PostgreSQL database
  399. unsuspend_pgsql_database() {
  400. host_str=$(grep "HOST='$HOST'" $VESTA/conf/pgsql.conf)
  401. eval $host_str
  402. export PGPASSWORD="$PASSWORD"
  403. if [ -z $HOST ] || [ -z $USER ] || [ -z $PASSWORD ] || [ -z $TPL ]; then
  404. echo "Error: postgresql config parsing failed"
  405. log_event "$E_PARSING" "$EVENT"
  406. exit $E_PARSING
  407. fi
  408. query='SELECT VERSION()'
  409. psql -h $HOST -U $USER -p $PORT -c "$query" &> /dev/null
  410. if [ '0' -ne "$?" ]; then
  411. echo "Error: Connection failed"
  412. log_event "$E_DB" "$EVENT"
  413. exit $E_DB
  414. fi
  415. query="GRANT ALL PRIVILEGES ON DATABASE $database TO $DBUSER"
  416. psql -h $HOST -U $USER -p $PORT -c "$query" &> /dev/null
  417. }
  418. # Get MySQL disk usage
  419. get_mysql_disk_usage() {
  420. host_str=$(grep "HOST='$HOST'" $VESTA/conf/mysql.conf)
  421. eval $host_str
  422. if [ -z $HOST ] || [ -z $USER ] || [ -z $PASSWORD ] || [ -z $PORT ]; then
  423. echo "Error: mysql config parsing failed"
  424. log_event "$E_PARSING" "$EVENT"
  425. exit $E_PARSING
  426. fi
  427. query='SELECT VERSION()'
  428. mysql -h $HOST -u $USER -p$PASSWORD -P $PORT -e "$query" &> /dev/null
  429. if [ '0' -ne "$?" ]; then
  430. echo "Error: Connection failed"
  431. log_event "$E_DB $EVENT"
  432. exit $E_DB
  433. fi
  434. query="SELECT SUM( data_length + index_length ) / 1024 / 1024 \"Size\"
  435. FROM information_schema.TABLES WHERE table_schema='$database'"
  436. usage=$(mysql -h $HOST -u $USER -p$PASSWORD -P $PORT -e "$query" |tail -n1)
  437. if [ "$usage" == 'NULL' ] || [ "${usage:0:1}" -eq '0' ]; then
  438. usage=1
  439. fi
  440. usage=$(printf "%0.f\n" $usage)
  441. }
  442. # Get PostgreSQL disk usage
  443. get_pgsql_disk_usage() {
  444. host_str=$(grep "HOST='$HOST'" $VESTA/conf/pgsql.conf)
  445. eval $host_str
  446. export PGPASSWORD="$PASSWORD"
  447. if [ -z $HOST ] || [ -z $USER ] || [ -z $PASSWORD ] || [ -z $TPL ]; then
  448. echo "Error: postgresql config parsing failed"
  449. log_event "$E_PARSING" "$EVENT"
  450. exit $E_PARSING
  451. fi
  452. query='SELECT VERSION()'
  453. psql -h $HOST -U $USER -p $PORT -c "$query" &> /dev/null
  454. if [ '0' -ne "$?" ]; then
  455. echo "Error: Connection failed"
  456. log_event "$E_DB" "$EVENT"
  457. exit $E_DB
  458. fi
  459. query="SELECT pg_database_size('$database');"
  460. usage=$(psql -h $HOST -U $USER -p $PORT -c "$query")
  461. usage=$(echo "$usage" | grep -v "-" | grep -v 'row' | sed -e "/^$/d")
  462. usage=$(echo "$usage" | grep -v "pg_database_size" | awk '{print $1}')
  463. if [ -z "$usage" ]; then
  464. usage=0
  465. fi
  466. usage=$(($usage / 1048576))
  467. if [ "$usage" -eq '0' ]; then
  468. usage=1
  469. fi
  470. }
  471. # Rebuild MySQL database
  472. rebuild_mysql_database() {
  473. host_str=$(grep "HOST='$HOST'" $VESTA/conf/mysql.conf)
  474. eval $host_str
  475. if [ -z $HOST ] || [ -z $USER ] || [ -z $PASSWORD ] || [ -z $PORT ]; then
  476. echo "Error: mysql config parsing failed"
  477. log_event "$E_PARSING" "$EVENT"
  478. exit $E_PARSING
  479. fi
  480. query='SELECT VERSION()'
  481. mysql -h $HOST -u $USER -p$PASSWORD -P $PORT -e "$query" &> /dev/null
  482. if [ '0' -ne "$?" ]; then
  483. echo "Error: Connection failed"
  484. log_event "$E_DB $EVENT"
  485. exit $E_DB
  486. fi
  487. query="CREATE DATABASE $database CHARACTER SET $CHARSET"
  488. mysql -h $HOST -u $USER -p$PASSWORD -P $PORT -e "$query" &> /dev/null
  489. query="GRANT ALL ON $database.* TO '$DBUSER'@'%'"
  490. mysql -h $HOST -u $USER -p$PASSWORD -P $PORT -e "$query" &> /dev/null
  491. query="GRANT ALL ON $database.* TO '$DBUSER'@'localhost'"
  492. mysql -h $HOST -u $USER -p$PASSWORD -P $PORT -e "$query" &> /dev/null
  493. query="UPDATE mysql.user SET Password='$MD5' WHERE User='$DBUSER';"
  494. mysql -h $HOST -u $USER -p$PASSWORD -P $PORT -e "$query" &> /dev/null
  495. }
  496. # Rebuild PostgreSQL database
  497. rebuild_pgsql_database() {
  498. host_str=$(grep "HOST='$HOST'" $VESTA/conf/pgsql.conf)
  499. eval $host_str
  500. export PGPASSWORD="$PASSWORD"
  501. if [ -z $HOST ] || [ -z $USER ] || [ -z $PASSWORD ] || [ -z $TPL ]; then
  502. echo "Error: postgresql config parsing failed"
  503. log_event "$E_PARSING" "$EVENT"
  504. exit $E_PARSING
  505. fi
  506. query='SELECT VERSION()'
  507. psql -h $HOST -U $USER -p $PORT -c "$query" &> /dev/null
  508. if [ '0' -ne "$?" ]; then
  509. echo "Error: Connection failed"
  510. log_event "$E_DB" "$EVENT"
  511. exit $E_DB
  512. fi
  513. query="CREATE ROLE $DBUSER"
  514. psql -h $HOST -U $USER -p $PORT -c "$query" &> /dev/null
  515. query="UPDATE pg_authid SET rolpassword='$MD5' WHERE rolname='$DBUSER'"
  516. psql -h $HOST -U $USER -p $PORT -c "$query" &> /dev/null
  517. query="CREATE DATABASE $database OWNER $DBUSER"
  518. if [ "$TPL" = 'template0' ]; then
  519. query="$query ENCODING '$CHARSET' TEMPLATE $TPL"
  520. else
  521. query="$query TEMPLATE $TPL"
  522. fi
  523. psql -h $HOST -U $USER -p $PORT -c "$query" &> /dev/null
  524. query="GRANT ALL PRIVILEGES ON DATABASE $database TO $DBUSER"
  525. psql -h $HOST -U $USER -p $PORT -c "$query" &> /dev/null
  526. query="GRANT CONNECT ON DATABASE template1 to $dbuser"
  527. psql -h $HOST -U $USER -p $PORT -c "$query" &> /dev/null
  528. }