diff options
Diffstat (limited to 'Services/mariadb')
-rw-r--r-- | Services/mariadb/Dockerfile | 22 | ||||
-rw-r--r-- | Services/mariadb/README.md | 7 | ||||
-rw-r--r-- | Services/mariadb/mariadb_run.sh | 56 | ||||
-rw-r--r-- | Services/mariadb/sx/mariadb.sh | 174 | ||||
-rw-r--r-- | Services/mariadb/sx/mariadb_run.sh | 22 |
5 files changed, 216 insertions, 65 deletions
diff --git a/Services/mariadb/Dockerfile b/Services/mariadb/Dockerfile index 1bdf0ea..9140c96 100644 --- a/Services/mariadb/Dockerfile +++ b/Services/mariadb/Dockerfile @@ -1,22 +1,30 @@ FROM startx/fedora MAINTAINER Christophe LARUE <dev@startx.fr> -COPY mariadb_run.sh /bin/ +COPY sx/* /sx/ RUN yum -y install \ mariadb-libs \ mariadb-server \ mariadb \ + \ + psmisc \ + \ && yum clean all \ && mkdir -p /var/log/mysql \ + && mkdir -p /sx \ && touch /var/log/mysql/.keep /var/lib/mysql/.keep \ && chown -R mysql:mysql /var/log/mysql /var/lib/mysql \ - && chmod ug+rx /bin/mariadb_* + && chmod ug+rx /sx/mariadb* \ + && chown -R mysql:mysql /sx/mariadb* -VOLUME ["/var/lib/mysql", "/var/log/mysql"] USER mysql - EXPOSE 3306 +VOLUME ["/var/lib/mysql", "/var/log/mysql"] + +# if you wan't to set root password, otherwise auto-generated +# see docker logs <containerId> +ENV mysql_newadminpwd "newRootPassword" + -#CMD ["/usr/libexec/mysqld"] -CMD ["/bin/mariadb_run.sh"] -ONBUILD CMD ["/bin/mariadb_run.sh"]
\ No newline at end of file +#ENDPOINT ["/sx/mariadb_run.sh"] +CMD ["/sx/mariadb_run.sh"]
\ No newline at end of file diff --git a/Services/mariadb/README.md b/Services/mariadb/README.md index d9436cd..0d4dad8 100644 --- a/Services/mariadb/README.md +++ b/Services/mariadb/README.md @@ -4,8 +4,11 @@ This container run mariadb on fedora server. ## Running from docker registry docker run -d -p 3306:3306 --name="mariadb" startx/sv-mariadb - when linked to another container - docker run -d --name="mariadb" startx/sv-mariadb + # when used with a volume container + docker run -d -v /var/lib/mysql -v /var/log/mysql --name mariadb-data startx/sv-mariadb + docker run -d --volumes-from mariadb-data -p 3306:3306 --name="mariadb" startx/sv-mariadb + # when used in a linked container + docker run -d -p 3306:3306 --name="mariadb" startx/sv-mariadb docker run -d --name="php" --link mariadb:mariadb startx/sv-php ## Build and run from local Dockerfile diff --git a/Services/mariadb/mariadb_run.sh b/Services/mariadb/mariadb_run.sh deleted file mode 100644 index b5b1421..0000000 --- a/Services/mariadb/mariadb_run.sh +++ /dev/null @@ -1,56 +0,0 @@ -#!/bin/bash -ln -s /dev/stderr /var/log/mysql/mysqld.log -if [ ! -f /var/lib/mysql/.created ]; then - function wait_for_mysqld_start { - for i in {1..30}; do - if echo 'select 1' | mysql -u root > /dev/null 2>&1; then - return 0 - fi - sleep 1 - done - - echo "MariaDB did not start in time" - exit 1 - } - - - - password=${DB_PASSWORD:-password} - dbname=${DB_NAME:-master} - - /usr/bin/mysql_install_db -u mysql - - /usr/libexec/mysqld & - pid=$! - - wait_for_mysqld_start - - echo "Creating database $dbname ..." - - sql=$(cat <<SQL - drop database if exists test; - create database \`$dbname\` - DEFAULT CHARACTER SET utf8 DEFAULT - COLLATE utf8_general_ci; -SQL -) - echo $sql | mysql -u root - - #delete from user; - - sql=$(cat <<SQL - delete from user where user=''; - grant all on *.* to 'mysql'@'localhost' identified by '$password' with grant option; - grant all on *.* to 'mysql'@'%' identified by '$password' with grant option; - flush privileges; -SQL -) - echo $sql | mysql -u root mysql - - touch /var/lib/mysql/.created - kill -TERM $pid - - echo "Starting mysqld ..." -fi - -exec /usr/libexec/mysqld
\ No newline at end of file diff --git a/Services/mariadb/sx/mariadb.sh b/Services/mariadb/sx/mariadb.sh new file mode 100644 index 0000000..af6124b --- /dev/null +++ b/Services/mariadb/sx/mariadb.sh @@ -0,0 +1,174 @@ +#!/bin/bash + +export TERM=dumb +export logfile="/var/log/mysql/mysqld.log" + +# Begin configuration before starting daemonized process +# redirect mysql.log to /dev/stderr +function begin_config { + echo "=> Begin mariadb configuration for host $HOSTNAME" + ln -s /dev/stderr $logfile + if [ "$(ls -1 /var/lib/mysql | wc -l)" -le "3" ]; then + echo "=> directory /var/lib/mysql is empty, start mysql installation ..." + install_db + else + echo "=> data found in /var/lib/mysql, skip mysql installation ..." + fi; + if [ ! -f /var/lib/mysql/mysql.sock ]; then + echo "=> mysqld is not running, start server ..." + start_server + else + echo "=> mysqld is already running ..." + fi; + update_rootuser +} + +# End configuration process just before starting daemon +# stop output of mysql.log to /dev/stderr and create mysql.log file +function end_config { + stop_server + rm $logfile + touch $logfile + echo "=> End mariadb configuration ..." +} + +# Preform installation of database structure. Must be used when no +# database is already set +function install_db { + echo "===> Installing mariadb databases ..." + mysql_install_db -u mysql > /dev/null 2>&1 + chown -R mysql:mysql /var/lib/mysql +} + +# Start the mysqld server in background. Used to perform config +# against the database structure such as user creation +function start_server { + echo "===> Starting mariadb server ..." + /usr/bin/mysqld_safe > /dev/null 2>&1 & + sleep 8 +} + +# Stop the mysqld server running in background. +function stop_server { + echo "===> Stopping mariadb server ..." + killall mysqld mysqld_safe + sleep 8 +} + +# Start the mysqld server as a deamon and execute it inside +# the running shell +function start_daemon { + echo "=> Starting mariadb daemon ..." + exec /usr/libexec/mysqld +} + +# Set new root password and grant permissions to all databases +function update_rootuser { + if [ "$mysql_newadminpwd" = "" ]; then + export mysql_newadminpwd=$(pwgen 13 1); + fi + local n=$mysql_newadminpwd; + echo "===> Update root user password and permission" + mysqladmin -u root password $n + mysql -u root -p$n -e "GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '$n' WITH GRANT OPTION; FLUSH PRIVILEGES;" + unset mysql_newadminpwd; + export MARIADB_ROOTPWD=$n; + echo "========================================================================"; + echo "You can now connect to this MariaDB Server using the following credentials:"; + echo " "; + echo " user type : administrator"; + echo " username : root"; + echo " password : $n"; + echo " "; + echo " mysql -u root -p$n"; + echo "========================================================================"; + echo " "; + return 0 +} + +# Find all sqlfiles in /tmp/ and import then using admin user +function import_sqlfiles { + local filedir=$1; local p=$MARIADB_ROOTPWD; + if [ "$(ls -1 $filedir | wc -l)" -ge "1" ]; then + echo "=> Found SQL files to import ..." + for filename in "$filedir"; do + import_sqlfile $filename + done; + fi; + return 0 +} + +# Find all sqlfiles in /tmp/ and import then using admin user +function import_sqlfile { + local filename=$1; local p=$MARIADB_ROOTPWD; + if [ -f "$filename" ]; then + echo "===> Importing sql file : $filename" + mysql -u root -p$p < $filename + else + echo "====> Could not find sql file $filename. Skip import..." + fi; + return 0 +} + +# Set new root password and grant permissions to all databases +function create_userdb { + local userdb="$1"; local pass="$2"; local p=$MARIADB_ROOTPWD; + if [ "$pass" = "" ]; then + local pass=$(pwgen 13 1); + fi + echo "===> Create new user $userdb with database $userdb" + mysql -u root -p$p -e "CREATE USER '$userdb'@'%';SET PASSWORD FOR '$userdb'@'%' = PASSWORD('$pass');\ + CREATE USER '$userdb'@'localhost';SET PASSWORD FOR '$userdb'@'localhost' = PASSWORD('$pass');\ + DROP DATABASE IF EXISTS $userdb; \ + CREATE DATABASE $userdb DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci; \ + GRANT ALL PRIVILEGES ON $userdb.* TO '$userdb'@'%' IDENTIFIED BY '$pass'; \ + GRANT ALL PRIVILEGES ON $userdb.* TO '$userdb'@'localhost' IDENTIFIED BY '$pass'; \ + FLUSH PRIVILEGES;" + echo "========================================================================"; + echo "You can now connect to this MariaDB Server using the following credentials:"; + echo " "; + echo " user type : user "; + echo " username : $userdb "; + echo " password : $pass"; + echo " database : $userdb "; + echo " "; + echo " mysql -u $userdb -p$pass $userdb"; + echo "========================================================================"; + echo " "; + return 0 +} + +# Set new root password and grant permissions to all databases +function create_user { + local user="$1"; local pass="$2"; local p=$MARIADB_ROOTPWD; + if [ "$pass" = "" ]; then + local pass=$(pwgen 13 1); + fi + echo "===> Create new user $user" + mysql -u root -p$p -e "CREATE USER '$user'@'%';SET PASSWORD FOR '$user'@'%' = PASSWORD('$pass');\ + CREATE USER '$user'@'localhost';SET PASSWORD FOR '$user'@'localhost' = PASSWORD('$pass');" + echo "========================================================================"; + echo "You can now connect to this MariaDB Server using the following credentials:"; + echo " "; + echo " user type : user "; + echo " username : $user "; + echo " password : $pass "; + echo " "; + echo " mysql -u $user -p$pass"; + echo "========================================================================"; + echo " "; + return 0 +} + +# Create a new database +function create_db { + local db=$1; local p=$MARIADB_ROOTPWD; + echo "===> Create new database $db" + mysql -u root -p$p -e "CREATE DATABASE $db DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;"; + echo "===> New database $db CREATED" + return 0 +} + +if [[ "$0" == *"mariadb.sh" && ! $1 = "" ]];then + eval "$@"; +fi
\ No newline at end of file diff --git a/Services/mariadb/sx/mariadb_run.sh b/Services/mariadb/sx/mariadb_run.sh new file mode 100644 index 0000000..07a4c03 --- /dev/null +++ b/Services/mariadb/sx/mariadb_run.sh @@ -0,0 +1,22 @@ +#!/bin/bash +source /sx/mariadb.sh + +begin_config + +## if you wan't to add a new user with database +#create_userdb 'dbuser1' 'password' +## if you wan't to add a new user with database (generated password) +#create_userdb 'dbuser2' +## if you wan't to add a new user +#create_user 'username' 'password' +## if you wan't to add a new database +#create_db 'dbname' +## Execute an SQL request to get the user list +#mysql -u root -p$MARIADB_ROOTPWD -e 'select user, host FROM mysql.user;' +## Execute SQL scripts located into a directory +#import_sqlfiles /tmp/sql/*.sql +## Execute a single SQL script +#import_sqlfile /tmp/sql/example.sql + +end_config +start_daemon
\ No newline at end of file |