diff --git a/docker/mariadb/Dockerfile b/docker/mariadb/Dockerfile index 0d29bae902..5b5e8a3ca4 100644 --- a/docker/mariadb/Dockerfile +++ b/docker/mariadb/Dockerfile @@ -1,21 +1,11 @@ FROM rhel7 -MAINTAINER Lon Hohberger -# Started with the one from: -# Clayton Coleman +MAINTAINER Lars Kellogg-Stedman -RUN yum install -y \ - mysql \ - mariadb-galera-server \ - && yum clean all +RUN yum -y install mariadb-galera-server +ADD /entrypoint.sh /entrypoint.sh -RUN mkdir -p /var/log/mysql && \ - touch /var/log/mysql/.keep /var/lib/mysql/.keep && \ - chown -R mysql:mysql /var/log/mysql /var/lib/mysql -VOLUME ["/var/lib/mysql", "/var/log/mysql"] -USER mysql +VOLUME /var/lib/mysql +VOLUME /var/log/mysql -ADD ./simple.cnf /etc/my.cnf.d/ -ADD ./start /usr/bin/run - -EXPOSE 3306 -ENTRYPOINT ["/usr/bin/run"] +ENTRYPOINT ["/entrypoint.sh"] +CMD ["mysqld_safe"] diff --git a/docker/mariadb/entrypoint.sh b/docker/mariadb/entrypoint.sh new file mode 100755 index 0000000000..898823352d --- /dev/null +++ b/docker/mariadb/entrypoint.sh @@ -0,0 +1,47 @@ +#!/bin/bash +set -e + +: ${MYSQL_ROOT_PASSWORD:=$DB_ROOT_PASSWORD} + +if [ -z "$(ls -A /var/lib/mysql)" -a "${1%_safe}" = 'mysqld' ]; then + PATH=/usr/libexec:$PATH + export PATH + + if [ -z "$MYSQL_ROOT_PASSWORD" ]; then + echo >&2 'error: database is uninitialized and MYSQL_ROOT_PASSWORD not set' + echo >&2 ' Did you forget to add -e MYSQL_ROOT_PASSWORD=... ?' + exit 1 + fi + + mysql_install_db --user=mysql --datadir=/var/lib/mysql + + # These statements _must_ be on individual lines, and _must_ end with + # semicolons (no line breaks or comments are permitted). + # TODO proper SQL escaping on ALL the things D: + TEMP_FILE='/tmp/mysql-first-time.sql' + cat > "$TEMP_FILE" <<-EOSQL + DELETE FROM mysql.user ; + CREATE USER 'root'@'%' IDENTIFIED BY '${MYSQL_ROOT_PASSWORD}' ; + GRANT ALL ON *.* TO 'root'@'%' WITH GRANT OPTION ; + DROP DATABASE IF EXISTS test ; + EOSQL + + if [ "$MYSQL_DATABASE" ]; then + echo "CREATE DATABASE IF NOT EXISTS $MYSQL_DATABASE ;" >> "$TEMP_FILE" + fi + + if [ "$MYSQL_USER" -a "$MYSQL_PASSWORD" ]; then + echo "CREATE USER '$MYSQL_USER'@'%' IDENTIFIED BY '$MYSQL_PASSWORD' ;" >> "$TEMP_FILE" + + if [ "$MYSQL_DATABASE" ]; then + echo "GRANT ALL ON $MYSQL_DATABASE.* TO '$MYSQL_USER'@'%' ;" >> "$TEMP_FILE" + fi + fi + + echo 'FLUSH PRIVILEGES ;' >> "$TEMP_FILE" + + set -- "$@" --init-file="$TEMP_FILE" +fi + +chown -R mysql:mysql /var/lib/mysql +exec "$@" diff --git a/docker/mariadb/simple.cnf b/docker/mariadb/simple.cnf deleted file mode 100644 index f323be9b6e..0000000000 --- a/docker/mariadb/simple.cnf +++ /dev/null @@ -1,152 +0,0 @@ -# Simple MariaDB database server configuration file. -# -# ================================================================= -# Base configuration courtesy of Open Query (http://openquery.com/) -# For production use, case-specific preparation is still required. -# 2009-10-07 -# -# This is *not* an optimised config, merely a more sane baseline: -# - binary and slow log enabled, with enhancements -# - InnoDB default (e.g., ACID out-of-the-box, same as on Windows) -# - strict mode (for proper input checks, same as on Windows) -# - various other useful settings -# - make use of MariaDB/Percona/OurDelta enhancements/extensions -# -# For tuning assistance, please see http://openquery.com/services -# ================================================================= - -[client] -default-character-set = utf8 - -# Here is entries for some specific programs -# The following values assume you have at least 32M ram - -# This was formally known as [safe_mysqld]. Both versions are currently parsed. -[mysqld_safe] -nice = 0 -log-error=/var/log/mysql/mysqld.log - -[server] -# -# * Basic Settings -# -user = mysql -tmpdir = /tmp -skip-external-locking - -# -# * Fine Tuning -# -max_connections = 32 -connect_timeout = 5 -wait_timeout = 600 -max_allowed_packet = 16M -thread_cache_size = 128 -sort_buffer_size = 4M -bulk_insert_buffer_size = 16M -tmp_table_size = 32M -max_heap_table_size = 32M -# -# * MyISAM -# -# This replaces the startup script and checks MyISAM tables if needed -# the first time they are touched. On error, make copy and try a repair. -myisam_recover = BACKUP -key_buffer_size = 128M -#open-files-limit = 2000 -table_cache = 400 -myisam_sort_buffer_size = 512M -concurrent_insert = 2 -read_buffer_size = 2M -read_rnd_buffer_size = 1M -# -# * Query Cache Configuration -# -# Cache only tiny result sets, so we can fit more in the query cache. -query_cache_limit = 128K -query_cache_size = 64M -# for more write intensive setups, set to DEMAND or OFF -#query_cache_type = DEMAND -# -# * Logging and Replication -# -# Both location gets rotated by the cronjob. -# Be aware that this log type is a performance killer. -# As of 5.1 you can enable the log at runtime! -#general_log_file = /var/log/mysql/mysql.log -#general_log = 1 -# -# Error logging goes to syslog due to /etc/mysql/conf.d/mysqld_safe_syslog.cnf. -# -# we do want to know about network errors and such -log_warnings = 2 -# -# Here you can see queries with especially long duration -slow_query_log -slow_query_log_file = /var/log/mysql/mariadb-slow.log -long_query_time = 10 -#log_slow_rate_limit = 1000 -log_slow_verbosity = query_plan - -#log-queries-not-using-indexes -log_slow_admin_statements -# -# The following can be used as easy to replay backup logs or for replication. -# note: if you are setting up a replication slave, see README.Debian about -# other settings you may need to change. -#server-id = 1 -#report_host = master1 -#auto_increment_increment = 2 -#auto_increment_offset = 1 -log_bin = /var/log/mysql/mariadb-bin -log_bin_index = /var/log/mysql/mariadb-bin.index -# not fab for performance, but safer -#sync_binlog = 1 -expire_logs_days = 10 -max_binlog_size = 100M -# slaves -#relay_log = /var/log/mysql/relay-bin -#relay_log_index = /var/log/mysql/relay-bin.index -#relay_log_info_file = /var/log/mysql/relay-bin.info -#log_slave_updates -#read_only -# -# -# * InnoDB -# -# InnoDB is enabled by default with a 10MB datafile in /var/lib/mysql/. -# Read the manual for more InnoDB related options. There are many! -default_storage_engine = InnoDB -sql_mode = NO_ENGINE_SUBSTITUTION,TRADITIONAL -# you can't just change log file size, requires special procedure -innodb_log_file_size = 16M -innodb_buffer_pool_size = 265M -innodb_log_buffer_size = 8M -innodb_file_per_table = 1 -innodb_open_files = 400 -innodb_io_capacity = 400 -innodb_flush_method = O_DIRECT -# -# * Security Features -# -# Read the manual, too, if you want chroot! -# chroot = /var/lib/mysql/ -# -# For generating SSL certificates I recommend the OpenSSL GUI "tinyca". -# -# ssl-ca=/etc/mysql/cacert.pem -# ssl-cert=/etc/mysql/server-cert.pem -# ssl-key=/etc/mysql/server-key.pem - - - -[mysqldump] -quick -quote-names -max_allowed_packet = 16M - -[mysql] -#no-auto-rehash # faster start of mysql but no tab completition - -[isamchk] -key_buffer = 16M diff --git a/docker/mariadb/start b/docker/mariadb/start deleted file mode 100755 index 29db0bf643..0000000000 --- a/docker/mariadb/start +++ /dev/null @@ -1,43 +0,0 @@ -#!/bin/bash -e - -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 - } - - host_ip=${HOST_IP:-127.0.0.1} - password=${DB_ROOT_PASSWORD:-redhat} - #keystone_pass=${KEYSTONE_PASSWORD:-redhat} - #cinder_pass=${CINDER_PASSWORD:-redhat} - #glance_pass=${KEYSTONE_PASSWORD:-redhat} - #nova_pass=${KEYSTONE_PASSWORD:-redhat} - #heat_pass=${KEYSTONE_PASSWORD:-redhat} - #keystone_pass=${KEYSTONE_PASSWORD:-redhat} - - /usr/bin/mysql_install_db -u mysql - - /usr/libexec/mysqld & - pid=$! - - wait_for_mysqld_start - - echo "Building OpenStack Database tables..." - - /usr/bin/mysqladmin -u root password $password - - touch /var/lib/mysql/.created - kill -TERM $pid - - echo "Starting mysqld ..." -fi - -exec /usr/libexec/mysqld