|
| 1 | +#!/bin/bash |
| 2 | + |
| 3 | +THIS_DIR=$(dirname ${BASH_SOURCE[0]}) |
| 4 | +MYSQLD_BIN=/usr/libexec/mysqld |
| 5 | +OUTPUT_DIR=${THIS_DIR}/data |
| 6 | +PID_FILE=/tmp/mysql.pid |
| 7 | +SOCKET_FILE=/tmp/mysql.sock |
| 8 | +LOG_FILE=/tmp/mysql.log |
| 9 | +DUMP_FILE=mysqlsampledatabase.sql |
| 10 | + |
| 11 | +action=${1} |
| 12 | + |
| 13 | +set -e |
| 14 | + |
| 15 | +rm -f ${LOG_FILE} |
| 16 | +touch ${LOG_FILE} |
| 17 | + |
| 18 | +usage() { |
| 19 | + echo "Tool for generating and checking of MySQL/MariaDB data dir" |
| 20 | + echo |
| 21 | + echo "Usage: `basename $0` <action>" |
| 22 | + echo |
| 23 | + echo "Available actions:" |
| 24 | + echo " generate Download and generate data, store them to ./data directory" |
| 25 | + echo " check Check data in ./data directory with mysqlcheck" |
| 26 | + exit 1 |
| 27 | +} |
| 28 | + |
| 29 | +wait_for_mysql() { |
| 30 | + while true; do |
| 31 | + echo "Waiting for MySQL server to accept connections ..." |
| 32 | + mysqladmin --socket=${SOCKET_FILE} ping &>/dev/null && echo "MySQL server is ready" && return 0 |
| 33 | + sleep 1 |
| 34 | + done |
| 35 | +} |
| 36 | + |
| 37 | +download_dump() { |
| 38 | + echo "Downloading and unpacking data ..." |
| 39 | + wget -O mysqldata.zip http://www.mysqltutorial.org/download/2 |
| 40 | + rm -rf ${PID_FILE} ${SOCKET_FILE} ${OUTPUT_DIR} ${DUMP_FILE} |
| 41 | + unzip mysqldata.zip |
| 42 | +} |
| 43 | + |
| 44 | +init_data() { |
| 45 | + echo "Initializing data ..." |
| 46 | + /usr/bin/mysql_install_db --rpm --datadir=${OUTPUT_DIR} &>>${LOG_FILE} |
| 47 | +} |
| 48 | + |
| 49 | +start_local_server() { |
| 50 | + echo "Running the server ..." |
| 51 | + /usr/libexec/mysqld --datadir=${OUTPUT_DIR} --skip-networking --socket=${SOCKET_FILE} --pid-file=${PID_FILE} &>>${LOG_FILE} & |
| 52 | + wait_for_mysql |
| 53 | +} |
| 54 | + |
| 55 | +load_data() { |
| 56 | + echo "Creating data ..." |
| 57 | + mysql --user root --socket=${SOCKET_FILE} <${DUMP_FILE} |
| 58 | +} |
| 59 | + |
| 60 | +check_data() { |
| 61 | + echo "Checking data ..." |
| 62 | + mysqlcheck --user root --socket=${SOCKET_FILE} --all-databases |
| 63 | +} |
| 64 | + |
| 65 | +stop_server() { |
| 66 | + echo "Killing the server ..." |
| 67 | + kill $(cat ${PID_FILE}) |
| 68 | +} |
| 69 | + |
| 70 | +action_generate() { |
| 71 | + download_dump |
| 72 | + init_data |
| 73 | + start_local_server |
| 74 | + load_data |
| 75 | + check_data |
| 76 | + stop_server |
| 77 | +} |
| 78 | + |
| 79 | +action_check() { |
| 80 | + start_local_server |
| 81 | + check_data |
| 82 | + stop_server |
| 83 | +} |
| 84 | + |
| 85 | +case ${action} in |
| 86 | + generate) action_generate ;; |
| 87 | + check) action_check ;; |
| 88 | + *) usage ;; |
| 89 | +esac |
| 90 | + |
0 commit comments