注意:名字是mysql/mysql-server,如果只输入mysql,会下载Ubuntu版本下的mysql
[ohsdba@ovm ~]$ docker pull mysql/mysql-server Using default tag: latest latest: Pulling from mysql/mysql-server 10ec637c060c: Pull complete 22caa4e2bf29: Pull complete 91fa2b4da208: Pull complete 698e38e28dfb: Pull complete Digest: sha256:d0fed24f72475f7f6f6c27c55f3ef4be05946a277cc00519a14d772d3154f14b Status: Downloaded newer image for mysql/mysql-server:latest [ohsdba@ovm ~]$ [ohsdba@ovm ~]$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE ohsdba/httpd v2 ff2c7c83451e About an hour ago 273.4 MB mysql/mysql-server latest 43d4a6c26521 21 hours ago 369.1 MB oraclelinux 6 175adfa05e40 10 weeks ago 223.1 MB [ohsdba@ovm ~]$
运行Oracle MySQL容器
[ohsdba@ovm ~]$ docker run mysql/mysql-server
error: database is uninitialized and password option is not specified
You need to specify one of MYSQL_ROOT_PASSWORD, MYSQL_ALLOW_EMPTY_PASSWORD and MYSQL_RANDOM_ROOT_PASSWORD
[ohsdba@ovm ~]$
[ohsdba@ovm ~]$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d1b64a9053f7 mysql/mysql-server "/entrypoint.sh mysql" 16 seconds ago Exited (1) 16 seconds ago cranky_euclid c307c7132420 ohsdba/httpd:v2 "/bin/sh -c '/usr/sbi" 6 minutes ago Up 6 minutes 0.0.0.0:8080->80/tcp ohs [ohsdba@ovm ~]$注意:这里的cranky_euclid为系统指定创建的名字
[ohsdba@ovm ~]$ docker run --name mysqldb -d -e MYSQL_ROOT_PASSWORD=ohsdba -v /home/datadir:/var/lib/mysql mysql/mysql-server
-d 表示后台运行 -e 表示给给变量MYSQL_ROOT_PASSWORD传输值 -v 表示将主机的目录挂载到容器中的/var/lib/mysql目录。可以从主机上直接访问容器中的文件 db29569e3d7c78238f5181edbe3ad86a56c22f22599cae0ff1387ca1b66ec704 [ohsdba@ovm ~]$ [ohsdba@ovm ~]$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES db29569e3d7c mysql/mysql-server "/entrypoint.sh mysql" 4 seconds ago Up 4 seconds 3306/tcp, 33060/tcp mysqldb d1b64a9053f7 mysql/mysql-server "/entrypoint.sh mysql" 45 seconds ago Exited (1) 45 seconds ago cranky_euclid c307c7132420 ohsdba/httpd:v2 "/bin/sh -c '/usr/sbi" 6 minutes ago Up 6 minutes 0.0.0.0:8080->80/tcp ohs [ohsdba@ovm ~]$
[ohsdba@ovm ~]$ docker exec -i -t mysqldb bash
[root@db29569e3d7c /]# ps -ef|grep mysql mysql 1 0 0 09:13 ? 00:00:00 mysqld root 122 109 0 09:14 ? 00:00:00 grep --color=auto mysql [root@db29569e3d7c /]# exit [ohsdba@ovm ~]$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES db29569e3d7c mysql/mysql-server "/entrypoint.sh mysql" 33 minutes ago Up 33 minutes 3306/tcp, 33060/tcp mysqldb d1b64a9053f7 mysql/mysql-server "/entrypoint.sh mysql" 34 minutes ago Exited (1) 34 minutes ago cranky_euclid c307c7132420 ohsdba/httpd:v2 "/bin/sh -c '/usr/sbi" 40 minutes ago Up 40 minutes 0.0.0.0:8080->80/tcp ohs [ohsdba@ovm ~]$ docker rm cranky_euclid cranky_euclid [ohsdba@ovm ~]$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES db29569e3d7c mysql/mysql-server "/entrypoint.sh mysql" 33 minutes ago Up 33 minutes 3306/tcp, 33060/tcp mysqldb c307c7132420 ohsdba/httpd:v2 "/bin/sh -c '/usr/sbi" 40 minutes ago Up 40 minutes 0.0.0.0:8080->80/tcp ohs [ohsdba@ovm ~]$
查看mysqldb容器日志
[ohsdba@ovm mysql]$ docker logs mysqldb Initializing database Database initialized MySQL init process in progress... Warning: Unable to load '/usr/share/zoneinfo/iso3166.tab' as time zone. Skipping it. Warning: Unable to load '/usr/share/zoneinfo/zone.tab' as time zone. Skipping it. /entrypoint.sh: ignoring /docker-entrypoint-initdb.d/* MySQL init process done. Ready for start up. [ohsdba@ovm mysql]$
查看容器的详细信息
[root@ovm docker]# docker inspect mysqldb
[
{
"Id": "db29569e3d7c78238f5181edbe3ad86a56c22f22599cae0ff1387ca1b66ec704",
"Created": "2016-10-05T09:13:29.251184245Z",
"Path": "/entrypoint.sh",
"Args": [
"mysqld"
],
"State": {
"Status": "running",
"Running": true,
"Paused": false,
"Restarting": false,
"OOMKilled": false,
"Dead": false,
"Pid": 7321,
"ExitCode": 0,
"Error": "",
"StartedAt": "2016-10-05T09:13:29.421623692Z",
"FinishedAt": "0001-01-01T00:00:00Z"
},
"Image": "sha256:43d4a6c26521f404943533923dd6dfade685440b7ff3786ce586ba2cb6a5031d",
"ResolvConfPath": "/var/lib/docker/containers/db29569e3d7c78238f5181edbe3ad86a56c22f22599cae0ff1387ca1b66ec704/resolv.conf",
"HostnamePath": "/var/lib/docker/containers/db29569e3d7c78238f5181edbe3ad86a56c22f22599cae0ff1387ca1b66ec704/hostname",
"HostsPath": "/var/lib/docker/containers/db29569e3d7c78238f5181edbe3ad86a56c22f22599cae0ff1387ca1b66ec704/hosts",
"LogPath": "/var/lib/docker/containers/db29569e3d7c78238f5181edbe3ad86a56c22f22599cae0ff1387ca1b66ec704/db29569e3d7c78238f5181edbe3ad86a56c22f22599cae0ff1387ca1b66ec704-json.log",
"Name": "/mysqldb",
"RestartCount": 0,
"Driver": "btrfs",
"MountLabel": "",
"ProcessLabel": "",
"AppArmorProfile": "",
"ExecIDs": null,
"HostConfig": {
"Binds": [
"/home/datadir:/var/lib/mysql"
],
"ContainerIDFile": "",
"LogConfig": {
"Type": "json-file",
"Config": {}
},
"NetworkMode": "default",
"PortBindings": {},
"RestartPolicy": {
"Name": "no",
"MaximumRetryCount": 0
},
"AutoRemove": false,
"VolumeDriver": "",
"VolumesFrom": null,
"CapAdd": null,
"CapDrop": null,
"Dns": [],
"DnsOptions": [],
"DnsSearch": [],
"ExtraHosts": null,
"GroupAdd": null,
"IpcMode": "",
"Cgroup": "",
"Links": null,
"OomScoreAdj": 0,
"PidMode": "",
"Privileged": false,
"PublishAllPorts": false,
"ReadonlyRootfs": false,
"SecurityOpt": null,
"UTSMode": "",
"UsernsMode": "",
"ShmSize": 67108864,
"Runtime": "runc",
"ConsoleSize": [
0,
0
],
"Isolation": "",
"CpuShares": 0,
"Memory": 0,
"CgroupParent": "",
"BlkioWeight": 0,
"BlkioWeightDevice": null,
"BlkioDeviceReadBps": null,
"BlkioDeviceWriteBps": null,
"BlkioDeviceReadIOps": null,
"BlkioDeviceWriteIOps": null,
"CpuPeriod": 0,
"CpuQuota": 0,
"CpusetCpus": "",
"CpusetMems": "",
"Devices": [],
"DiskQuota": 0,
"KernelMemory": 0,
"MemoryReservation": 0,
"MemorySwap": 0,
"MemorySwappiness": -1,
"OomKillDisable": false,
"PidsLimit": 0,
"Ulimits": null,
"CpuCount": 0,
"CpuPercent": 0,
"IOMaximumIOps": 0,
"IOMaximumBandwidth": 0
},
"GraphDriver": {
"Name": "btrfs",
"Data": null
},
"Mounts": [
{
"Source": "/home/datadir",
"Destination": "/var/lib/mysql",
"Mode": "",
"RW": true,
"Propagation": "rprivate"
}
],
"Config": {
"Hostname": "db29569e3d7c",
"Domainname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"ExposedPorts": {
"3306/tcp": {},
"33060/tcp": {}
},
"Tty": false,
"OpenStdin": false,
"StdinOnce": false,
"Env": [
"MYSQL_ROOT_PASSWORD=ohsdba",
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
"PACKAGE_URL=https://repo.mysql.com/yum/mysql-5.7-community/docker/x86_64/mysql-community-server-minimal-5.7.15-1.el7.x86_64.rpm"
],
"Cmd": [
"mysqld"
],
"Image": "mysql/mysql-server",
"Volumes": {
"/var/lib/mysql": {}
},
"WorkingDir": "",
"Entrypoint": [
"/entrypoint.sh"
],
"OnBuild": null,
"Labels": {}
},
"NetworkSettings": {
"Bridge": "",
"SandboxID": "a185650a73376c93342f1666e77e4c628b384d4ed9da34fa3849aae16ff21119",
"HairpinMode": false,
"LinkLocalIPv6Address": "",
"LinkLocalIPv6PrefixLen": 0,
"Ports": {
"3306/tcp": null,
"33060/tcp": null
},
"SandboxKey": "/var/run/docker/netns/a185650a7337",
"SecondaryIPAddresses": null,
"SecondaryIPv6Addresses": null,
"EndpointID": "783124e2a08042fb4c7d75b72ab08b89941bcea8a83fd4e5dbdd35317812ed66",
"Gateway": "172.17.0.1",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"IPAddress": "172.17.0.3",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"MacAddress": "02:42:ac:11:00:03",
"Networks": {
"bridge": {
"IPAMConfig": null,
"Links": null,
"Aliases": null,
"NetworkID": "aefa4adb90e509a00daf872d1a25f12c77a977401d1d7ed86aeaebab2e06db05",
"EndpointID": "783124e2a08042fb4c7d75b72ab08b89941bcea8a83fd4e5dbdd35317812ed66",
"Gateway": "172.17.0.1",
"IPAddress": "172.17.0.3",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": "02:42:ac:11:00:03"
}
}
}
}
]
[root@ovm docker]#
连接容器中的MySQL
[ohsdba@ovm ~]$ docker exec -i -t mysqldb mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.15 MySQL Community Server (GPL)
Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
mysql> help show
Name: 'SHOW'
Description:
SHOW has many forms that provide information about databases, tables,
columns, or status information about the server. This section describes
those following:
SHOW {BINARY | MASTER} LOGS
SHOW BINLOG EVENTS [IN 'log_name'] [FROM pos] [LIMIT [offset,] row_count]
SHOW CHARACTER SET [like_or_where]
SHOW COLLATION [like_or_where]
SHOW [FULL] COLUMNS FROM tbl_name [FROM db_name] [like_or_where]
SHOW CREATE DATABASE db_name
SHOW CREATE EVENT event_name
SHOW CREATE FUNCTION func_name
SHOW CREATE PROCEDURE proc_name
SHOW CREATE TABLE tbl_name
SHOW CREATE TRIGGER trigger_name
SHOW CREATE VIEW view_name
SHOW DATABASES [like_or_where]
SHOW ENGINE engine_name {STATUS | MUTEX}
SHOW [STORAGE] ENGINES
SHOW ERRORS [LIMIT [offset,] row_count]
SHOW EVENTS
SHOW FUNCTION CODE func_name
SHOW FUNCTION STATUS [like_or_where]
SHOW GRANTS FOR user
SHOW INDEX FROM tbl_name [FROM db_name]
SHOW MASTER STATUS
SHOW OPEN TABLES [FROM db_name] [like_or_where]
SHOW PLUGINS
SHOW PROCEDURE CODE proc_name
SHOW PROCEDURE STATUS [like_or_where]
SHOW PRIVILEGES
SHOW [FULL] PROCESSLIST
SHOW PROFILE [types] [FOR QUERY n] [OFFSET n] [LIMIT n]
SHOW PROFILES
SHOW RELAYLOG EVENTS [IN 'log_name'] [FROM pos] [LIMIT [offset,] row_count]
SHOW SLAVE HOSTS
SHOW SLAVE STATUS [NONBLOCKING]
SHOW [GLOBAL | SESSION] STATUS [like_or_where]
SHOW TABLE STATUS [FROM db_name] [like_or_where]
SHOW [FULL] TABLES [FROM db_name] [like_or_where]
SHOW TRIGGERS [FROM db_name] [like_or_where]
SHOW [GLOBAL | SESSION] VARIABLES [like_or_where]
SHOW WARNINGS [LIMIT [offset,] row_count]
like_or_where:
LIKE 'pattern'
| WHERE expr
If the syntax for a given SHOW statement includes a LIKE 'pattern'
part, 'pattern' is a string that can contain the SQL "%" and "_"
wildcard characters. The pattern is useful for restricting statement
output to matching values.
Several SHOW statements also accept a WHERE clause that provides more
flexibility in specifying which rows to display. See
http://dev.mysql.com/doc/refman/5.7/en/extended-show.html.
URL: http://dev.mysql.com/doc/refman/5.7/en/show.html
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)
mysql> use sys
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> show tables
-> ;
+-----------------------------------------------+
| Tables_in_sys |
+-----------------------------------------------+
| host_summary |
| host_summary_by_file_io |
| host_summary_by_file_io_type |
| host_summary_by_stages |
| host_summary_by_statement_latency |
| host_summary_by_statement_type |
| innodb_buffer_stats_by_schema |
| innodb_buffer_stats_by_table |
| innodb_lock_waits |
| io_by_thread_by_latency |
| io_global_by_file_by_bytes |
| io_global_by_file_by_latency |
| io_global_by_wait_by_bytes |
| io_global_by_wait_by_latency |
| latest_file_io |
| memory_by_host_by_current_bytes |
| memory_by_thread_by_current_bytes |
| memory_by_user_by_current_bytes |
| memory_global_by_current_bytes |
| memory_global_total |
| metrics |
| processlist |
| ps_check_lost_instrumentation |
| schema_auto_increment_columns |
| schema_index_statistics |
| schema_object_overview |
| schema_redundant_indexes |
| schema_table_lock_waits |
| schema_table_statistics |
| schema_table_statistics_with_buffer |
| schema_tables_with_full_table_scans |
| schema_unused_indexes |
| session |
| session_ssl_status |
| statement_analysis |
| statements_with_errors_or_warnings |
| statements_with_full_table_scans |
| statements_with_runtimes_in_95th_percentile |
| statements_with_sorting |
| statements_with_temp_tables |
| sys_config |
| user_summary |
| user_summary_by_file_io |
| user_summary_by_file_io_type |
| user_summary_by_stages |
| user_summary_by_statement_latency |
| user_summary_by_statement_type |
| version |
| wait_classes_global_by_avg_latency |
| wait_classes_global_by_latency |
| waits_by_host_by_latency |
| waits_by_user_by_latency |
| waits_global_by_latency |
| x$host_summary |
| x$host_summary_by_file_io |
| x$host_summary_by_file_io_type |
| x$host_summary_by_stages |
| x$host_summary_by_statement_latency |
| x$host_summary_by_statement_type |
| x$innodb_buffer_stats_by_schema |
| x$innodb_buffer_stats_by_table |
| x$innodb_lock_waits |
| x$io_by_thread_by_latency |
| x$io_global_by_file_by_bytes |
| x$io_global_by_file_by_latency |
| x$io_global_by_wait_by_bytes |
| x$io_global_by_wait_by_latency |
| x$latest_file_io |
| x$memory_by_host_by_current_bytes |
| x$memory_by_thread_by_current_bytes |
| x$memory_by_user_by_current_bytes |
| x$memory_global_by_current_bytes |
| x$memory_global_total |
| x$processlist |
| x$ps_digest_95th_percentile_by_avg_us |
| x$ps_digest_avg_latency_distribution |
| x$ps_schema_table_statistics_io |
| x$schema_flattened_keys |
| x$schema_index_statistics |
| x$schema_table_lock_waits |
| x$schema_table_statistics |
| x$schema_table_statistics_with_buffer |
| x$schema_tables_with_full_table_scans |
| x$session |
| x$statement_analysis |
| x$statements_with_errors_or_warnings |
| x$statements_with_full_table_scans |
| x$statements_with_runtimes_in_95th_percentile |
| x$statements_with_sorting |
| x$statements_with_temp_tables |
| x$user_summary |
| x$user_summary_by_file_io |
| x$user_summary_by_file_io_type |
| x$user_summary_by_stages |
| x$user_summary_by_statement_latency |
| x$user_summary_by_statement_type |
| x$wait_classes_global_by_avg_latency |
| x$wait_classes_global_by_latency |
| x$waits_by_host_by_latency |
| x$waits_by_user_by_latency |
| x$waits_global_by_latency |
+-----------------------------------------------+
101 rows in set (0.00 sec)
mysql>
mysql> status
--------------
mysql Ver 14.14 Distrib 5.7.15, for Linux (x86_64) using EditLine wrapper
Connection id: 6
Current database:
Current user: root@127.0.0.1
SSL: Cipher in use is DHE-RSA-AES128-GCM-SHA256
Current pager: stdout
Using outfile: ''
Using delimiter: ;
Server version: 5.7.15 MySQL Community Server (GPL)
Protocol version: 10
Connection: 127.0.0.1 via TCP/IP
Server characterset: latin1
Db characterset: latin1
Client characterset: latin1
Conn. characterset: latin1
TCP port: 3306
Uptime: 14 min 40 sec
Threads: 1 Questions: 121 Slow queries: 0 Opens: 162 Flush tables: 1 Open tables: 155 Queries per second avg: 0.137
--------------
mysql>
容器中MySQL配置文件
[root@db29569e3d7c /]# cat /etc/my.cnf
# 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
容器中mysql数据文件位置,对应的是主机目录/home/datadir/
[root@db29569e3d7c /]# ls -l /var/lib/mysql total 188480 -rw-r-----. 1 mysql mysql 56 Oct 5 09:13 auto.cnf -rw-------. 1 mysql mysql 1676 Oct 5 09:13 ca-key.pem -rw-r--r--. 1 mysql mysql 1075 Oct 5 09:13 ca.pem -rw-r--r--. 1 mysql mysql 1079 Oct 5 09:13 client-cert.pem -rw-------. 1 mysql mysql 1680 Oct 5 09:13 client-key.pem -rw-r-----. 1 mysql mysql 1306 Oct 5 09:13 ib_buffer_pool -rw-r-----. 1 mysql mysql 50331648 Oct 5 09:13 ib_logfile0 -rw-r-----. 1 mysql mysql 50331648 Oct 5 09:13 ib_logfile1 -rw-r-----. 1 mysql mysql 79691776 Oct 5 09:13 ibdata1 -rw-r-----. 1 mysql mysql 12582912 Oct 5 09:21 ibtmp1 drwxr-x---. 2 mysql mysql 4096 Oct 5 09:13 mysql srwxrwxrwx. 1 mysql mysql 0 Oct 5 09:13 mysql.sock -rw-------. 1 mysql mysql 2 Oct 5 09:13 mysql.sock.lock drwxr-x---. 2 mysql mysql 4096 Oct 5 09:13 performance_schema -rw-------. 1 mysql mysql 1680 Oct 5 09:13 private_key.pem -rw-r--r--. 1 mysql mysql 452 Oct 5 09:13 public_key.pem -rw-r--r--. 1 mysql mysql 1079 Oct 5 09:13 server-cert.pem -rw-------. 1 mysql mysql 1680 Oct 5 09:13 server-key.pem drwxr-x---. 2 mysql mysql 12288 Oct 5 09:13 sys [root@db29569e3d7c /]#
entrypoint.sh脚本位置和内容
[root@ovm docker]# pwd /var/lib/docker [root@ovm docker]# find . -name entrypoint.sh -ls 12194 4 -rwxr-xr-x 1 root root 3449 Oct 4 08:11 ./btrfs/subvolumes/5542689b9fc309d97ea3b3e60edb2374bbc14c2f5506ff3066bf917b1c4490d7/entrypoint.sh 12194 4 -rwxr-xr-x 1 root root 3449 Oct 4 08:11 ./btrfs/subvolumes/e70cb86235ac9849c85a3260e96fa01704ebfb60a5164d4b0f4099f08553a2ab-init/entrypoint.sh 12194 4 -rwxr-xr-x 1 root root 3449 Oct 4 08:11 ./btrfs/subvolumes/e70cb86235ac9849c85a3260e96fa01704ebfb60a5164d4b0f4099f08553a2ab/entrypoint.sh
[root@ovm docker]# cat ./btrfs/subvolumes/5542689b9fc309d97ea3b3e60edb2374bbc14c2f5506ff3066bf917b1c4490d7/entrypoint.sh
#!/bin/bash
set -e
# if command starts with an option, prepend mysqld
if [ "${1:0:1}" = '-' ]; then
set -- mysqld "$@"
fi
if [ "$1" = 'mysqld' ]; then
# Test we're able to startup without errors. We redirect stdout to /dev/null so
# only the error messages are left.
result=0
output=$("$@" --verbose --help 2>&1 > /dev/null) || result=$?
if [ ! "$result" = "0" ]; then
echo >&2 'error: could not run mysql. This could be caused by a misconfigured my.cnf'
echo >&2 "$output"
exit 1
fi
# 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'
"$@" --initialize-insecure=on
echo 'Database initialized'
"$@" --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 NOT IN ('mysql.sys', 'mysqlxsys');
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 "$@"
[root@ovm docker]#
