This repository was archived by the owner on Nov 29, 2020. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 249
Added MySQL 5.7.8-rc-1 and tuned test.sh #83
Open
libcrack
wants to merge
8
commits into
docker-archive:master
Choose a base branch
from
libcrack:5.7
base: master
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Changes from 2 commits
Commits
Show all changes
8 commits
Select commit
Hold shift + click to select a range
8222110
New: Added custom testing function "mysql_docker_test_release" to tes…
bfc17c6
New: Added MySQL 5.7 from MySQL repos
2d6e709
Fix: Incorrect "minor" variable assigment from function arguments
e0bc9f2
Mod: Minor code style improvements (store user & passwd in variables,…
f9edd6a
Fix: Fixed function arguments (major,minor) assigment in test.sh
40240ae
Mod: Added logging type detection (json/syslog) to test.sh when testi…
849be28
Mod: Added params "--initialize-insecure=on" "--user=mysql" and "--da…
a316d4b
Mod: Added detection of docker logging method (json/syslog) after cre…
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,41 @@ | ||
FROM ubuntu:trusty | ||
MAINTAINER Borja <[email protected]> | ||
|
||
ENV DEBIAN_FRONTEND=noninteractive | ||
|
||
# Add MySQL configuration | ||
ADD my.cnf /etc/mysql/conf.d/my.cnf | ||
ADD mysqld_charset.cnf /etc/mysql/conf.d/mysqld_charset.cnf | ||
|
||
# Add MySQL APT repos | ||
RUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections | ||
RUN apt-key adv --keyserver keys.gnupg.net --recv-keys 8C718D3B5072E1F5 | ||
RUN echo "deb http://repo.mysql.com/apt/ubuntu/ trusty mysql-5.7-dmr" \ | ||
> /etc/apt/sources.list.d/mysql.list | ||
|
||
# Install MySQL | ||
RUN apt-get update && \ | ||
apt-get -yq install mysql-server-5.7 pwgen && \ | ||
rm -rf /var/lib/apt/lists/* && \ | ||
if [ ! -f /usr/share/mysql/my-default.cnf ] ; then cp /etc/mysql/my.cnf /usr/share/mysql/my-default.cnf; fi && \ | ||
rm -rf /var/lib/mysql/* && \ | ||
mysqld --initialize > /dev/null 2>&1 && \ | ||
touch /var/lib/mysql/.EMPTY_DB | ||
|
||
# Add MySQL scripts | ||
ADD import_sql.sh /import_sql.sh | ||
ADD run.sh /run.sh | ||
|
||
ENV MYSQL_USER=admin \ | ||
MYSQL_PASS=**Random** \ | ||
ON_CREATE_DB=**False** \ | ||
REPLICATION_MASTER=**False** \ | ||
REPLICATION_SLAVE=**False** \ | ||
REPLICATION_USER=replica \ | ||
REPLICATION_PASS=replica | ||
|
||
# Add VOLUMEs to allow backup of config and databases | ||
VOLUME ["/etc/mysql", "/var/lib/mysql"] | ||
|
||
EXPOSE 3306 | ||
CMD ["/run.sh"] |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
db: | ||
image: tutum/mysql:5.7 | ||
environment: | ||
MYSQL_PASS: "**ChangeMe**" |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
#!/bin/bash | ||
|
||
if [[ $# -ne 3 ]]; then | ||
echo "Usage: $0 <username> <password> </path/to/sql_file.sql>" | ||
exit 1 | ||
fi | ||
|
||
echo "=> Starting MySQL Server" | ||
/usr/bin/mysqld_safe > /dev/null 2>&1 & | ||
PID=$! | ||
|
||
RET=1 | ||
while [[ RET -ne 0 ]]; do | ||
echo "=> Waiting for confirmation of MySQL service startup" | ||
sleep 5 | ||
mysql -u"$1" -p"$2" -e "status" > /dev/null 2>&1 | ||
RET=$? | ||
done | ||
|
||
echo " Started with PID ${PID}" | ||
|
||
echo "=> Importing SQL file" | ||
mysql -u"$1" -p"$2" < "$3" | ||
|
||
echo "=> Stopping MySQL Server" | ||
mysqladmin -u"$1" -p"$2" shutdown | ||
|
||
echo "=> Done!" |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
[mysqld] | ||
bind-address=0.0.0.0 | ||
# http://www.percona.com/blog/2008/05/31/dns-achilles-heel-mysql-installation/ | ||
skip_name_resolve | ||
#server-id | ||
#log-bin |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
[mysqld] | ||
character_set_server=utf8 | ||
character_set_filesystem=utf8 | ||
collation-server=utf8_general_ci | ||
init-connect='SET NAMES utf8' | ||
init_connect='SET collation_connection = utf8_general_ci' | ||
skip-character-set-client-handshake |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,190 @@ | ||
#!/bin/bash | ||
|
||
set -m | ||
set -e | ||
|
||
VOLUME_HOME="/var/lib/mysql" | ||
CONF_FILE="/etc/mysql/conf.d/my.cnf" | ||
LOG="/var/log/mysql/error.log" | ||
|
||
# Set permission of config file | ||
chmod 644 ${CONF_FILE} | ||
chmod 644 /etc/mysql/conf.d/mysqld_charset.cnf | ||
|
||
StartMySQL () | ||
{ | ||
/usr/bin/mysqld_safe ${EXTRA_OPTS} > /dev/null 2>&1 & | ||
# Time out in 1 minute | ||
LOOP_LIMIT=60 | ||
for (( i=0 ; ; i++ )); do | ||
if [ ${i} -eq ${LOOP_LIMIT} ]; then | ||
echo "Time out. Error log is shown as below:" | ||
tail -n 100 ${LOG} | ||
exit 1 | ||
fi | ||
echo "=> Waiting for confirmation of MySQL service startup, trying ${i}/${LOOP_LIMIT} ..." | ||
sleep 1 | ||
mysql -uroot -e "status" > /dev/null 2>&1 && break | ||
done | ||
} | ||
|
||
CreateMySQLUser() | ||
{ | ||
if [ "$MYSQL_PASS" = "**Random**" ]; then | ||
unset MYSQL_PASS | ||
fi | ||
|
||
PASS=${MYSQL_PASS:-$(pwgen -s 12 1)} | ||
_word=$( [ ${MYSQL_PASS} ] && echo "preset" || echo "random" ) | ||
echo "=> Creating MySQL user ${MYSQL_USER} with ${_word} password" | ||
|
||
mysql -uroot -e "CREATE USER '${MYSQL_USER}'@'%' IDENTIFIED BY '$PASS'" | ||
mysql -uroot -e "GRANT ALL PRIVILEGES ON *.* TO '${MYSQL_USER}'@'%' WITH GRANT OPTION" | ||
echo "=> Done!" | ||
echo "========================================================================" | ||
echo "You can now connect to this MySQL Server using:" | ||
echo "" | ||
echo " mysql -u$MYSQL_USER -p$PASS -h<host> -P<port>" | ||
echo "" | ||
echo "Please remember to change the above password as soon as possible!" | ||
echo "MySQL user 'root' has no password but only allows local connections" | ||
echo "========================================================================" | ||
} | ||
|
||
OnCreateDB() | ||
{ | ||
if [ "$ON_CREATE_DB" = "**False**" ]; then | ||
unset ON_CREATE_DB | ||
else | ||
echo "Creating MySQL database ${ON_CREATE_DB}" | ||
mysql -uroot -e "CREATE DATABASE IF NOT EXISTS ${ON_CREATE_DB};" | ||
echo "Database created!" | ||
fi | ||
} | ||
|
||
ImportSql() | ||
{ | ||
for FILE in ${STARTUP_SQL}; do | ||
echo "=> Importing SQL file ${FILE}" | ||
if [ "$ON_CREATE_DB" ]; then | ||
mysql -uroot "$ON_CREATE_DB" < "${FILE}" | ||
else | ||
mysql -uroot < "${FILE}" | ||
fi | ||
done | ||
} | ||
|
||
# Main | ||
if [ ${REPLICATION_MASTER} == "**False**" ]; then | ||
unset REPLICATION_MASTER | ||
fi | ||
|
||
if [ ${REPLICATION_SLAVE} == "**False**" ]; then | ||
unset REPLICATION_SLAVE | ||
fi | ||
|
||
# Initialize empty data volume and create MySQL user | ||
if [[ ! -d $VOLUME_HOME/mysql ]]; then | ||
echo "=> An empty or uninitialized MySQL volume is detected in $VOLUME_HOME" | ||
echo "=> Installing MySQL ..." | ||
if [ ! -f /usr/share/mysql/my-default.cnf ] ; then | ||
cp /etc/mysql/my.cnf /usr/share/mysql/my-default.cnf | ||
fi | ||
mysql_install_db || exit 1 | ||
touch /var/lib/mysql/.EMPTY_DB | ||
echo "=> Done!" | ||
else | ||
echo "=> Using an existing volume of MySQL" | ||
fi | ||
|
||
# Set MySQL REPLICATION - MASTER | ||
if [ -n "${REPLICATION_MASTER}" ]; then | ||
echo "=> Configuring MySQL replication as master (1/2) ..." | ||
if [ ! -f /replication_set.1 ]; then | ||
RAND="$(date +%s | rev | cut -c 1-2)$(echo ${RANDOM})" | ||
echo "=> Writting configuration file '${CONF_FILE}' with server-id=${RAND}" | ||
sed -i "s/^#server-id.*/server-id = ${RAND}/" ${CONF_FILE} | ||
sed -i "s/^#log-bin.*/log-bin = mysql-bin/" ${CONF_FILE} | ||
touch /replication_set.1 | ||
else | ||
echo "=> MySQL replication master already configured, skip" | ||
fi | ||
fi | ||
|
||
# Set MySQL REPLICATION - SLAVE | ||
if [ -n "${REPLICATION_SLAVE}" ]; then | ||
echo "=> Configuring MySQL replication as slave (1/2) ..." | ||
if [ -n "${MYSQL_PORT_3306_TCP_ADDR}" ] && [ -n "${MYSQL_PORT_3306_TCP_PORT}" ]; then | ||
if [ ! -f /replication_set.1 ]; then | ||
RAND="$(date +%s | rev | cut -c 1-2)$(echo ${RANDOM})" | ||
echo "=> Writting configuration file '${CONF_FILE}' with server-id=${RAND}" | ||
sed -i "s/^#server-id.*/server-id = ${RAND}/" ${CONF_FILE} | ||
sed -i "s/^#log-bin.*/log-bin = mysql-bin/" ${CONF_FILE} | ||
touch /replication_set.1 | ||
else | ||
echo "=> MySQL replication slave already configured, skip" | ||
fi | ||
else | ||
echo "=> Cannot configure slave, please link it to another MySQL container with alias as 'mysql'" | ||
exit 1 | ||
fi | ||
fi | ||
|
||
|
||
echo "=> Starting MySQL ..." | ||
StartMySQL | ||
tail -F $LOG & | ||
|
||
# Create admin user and pre create database | ||
if [ -f /var/lib/mysql/.EMPTY_DB ]; then | ||
echo "=> Creating admin user ..." | ||
CreateMySQLUser | ||
OnCreateDB | ||
rm /var/lib/mysql/.EMPTY_DB | ||
fi | ||
|
||
|
||
# Import Startup SQL | ||
if [ -n "${STARTUP_SQL}" ]; then | ||
if [ ! -f /sql_imported ]; then | ||
echo "=> Initializing DB with ${STARTUP_SQL}" | ||
ImportSql | ||
touch /sql_imported | ||
fi | ||
fi | ||
|
||
# Set MySQL REPLICATION - MASTER | ||
if [ -n "${REPLICATION_MASTER}" ]; then | ||
echo "=> Configuring MySQL replication as master (2/2) ..." | ||
if [ ! -f /replication_set.2 ]; then | ||
echo "=> Creating a log user ${REPLICATION_USER}:${REPLICATION_PASS}" | ||
mysql -uroot -e "CREATE USER '${REPLICATION_USER}'@'%' IDENTIFIED BY '${REPLICATION_PASS}'" | ||
mysql -uroot -e "GRANT REPLICATION SLAVE ON *.* TO '${REPLICATION_USER}'@'%'" | ||
mysql -uroot -e "reset master" | ||
echo "=> Done!" | ||
touch /replication_set.2 | ||
else | ||
echo "=> MySQL replication master already configured, skip" | ||
fi | ||
fi | ||
|
||
# Set MySQL REPLICATION - SLAVE | ||
if [ -n "${REPLICATION_SLAVE}" ]; then | ||
echo "=> Configuring MySQL replication as slave (2/2) ..." | ||
if [ -n "${MYSQL_PORT_3306_TCP_ADDR}" ] && [ -n "${MYSQL_PORT_3306_TCP_PORT}" ]; then | ||
if [ ! -f /replication_set.2 ]; then | ||
echo "=> Setting master connection info on slave" | ||
mysql -uroot -e "CHANGE MASTER TO MASTER_HOST='${MYSQL_PORT_3306_TCP_ADDR}',MASTER_USER='${MYSQL_ENV_REPLICATION_USER}',MASTER_PASSWORD='${MYSQL_ENV_REPLICATION_PASS}',MASTER_PORT=${MYSQL_PORT_3306_TCP_PORT}, MASTER_CONNECT_RETRY=30" | ||
mysql -uroot -e "start slave" | ||
echo "=> Done!" | ||
touch /replication_set.2 | ||
else | ||
echo "=> MySQL replication slave already configured, skip" | ||
fi | ||
else | ||
echo "=> Cannot configure slave, please link it to another MySQL container with alias as 'mysql'" | ||
exit 1 | ||
fi | ||
fi | ||
|
||
fg |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,51 +1,58 @@ | ||
#!/bin/bash | ||
# jue oct 15 13:18:38 CEST 2015 | ||
# [email protected] | ||
|
||
set -e | ||
|
||
echo "=> Building mysql 5.5 image" | ||
docker build -t mysql-5.5 5.5/ | ||
|
||
echo "=> Testing if mysql is running on 5.5" | ||
docker run -d -p 13306:3306 -e MYSQL_USER="user" -e MYSQL_PASS="test" mysql-5.5; sleep 10 | ||
mysqladmin -uuser -ptest -h127.0.0.1 -P13306 ping | grep -c "mysqld is alive" | ||
|
||
echo "=> Testing replication on mysql 5.5" | ||
docker run -d -e MYSQL_USER=user -e MYSQL_PASS=test -e REPLICATION_MASTER=true -e REPLICATION_USER=repl -e REPLICATION_PASS=repl -p 13307:3306 --name mysql55master mysql-5.5; sleep 10 | ||
docker run -d -e MYSQL_USER=user -e MYSQL_PASS=test -e REPLICATION_SLAVE=true -p 13308:3306 --link mysql55master:mysql mysql-5.5; sleep 10 | ||
docker logs mysql55master | grep "repl:repl" | ||
mysql -uuser -ptest -h127.0.0.1 -P13307 -e "show master status\G;" | grep "mysql-bin.*" | ||
mysql -uuser -ptest -h127.0.0.1 -P13308 -e "show slave status\G;" | grep "Slave_IO_Running.*Yes" | ||
mysql -uuser -ptest -h127.0.0.1 -P13308 -e "show slave status\G;" | grep "Slave_SQL_Running.*Yes" | ||
|
||
echo "=> Testing volume on mysql 5.5" | ||
mkdir vol55 | ||
docker run --name mysql55.1 -d -p 13309:3306 -e MYSQL_USER="user" -e MYSQL_PASS="test" -v $(pwd)/vol55:/var/lib/mysql mysql-5.5; sleep 10 | ||
mysqladmin -uuser -ptest -h127.0.0.1 -P13309 ping | grep -c "mysqld is alive" | ||
docker stop mysql55.1 | ||
docker run -d -p 13310:3306 -v $(pwd)/vol55:/var/lib/mysql mysql-5.5; sleep 10 | ||
mysqladmin -uuser -ptest -h127.0.0.1 -P13310 ping | grep -c "mysqld is alive" | ||
|
||
echo "=> Building mysql 5.6 image" | ||
docker build -t mysql-5.6 5.6/ | ||
|
||
echo "=> Testing if mysql is running on 5.6" | ||
docker run -d -p 23306:3306 -e MYSQL_USER="user" -e MYSQL_PASS="test" mysql-5.6; sleep 10 | ||
mysqladmin -uuser -ptest -h127.0.0.1 -P13307 ping | grep -c "mysqld is alive" | ||
|
||
echo "=> Testing replication on mysql 5.6" | ||
docker run -d -e MYSQL_USER=user -e MYSQL_PASS=test -e REPLICATION_MASTER=true -e REPLICATION_USER=repl -e REPLICATION_PASS=repl -p 23307:3306 --name mysql56master mysql-5.6; sleep 10 | ||
docker run -d -e MYSQL_USER=user -e MYSQL_PASS=test -e REPLICATION_SLAVE=true -p 23308:3306 --link mysql56master:mysql mysql-5.6; sleep 10 | ||
docker logs mysql56master | grep "repl:repl" | ||
mysql -uuser -ptest -h127.0.0.1 -P23307 -e "show master status\G;" | grep "mysql-bin.*" | ||
mysql -uuser -ptest -h127.0.0.1 -P23308 -e "show slave status\G;" | grep "Slave_IO_Running.*Yes" | ||
mysql -uuser -ptest -h127.0.0.1 -P23308 -e "show slave status\G;" | grep "Slave_SQL_Running.*Yes" | ||
|
||
echo "=> Testing volume on mysql 5.6" | ||
mkdir vol56 | ||
docker run --name mysql56.1 -d -p 23309:3306 -e MYSQL_USER="user" -e MYSQL_PASS="test" -v $(pwd)/vol56:/var/lib/mysql mysql-5.6; sleep 10 | ||
mysqladmin -uuser -ptest -h127.0.0.1 -P23309 ping | grep -c "mysqld is alive" | ||
docker stop mysql56.1 | ||
docker run -d -p 23310:3306 -v $(pwd)/vol56:/var/lib/mysql mysql-5.6; sleep 10 | ||
mysqladmin -uuser -ptest -h127.0.0.1 -P23310 ping | grep -c "mysqld is alive" | ||
|
||
echo "=>Done" | ||
mysql_docker_test_release() | ||
{ | ||
local major="5" | ||
local minor="7" | ||
|
||
[[ -z "$major" ]] || major="$1" | ||
[[ -z "$minor" ]] || major="$2" | ||
|
||
local release="${major}.${minor}" | ||
|
||
local lport="$(($RANDOM+1024))" | ||
local lport_master="$(($lport+1))" | ||
local lport_slave="$(($lport+2))" | ||
local lport_vol="$(($lport+3))" | ||
local lport_vol2="$(($lport+4))" | ||
|
||
echo -e "\e[1m=> Building mysql ${release} image\e[0m" | ||
docker build -t mysql-${release} ${release}/ | ||
|
||
echo -e "\e[1m=> Testing if mysql is running on ${release}" | ||
docker run -d -p ${lport}:3306 -e MYSQL_USER="user" -e MYSQL_PASS="test" mysql-${release} | ||
sleep 10 | ||
mysqladmin -uuser -ptest -h127.0.0.1 -P${lport} ping | grep -c "mysqld is alive" | ||
|
||
echo -e "\e[1m=> Testing replication on mysql ${release}\e[0m" | ||
docker run -d -e MYSQL_USER=user -e MYSQL_PASS=test -e REPLICATION_MASTER=true \ | ||
-e REPLICATION_USER=repl -e REPLICATION_PASS=repl -p ${lport_master}:3306 \ | ||
--name mysql${release//.}master mysql-${release}; sleep 10 | ||
docker run -d -e MYSQL_USER=user -e MYSQL_PASS=test -e REPLICATION_SLAVE=true \ | ||
-p ${lport_slave}:3306 --link mysql${release//.}master:mysql mysql-${release} | ||
sleep 10 | ||
docker logs mysql${release//.}master | grep "repl:repl" | ||
mysql -uuser -ptest -h127.0.0.1 -P${lport_master} -e "show master status\G;" | grep "mysql-bin.*" | ||
mysql -uuser -ptest -h127.0.0.1 -P${lport_slave} -e "show slave status\G;" | grep "Slave_IO_Running.*Yes" | ||
mysql -uuser -ptest -h127.0.0.1 -P${lport_slave} -e "show slave status\G;" | grep "Slave_SQL_Running.*Yes" | ||
|
||
echo -e "\e[1m=> Testing volume on mysql ${release}\e[0m" | ||
mkdir vol${release//.} | ||
docker run --name mysql${release//.}.1 -d -p ${lport_vol}:3306 -e MYSQL_USER="user" -e MYSQL_PASS="test" \ | ||
-v $(pwd)/vol${release//.}:/var/lib/mysql mysql-${release} | ||
sleep 10 | ||
mysqladmin -uuser -ptest -h127.0.0.1 -P${lport_vol} ping | grep -c "mysqld is alive" | ||
docker stop mysql${release//.}.1 | ||
docker run -d -p ${lport_vol2}:3306 -v $(pwd)/vol${release//.}:/var/lib/mysql mysql-${release}; sleep 10 | ||
mysqladmin -uuser -ptest -h127.0.0.1 -P${lport_vol2} ping | grep -c "mysqld is alive" | ||
} | ||
|
||
mysql_docker_test_release 5 5 | ||
mysql_docker_test_release 5 6 | ||
mysql_docker_test_release 5 7 | ||
|
||
echo -e "\e[1m DONE \e[0m" |
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
should be
[[ -z "$minor" ]] || minor="$2"
Also, test fails: