github.com/drud/ddev@v1.21.5-alpha1.0.20230226034409-94fcc4b94453/containers/ddev-dbserver/files/create_base_db.sh (about)

     1  #!/bin/bash
     2  
     3  set -eu
     4  set -o pipefail
     5  
     6  SOCKET=/var/tmp/mysql.sock
     7  OUTDIR=/mysqlbase
     8  
     9  mkdir -p ${OUTDIR}
    10  chown -R "$(id -u):$(id -g)" $OUTDIR
    11  
    12  chmod ugo+w /var/tmp
    13  mkdir -p /var/lib/mysql /mnt/ddev_config/mysql && rm -f /var/lib/mysql/* && chmod -R ugo+w /var/lib/mysql
    14  
    15  echo 'Initializing mysql'
    16  mysqld --version
    17  mysqld_version=$(mysqld --version | awk '{ print $3 }')
    18  mysqld_version=${mysqld_version%%-*}
    19  mysqld_version=${mysqld_version%.*}
    20  echo version=$mysqld_version
    21  # Oracle mysql 5.7+ deprecates mysql_install_db
    22  if [ "${mysqld_version}" = "5.7" ] || [  "${mysqld_version%%%.*}" = "8.0" ]; then
    23      mysqld --initialize-insecure --datadir=/var/lib/mysql --server-id=0
    24  else
    25      # mysql 5.5 requires running mysql_install_db in /usr/local/mysql
    26      if command -v mysqld | grep usr.local; then
    27          cd /usr/local/mysql
    28      fi
    29      mysql_install_db --force --datadir=/var/lib/mysql
    30  fi
    31  echo "Starting mysqld --skip-networking --socket=${SOCKET}"
    32  mysqld --user=root --socket=$SOCKET --innodb_log_file_size=48M --skip-networking --datadir=/var/lib/mysql --server-id=0 --skip-log-bin &
    33  pid="$!"
    34  
    35  # Wait for the server to respond to mysqladmin ping, or fail if it never does,
    36  # or if the process dies.
    37  for i in {90..0}; do
    38  	if mysqladmin ping -uroot --socket=$SOCKET 2>/dev/null; then
    39  		break
    40  	fi
    41  	# Test to make sure we got it started in the first place. kill -s 0 just tests to see if process exists.
    42  	if ! kill -s 0 $pid 2>/dev/null; then
    43  		echo "MariaDB initialization startup failed"
    44  		exit 3
    45  	fi
    46  	sleep 1
    47  done
    48  if [ "$i" -eq 0 ]; then
    49  	echo 'MariaDB initialization startup process timed out.'
    50  	exit 4
    51  fi
    52  
    53  
    54  mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -uroot  mysql
    55  
    56  mysql -uroot <<EOF
    57  	CREATE DATABASE IF NOT EXISTS $MYSQL_DATABASE;
    58  	CREATE USER '$MYSQL_USER'@'%' IDENTIFIED BY '$MYSQL_PASSWORD';
    59  	CREATE USER '$MYSQL_USER'@'localhost' IDENTIFIED BY '$MYSQL_PASSWORD';
    60  
    61  	GRANT ALL ON $MYSQL_DATABASE.* TO '$MYSQL_USER'@'%';
    62  	GRANT ALL ON $MYSQL_DATABASE.* TO '$MYSQL_USER'@'localhost';
    63  
    64  	CREATE USER 'root'@'%' IDENTIFIED BY '$MYSQL_ROOT_PASSWORD';
    65  	GRANT ALL ON *.* TO 'root'@'%' WITH GRANT OPTION;
    66  	FLUSH PRIVILEGES;
    67  	FLUSH TABLES;
    68  EOF
    69  
    70  mysqladmin -uroot password root
    71  
    72  if [  "${mysqld_version%%%.*}" = "8.0" ]; then
    73      mysql -uroot -proot <<EOF
    74          ALTER USER 'db'@'%' IDENTIFIED WITH mysql_native_password BY '$MYSQL_PASSWORD';
    75          ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '$MYSQL_ROOT_PASSWORD';
    76          ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '$MYSQL_ROOT_PASSWORD';
    77  EOF
    78  fi
    79  
    80  
    81  rm -rf ${OUTDIR}/*
    82  
    83  backuptool=mariabackup
    84  streamtool=xbstream
    85  if command -v xtrabackup; then
    86    backuptool="xtrabackup --datadir=/var/lib/mysql";
    87    streamtool=xbstream
    88  fi
    89  
    90  # Initialize with current mariadb_version
    91  PATH=$PATH:/usr/sbin:/usr/local/bin:/usr/local/mysql/bin mysqld -V 2>/dev/null  | awk '{print $3}' > /tmp/raw_mysql_version.txt
    92  # mysqld -V gives us the version in the form of 5.7.28-log for mysql or
    93  # 5.5.64-MariaDB-1~trusty for MariaDB. Detect database type and version and output
    94  # mysql-8.0 or mariadb-10.5.
    95  server_db_version=$(awk -F- '{ sub( /\.[0-9]+(-.*)?$/, "", $1); server_type="mysql"; if ($2 ~ /^MariaDB/) { server_type="mariadb" }; print server_type "_" $1 }' /tmp/raw_mysql_version.txt)
    96  echo ${server_db_version} >/var/lib/mysql/db_mariadb_version.txt
    97  ${backuptool} --backup --stream=${streamtool} --user=root --password=root --socket=$SOCKET  | gzip >${OUTDIR}/base_db.gz
    98  rm -f /tmp/raw_mysql_version.txt
    99  
   100  if ! kill -s TERM "$pid" || ! wait "$pid"; then
   101  	echo >&2 'Database initialization process failed.'
   102  	exit 5
   103  fi
   104  
   105  echo "The startup database files (in mariabackup/xtradb format) are now in $OUTDIR"