Browse Source

init version

DenMaSeno 9 years ago
commit
1e3e3c34dc
10 changed files with 242 additions and 0 deletions
  1. 17 0
      docker-compose.yml
  2. 4 0
      master/Dockerfile
  3. 8 0
      master/init-db.sql
  4. 37 0
      master/my.cnf
  5. 3 0
      readme.txt
  6. 5 0
      slave/Dockerfile
  7. 113 0
      slave/entrypoint.sh
  8. 9 0
      slave/init-db.sql
  9. 38 0
      slave/my.cnf
  10. 8 0
      test.sql

+ 17 - 0
docker-compose.yml

@@ -0,0 +1,17 @@
+version: '2'
+services:
+  mysql-master:
+    build: master
+    container_name: mysql-master
+    environment:
+      MYSQL_ROOT_PASSWORD: dodol123
+
+  mysql-slave:
+    build: slave
+    container_name: mysql-slave
+    environment:
+      MYSQL_ROOT_PASSWORD: dodol123
+    links:
+      - mysql-master:mysql-master
+    depends_on:
+      - mysql-master

+ 4 - 0
master/Dockerfile

@@ -0,0 +1,4 @@
+FROM mysql/mysql-server:5.7.12
+
+ADD my.cnf /etc/my.cnf
+ADD init-db.sql /docker-entrypoint-initdb.d/init-db.sql

+ 8 - 0
master/init-db.sql

@@ -0,0 +1,8 @@
+CREATE DATABASE IF NOT EXISTS xbrlgen;
+
+GRANT ALL ON xbrlgen.* TO 'root'@'%' IDENTIFIED BY 'dodol123';
+
+GRANT REPLICATION SLAVE ON *.* TO 'replica'@'%' IDENTIFIED BY 'duren123';
+
+FLUSH PRIVILEGES;
+

+ 37 - 0
master/my.cnf

@@ -0,0 +1,37 @@
+# For advice on how to change settings please see
+# http://dev.mysql.com/doc/refman/5.7/en/server-configuration-defaults.html
+
+[mysqld]
+#
+# Remove leading # and set to the amount of RAM for the most important data
+# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
+# innodb_buffer_pool_size = 128M
+#
+# Remove leading # to turn on a very important data integrity option: logging
+# changes to the binary log between backups.
+# log_bin
+#
+# Remove leading # to set options mainly useful for reporting servers.
+# The server defaults are faster for transactions and fast SELECTs.
+# Adjust sizes as needed, experiment to find the optimal values.
+# join_buffer_size = 128M
+# sort_buffer_size = 2M
+# read_rnd_buffer_size = 2M
+skip-host-cache
+skip-name-resolve
+datadir=/var/lib/mysql
+socket=/var/lib/mysql/mysql.sock
+secure-file-priv=/var/lib/mysql-files
+user=mysql
+
+# Disabling symbolic-links is recommended to prevent assorted security risks
+symbolic-links=0
+
+log-error=/var/log/mysqld.log
+pid-file=/var/run/mysqld/mysqld.pid
+
+
+server-id=1
+log_bin=/var/lib/mysql/mysql-bin.log
+binlog_do_db=xbrlgen
+

+ 3 - 0
readme.txt

@@ -0,0 +1,3 @@
+REPLICATION
+
+

+ 5 - 0
slave/Dockerfile

@@ -0,0 +1,5 @@
+FROM mysql/mysql-server:5.7.12
+
+ADD entrypoint.sh entrypoint.sh
+ADD my.cnf /etc/my.cnf
+ADD init-db.sql /docker-entrypoint-initdb.d/init-db.sql

+ 113 - 0
slave/entrypoint.sh

@@ -0,0 +1,113 @@
+#!/bin/bash
+set -e
+
+echo WAIT 10 sec
+sleep 10
+
+# if command starts with an option, prepend mysqld
+if [ "${1:0:1}" = '-' ]; then
+	set -- mysqld "$@"
+fi
+
+if [ "$1" = 'mysqld' ]; then
+	# Get config
+	DATADIR="$("$@" --verbose --help --log-bin-index=/tmp/tmp.index 2>/dev/null | awk '$1 == "datadir" { print $2; exit }')"
+
+	if [ ! -d "$DATADIR/mysql" ]; then
+		if [ -z "$MYSQL_ROOT_PASSWORD" -a -z "$MYSQL_ALLOW_EMPTY_PASSWORD" -a -z "$MYSQL_RANDOM_ROOT_PASSWORD" ]; then
+			echo >&2 'error: database is uninitialized and password option is not specified '
+			echo >&2 '  You need to specify one of MYSQL_ROOT_PASSWORD, MYSQL_ALLOW_EMPTY_PASSWORD and MYSQL_RANDOM_ROOT_PASSWORD'
+			exit 1
+		fi
+		# If the password variable is a filename we use the contents of the file
+		if [ -f "$MYSQL_ROOT_PASSWORD" ]; then
+			MYSQL_ROOT_PASSWORD="$(cat $MYSQL_ROOT_PASSWORD)"
+		fi
+		mkdir -p "$DATADIR"
+		chown -R mysql:mysql "$DATADIR"
+
+		echo 'Initializing database'
+		mysqld --initialize-insecure=on --user=mysql --datadir="$DATADIR"
+		echo 'Database initialized'
+
+		mysqld --user=mysql --datadir="$DATADIR" --skip-networking &
+		pid="$!"
+
+		mysql=( mysql --protocol=socket -uroot )
+
+		for i in {30..0}; do
+			if echo 'SELECT 1' | "${mysql[@]}" &> /dev/null; then
+				break
+			fi
+			echo 'MySQL init process in progress...'
+			sleep 1
+		done
+		if [ "$i" = 0 ]; then
+			echo >&2 'MySQL init process failed.'
+			exit 1
+		fi
+
+		mysql_tzinfo_to_sql /usr/share/zoneinfo | "${mysql[@]}" mysql
+		
+		if [ ! -z "$MYSQL_RANDOM_ROOT_PASSWORD" ]; then
+			MYSQL_ROOT_PASSWORD="$(pwmake 128)"
+			echo "GENERATED ROOT PASSWORD: $MYSQL_ROOT_PASSWORD"
+		fi
+		"${mysql[@]}" <<-EOSQL
+			-- What's done in this file shouldn't be replicated
+			--  or products like mysql-fabric won't work
+			SET @@SESSION.SQL_LOG_BIN=0;
+			DELETE FROM mysql.user where user != 'mysql.sys';
+			CREATE USER 'root'@'%' IDENTIFIED BY '${MYSQL_ROOT_PASSWORD}' ;
+			GRANT ALL ON *.* TO 'root'@'%' WITH GRANT OPTION ;
+			DROP DATABASE IF EXISTS test ;
+			FLUSH PRIVILEGES ;
+		EOSQL
+		if [ ! -z "$MYSQL_ROOT_PASSWORD" ]; then
+			mysql+=( -p"${MYSQL_ROOT_PASSWORD}" )
+		fi
+
+		if [ "$MYSQL_DATABASE" ]; then
+			echo "CREATE DATABASE IF NOT EXISTS \`$MYSQL_DATABASE\` ;" | "${mysql[@]}"
+			mysql+=( "$MYSQL_DATABASE" )
+		fi
+
+		if [ "$MYSQL_USER" -a "$MYSQL_PASSWORD" ]; then
+			echo "CREATE USER '"$MYSQL_USER"'@'%' IDENTIFIED BY '"$MYSQL_PASSWORD"' ;" | "${mysql[@]}"
+
+			if [ "$MYSQL_DATABASE" ]; then
+				echo "GRANT ALL ON \`"$MYSQL_DATABASE"\`.* TO '"$MYSQL_USER"'@'%' ;" | "${mysql[@]}"
+			fi
+
+			echo 'FLUSH PRIVILEGES ;' | "${mysql[@]}"
+		fi
+		echo
+		for f in /docker-entrypoint-initdb.d/*; do
+			case "$f" in
+				*.sh)  echo "$0: running $f"; . "$f" ;;
+				*.sql) echo "$0: running $f"; "${mysql[@]}" < "$f" && echo ;;
+				*)     echo "$0: ignoring $f" ;;
+			esac
+			echo
+		done
+
+		if [ ! -z "$MYSQL_ONETIME_PASSWORD" ]; then
+			"${mysql[@]}" <<-EOSQL
+				ALTER USER 'root'@'%' PASSWORD EXPIRE;
+			EOSQL
+		fi
+		if ! kill -s TERM "$pid" || ! wait "$pid"; then
+			echo >&2 'MySQL init process failed.'
+			exit 1
+		fi
+
+		echo
+		echo 'MySQL init process done. Ready for start up.'
+		echo
+	fi
+
+	chown -R mysql:mysql "$DATADIR"
+fi
+
+exec "$@"
+

+ 9 - 0
slave/init-db.sql

@@ -0,0 +1,9 @@
+CREATE DATABASE IF NOT EXISTS xbrlgen;
+
+GRANT ALL ON xbrlgen.* TO 'root'@'%' IDENTIFIED BY 'dodol123';
+
+CHANGE MASTER TO MASTER_HOST='mysql-master', MASTER_USER='replica', MASTER_PASSWORD='duren123', MASTER_LOG_FILE='mysql-bin.000003', MASTER_LOG_POS=0;
+
+FLUSH PRIVILEGES;
+
+START SLAVE;

+ 38 - 0
slave/my.cnf

@@ -0,0 +1,38 @@
+# For advice on how to change settings please see
+# http://dev.mysql.com/doc/refman/5.7/en/server-configuration-defaults.html
+
+[mysqld]
+#
+# Remove leading # and set to the amount of RAM for the most important data
+# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
+# innodb_buffer_pool_size = 128M
+#
+# Remove leading # to turn on a very important data integrity option: logging
+# changes to the binary log between backups.
+# log_bin
+#
+# Remove leading # to set options mainly useful for reporting servers.
+# The server defaults are faster for transactions and fast SELECTs.
+# Adjust sizes as needed, experiment to find the optimal values.
+# join_buffer_size = 128M
+# sort_buffer_size = 2M
+# read_rnd_buffer_size = 2M
+skip-host-cache
+skip-name-resolve
+datadir=/var/lib/mysql
+socket=/var/lib/mysql/mysql.sock
+secure-file-priv=/var/lib/mysql-files
+user=mysql
+
+# Disabling symbolic-links is recommended to prevent assorted security risks
+symbolic-links=0
+
+log-error=/var/log/mysqld.log
+pid-file=/var/run/mysqld/mysqld.pid
+
+
+server-id=2
+relay-log=/var/lib/mysql/mysql-relay-bin.log
+log_bin=/var/lib/mysql/mysql-bin.log
+binlog_do_db=xbrlgen
+

+ 8 - 0
test.sql

@@ -0,0 +1,8 @@
+CREATE TABLE IF NOT EXISTS `DATA1` (
+    `ID` INT NOT NULL auto_increment,
+    `NAME` varchar(100),
+    PRIMARY KEY (`ID`)
+);
+
+INSERT INTO DATA1(NAME) values ('dodol');
+INSERT INTO DATA1(NAME) values ('duren');