Focus On Oracle

Installing, Backup & Recovery, Performance Tuning,
Troubleshooting, Upgrading, Patching, Zero-Downtime Upgrade, GoldenGate

Oracle Exadata ,Oracle ODA, Oracle ZDLRA


当前位置: 首页 » 技术文章 » Cloud

Docker--如何使用Oracle MySQL Docker Image

首先我们需要下载Oracle mysql镜像文件

注意:名字是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]#


关键词:docker mysql 

相关文章

OGG from MySQL to Oracle
MySQL数据库高可用实践
Terraform,docker,wercker,k8s
Install oracle products on docker
MySQL Cookbook for Oracle DBA
MySQL HA - Innodb Cluster
腾讯微信的PhxSQL数据库
MySQL Group Replication(MGR)
MySQL and Oracle Enterprise Manager
MySQL Tools for performance, backup, monitor
MySQL Multi-Master Single-Slave Replication
MySQL and GPL
Top