aboutsummaryrefslogtreecommitdiffstats
path: root/asdc-tests/src/test/resources/CI/tests/getResourceArtifactFileContentTest/scripts/start_mysql.sh
blob: 648bd4575699789c396193d115fe7ede6b79b02b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
#!/bin/bash

echo "------------------------ ENV ------------------------"
echo "ENV VAR USED VOLUME_HOME : $VOLUME_HOME"
echo "ENV VAR USED PORT        : $PORT"
echo "ENV VAR USED DB_NAME     : $DB_NAME"
echo "ENV VAR USED DB_USER     : $DB_USER"
echo "ENV VAR USED DB_PASSWORD : $DB_PASSWORD"
echo "---------------------------- ------------------------"

CURRENT_PATH=`dirname "$0"`

function StartMySQL {
  echo "Starting MYSQL..."
  sudo /etc/init.d/mysql stop
  sudo /usr/bin/mysqld_safe > /dev/null 2>&1 &
  RET=1
  while [[ RET -ne 0 ]]; do
    echo "=> Waiting for confirmation of MySQL service startup"
    sleep 5
    sudo mysql -uroot -e "status" > /dev/null 2>&1
    RET=$?
  done
}

function AllowFileSystemToMySQL {
  MYSQL_DATA_DIR=$VOLUME_HOME/data
  MYSQL_LOG=$VOLUME_HOME/logs

  echo "Setting data directory to $MYSQL_DATA_DIR an logs to $MYSQL_LOG ..."
  if sudo test ! -d $MYSQL_DATA_DIR; then
    echo "Creating DATA dir > $MYSQL_DATA_DIR ..."
    sudo mkdir -p $MYSQL_DATA_DIR
    # mysql as owner and group owner
    sudo chown -R mysql:mysql $MYSQL_DATA_DIR
  fi
  if sudo test ! -d $MYSQL_LOG; then
    echo "Creating LOG dir > $MYSQL_LOG ..."
    sudo mkdir -p $MYSQL_LOG
    # mysql as owner and group owner
    sudo chown -R mysql:mysql $MYSQL_LOG
  fi

  # edit app mysql permission in : /etc/apparmor.d/usr.sbin.mysqld
  COUNT_LINE=`sudo cat /etc/apparmor.d/usr.sbin.mysqld | wc -l`
  sudo sed -i "$(($COUNT_LINE)) i $MYSQL_DATA_DIR/ r," /etc/apparmor.d/usr.sbin.mysqld
  sudo sed -i "$(($COUNT_LINE)) i $MYSQL_DATA_DIR/** rwk," /etc/apparmor.d/usr.sbin.mysqld
  sudo sed -i "$(($COUNT_LINE)) i $MYSQL_LOG/ r," /etc/apparmor.d/usr.sbin.mysqld
  sudo sed -i "$(($COUNT_LINE)) i $MYSQL_LOG/** rwk," /etc/apparmor.d/usr.sbin.mysqld

  # reload app permission manager service
  sudo service apparmor reload
}

function UpdateMySQLConf {
  echo "Updating MySQL conf files [DATA, LOGS]..."
  sudo sed -i "s:/var/lib/mysql:$MYSQL_DATA_DIR:g" /etc/mysql/my.cnf
  sudo sed -i "s:/var/log/mysql/error.log:$MYSQL_LOG/error.log:g" /etc/mysql/my.cnf
  sudo sed -i "s:3306:$PORT:g" /etc/mysql/my.cnf

  if sudo test ! -f /usr/share/mysql/my-default.cnf; then
    sudo cp /etc/mysql/my.cnf /usr/share/mysql/my-default.cnf
  fi
  if sudo test ! -f /etc/mysql/conf.d/mysqld_charset.cnf; then
    sudo cp $configs/mysqld_charset.cnf /etc/mysql/conf.d/mysqld_charset.cnf
  fi

  if [ "$BIND_ADRESS" == "true" ]; then
    sudo sed -i "s/bind-address.*/bind-address = 0.0.0.0/" /etc/mysql/my.cnf
  fi
}

function InitMySQLDb {
  # create database DB_NAME
  if [ "$DB_NAME" ]; then
    echo "INIT DATABASE $DB_NAME"
    sudo mysql -u root -e "CREATE DATABASE $DB_NAME";
  fi

  # create user and give rights
  if [ "$DB_USER" ]; then
    echo "CREATE USER $DB_USER WITH PASSWORD $DB_PASSWORD AND GRAND RIGHTS ON $DB_NAME"
    sudo mysql -uroot -e "CREATE USER '${DB_USER}'@'%' IDENTIFIED BY '$DB_PASSWORD'"
    sudo mysql -uroot -e "GRANT ALL PRIVILEGES ON ${DB_NAME}.* TO '${DB_USER}'@'%' WITH GRANT OPTION"
    sudo mysql -uroot -e "FLUSH PRIVILEGES"
  fi
}

# Create a new database path to the attched volume
if sudo test ! -d $VOLUME_HOME/data; then
  echo "=> An empty or uninitialized MySQL volume is detected in $VOLUME_HOME/data"
  AllowFileSystemToMySQL
  UpdateMySQLConf
  echo "=> Init new database path to $MYSQL_DATA_DIR"
  sudo mysql_install_db --basedir=/usr --datadir=$MYSQL_DATA_DIR
  echo "=> MySQL database initialized !"
else
  echo "=> Using an existing volume of MySQL"
  AllowFileSystemToMySQL
  UpdateMySQLConf
fi

# Finally start MySQL with new configuration
StartMySQL
InitMySQLDb