xref: /OK3568_Linux_fs/yocto/meta-openembedded/meta-oe/recipes-dbs/mysql/mariadb/mysql-systemd-start (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun#! /bin/sh
2*4882a593Smuzhiyun#
3*4882a593Smuzhiyun# Needed argument: pre | post
4*4882a593Smuzhiyun#
5*4882a593Smuzhiyun# pre mode  :  try to run mysql_install_db and fix perms and SELinux contexts
6*4882a593Smuzhiyun# post mode :  ping server until answer is received
7*4882a593Smuzhiyun#
8*4882a593Smuzhiyun
9*4882a593Smuzhiyunget_option () {
10*4882a593Smuzhiyun    local section=$1
11*4882a593Smuzhiyun    local option=$2
12*4882a593Smuzhiyun    local default=$3
13*4882a593Smuzhiyun    ret=$(/usr/bin/my_print_defaults $section | grep '^--'${option}'=' | cut -d= -f2-)
14*4882a593Smuzhiyun    [ -z $ret ] && ret=$default
15*4882a593Smuzhiyun    echo $ret
16*4882a593Smuzhiyun}
17*4882a593Smuzhiyun
18*4882a593Smuzhiyuninstall_db () {
19*4882a593Smuzhiyun    # Note: something different than datadir=/var/lib/mysql requires SELinux policy changes (in enforcing mode)
20*4882a593Smuzhiyun    datadir=$(get_option mysqld datadir "/var/lib/mysql")
21*4882a593Smuzhiyun
22*4882a593Smuzhiyun    # Restore log, dir, perms and SELinux contexts
23*4882a593Smuzhiyun    [ -d "$datadir" ] || install -d -m 0755 -omysql -gmysql "$datadir" || exit 1
24*4882a593Smuzhiyun    log=/var/log/mysqld.log
25*4882a593Smuzhiyun    [ -e $log ] || touch $log
26*4882a593Smuzhiyun    chmod 0640 $log
27*4882a593Smuzhiyun    chown mysql:mysql $log || exit 1
28*4882a593Smuzhiyun    if [ -x /usr/sbin/restorecon ]; then
29*4882a593Smuzhiyun        /usr/sbin/restorecon "$datadir"
30*4882a593Smuzhiyun        /usr/sbin/restorecon $log
31*4882a593Smuzhiyun    fi
32*4882a593Smuzhiyun
33*4882a593Smuzhiyun    # If special mysql dir is in place, skip db install
34*4882a593Smuzhiyun    [ -d "$datadir/mysql" ] && exit 0
35*4882a593Smuzhiyun
36*4882a593Smuzhiyun    # Create initial db
37*4882a593Smuzhiyun    /usr/bin/mysql_install_db --rpm --datadir="$datadir" --user=mysql
38*4882a593Smuzhiyun    exit 0
39*4882a593Smuzhiyun}
40*4882a593Smuzhiyun
41*4882a593Smuzhiyunpinger () {
42*4882a593Smuzhiyun    # Wait for ping to answer to signal startup completed,
43*4882a593Smuzhiyun    # might take a while in case of e.g. crash recovery
44*4882a593Smuzhiyun    # MySQL systemd service will timeout script if no answer
45*4882a593Smuzhiyun    datadir=$(get_option mysqld datadir "/var/lib/mysql")
46*4882a593Smuzhiyun    socket=$(get_option  mysqld socket "$datadir/mysql.sock")
47*4882a593Smuzhiyun    case $socket in
48*4882a593Smuzhiyun        /*) adminsocket="$socket" ;;
49*4882a593Smuzhiyun        *) adminsocket="$datadir/$socket" ;;
50*4882a593Smuzhiyun    esac
51*4882a593Smuzhiyun
52*4882a593Smuzhiyun    while /bin/true ; do
53*4882a593Smuzhiyun        sleep 1
54*4882a593Smuzhiyun        mysqladmin --no-defaults --socket="$adminsocket" --user=UNKNOWN_MYSQL_USER ping >/dev/null 2>&1 && break
55*4882a593Smuzhiyun    done
56*4882a593Smuzhiyun    exit 0
57*4882a593Smuzhiyun}
58*4882a593Smuzhiyun
59*4882a593Smuzhiyun# main
60*4882a593Smuzhiyuncase $1 in
61*4882a593Smuzhiyun    "pre") install_db ;;
62*4882a593Smuzhiyun    "post") pinger ;;
63*4882a593Smuzhiyunesac
64*4882a593Smuzhiyun
65*4882a593Smuzhiyunexit 0
66*4882a593Smuzhiyun
67