Skip to content

Commit 9939a7e

Browse files
author
MySQL Build Team
committed
Release version 1.0.19-router
* Fix Bug#36740567 - MySQL Router Container should accept credentials via file * ET#82635: Bump versions for October 8.0.40/8.4.3/9.1.0 Docker releases * ET#82573 please create 9.2 container images * follow-up ET#82116 container images are wrong version for 8.0 and 8.4
1 parent 91a9cd7 commit 9939a7e

File tree

10 files changed

+366
-34
lines changed

10 files changed

+366
-34
lines changed

mysql-router/8.0/Dockerfile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@
1414
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
1515
FROM container-registry.oracle.com/os/oraclelinux:9-slim
1616

17-
ARG MYSQL_CLIENT_PACKAGE=mysql-community-client-8.0.39
18-
ARG MYSQL_ROUTER_PACKAGE=mysql-router-community-8.0.39
17+
ARG MYSQL_CLIENT_PACKAGE=mysql-community-client-8.0.40
18+
ARG MYSQL_ROUTER_PACKAGE=mysql-router-community-8.0.40
1919
ARG CONFIG_PACKAGE_NAME=mysql84-community-release-el9.rpm
2020
ARG REPO_NAME_SERVER=mysql80-community
2121
ARG REPO_NAME_TOOLS=mysql-tools-community

mysql-router/8.0/inspec/control.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,10 @@
1111
impact 0.5
1212
describe package('mysql-community-client') do
1313
it { should be_installed }
14-
its ('version') { should match '8.0.39.*' }
14+
its ('version') { should match '8.0.40.*' }
1515
end
1616
describe package('mysql-router-community') do
1717
it { should be_installed }
18-
its ('version') { should match '8.0.39.*' }
18+
its ('version') { should match '8.0.40.*' }
1919
end
2020
end

mysql-router/8.0/run.sh

Lines changed: 41 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
#!/bin/bash
2-
# Copyright (c) 2018, 2021, Oracle and/or its affiliates.
2+
# Copyright (c) 2018, 2024, Oracle and/or its affiliates.
33
#
44
# This program is free software; you can redistribute it and/or modify
55
# it under the terms of the GNU General Public License as published by
@@ -15,42 +15,70 @@
1515
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
1616
set -e
1717

18+
if [[ -n $MYSQL_USER_FILE && -f $MYSQL_USER_FILE ]]; then
19+
MYSQL_USER=$(cat $MYSQL_USER_FILE)
20+
fi
21+
1822
if [ "$1" = 'mysqlrouter' ]; then
19-
if [[ -z $MYSQL_HOST || -z $MYSQL_PORT || -z $MYSQL_USER || -z $MYSQL_PASSWORD ]]; then
23+
if [[ -z $MYSQL_HOST || -z $MYSQL_PORT || -z $MYSQL_USER || (-z $MYSQL_PASSWORD && -z $MYSQL_PASSWORD_FILE) ]]; then
2024
echo "We require all of"
2125
echo " MYSQL_HOST"
2226
echo " MYSQL_PORT"
23-
echo " MYSQL_USER"
24-
echo " MYSQL_PASSWORD"
27+
echo " MYSQL_USER or MYSQL_USER_FILE"
28+
echo " MYSQL_PASSWORD or MYSQL_PASSWORD_FILE"
2529
echo "to be set."
2630
echo "In addition you can set"
27-
echo " MYSQL_INNODB_CLUSTER_MEMBERS "
31+
echo " MYSQL_INNODB_CLUSTER_MEMBERS"
2832
echo " MYSQL_CREATE_ROUTER_USER"
2933
echo " MYSQL_ROUTER_BOOTSTRAP_EXTRA_OPTIONS"
3034
echo "Exiting."
3135
exit 1
3236
fi
3337

3438
PASSFILE=$(mktemp)
35-
echo "$MYSQL_PASSWORD" > "$PASSFILE"
39+
if [[ -n $MYSQL_PASSWORD_FILE && -f "$MYSQL_PASSWORD_FILE" ]]; then
40+
cat "$MYSQL_PASSWORD_FILE" > "$PASSFILE"
41+
echo "" >> "$PASSFILE"
42+
else
43+
echo "$MYSQL_PASSWORD" > "$PASSFILE"
44+
fi
3645
if [ -z $MYSQL_CREATE_ROUTER_USER ]; then
37-
echo "$MYSQL_PASSWORD" >> "$PASSFILE"
46+
if [[ -n $MYSQL_PASSWORD_FILE && -f "$MYSQL_PASSWORD_FILE" ]]; then
47+
cat "$MYSQL_PASSWORD_FILE" >> "$PASSFILE"
48+
echo "" >> "$PASSFILE"
49+
else
50+
echo "$MYSQL_PASSWORD" >> "$PASSFILE"
51+
fi
3852
MYSQL_CREATE_ROUTER_USER=1
3953
echo "[Entrypoint] MYSQL_CREATE_ROUTER_USER is not set, Router will generate a new account to be used at runtime."
4054
echo "[Entrypoint] Set it to 0 to reuse $MYSQL_USER instead."
4155
elif [ "$MYSQL_CREATE_ROUTER_USER" = "0" ]; then
42-
echo "$MYSQL_PASSWORD" >> "$PASSFILE"
56+
if [[ -n $MYSQL_PASSWORD_FILE && -f "$MYSQL_PASSWORD_FILE" ]]; then
57+
cat "$MYSQL_PASSWORD_FILE" >> "$PASSFILE"
58+
echo "" >> "$PASSFILE"
59+
else
60+
echo "$MYSQL_PASSWORD" >> "$PASSFILE"
61+
fi
4362
echo "[Entrypoint] MYSQL_CREATE_ROUTER_USER is 0, Router will reuse $MYSQL_USER account at runtime"
4463
else
4564
echo "[Entrypoint] MYSQL_CREATE_ROUTER_USER is not 0, Router will generate a new account to be used at runtime"
4665
fi
4766

48-
DEFAULTS_EXTRA_FILE=$(mktemp)
49-
cat >"$DEFAULTS_EXTRA_FILE" <<EOF
67+
if [[ -n $MYSQL_PASSWORD_FILE && -f "$MYSQL_PASSWORD_FILE" ]]; then
68+
DEFAULTS_EXTRA_FILE=$(mktemp)
69+
cat >"$DEFAULTS_EXTRA_FILE" <<EOF
70+
[client]
71+
password="$(cat $MYSQL_PASSWORD_FILE)"
72+
EOF
73+
else
74+
DEFAULTS_EXTRA_FILE=$(mktemp)
75+
cat >"$DEFAULTS_EXTRA_FILE" <<EOF
5076
[client]
5177
password="$MYSQL_PASSWORD"
5278
EOF
79+
fi
5380
unset MYSQL_PASSWORD
81+
5482
max_tries=12
5583
attempt_num=0
5684
until (echo > "/dev/tcp/$MYSQL_HOST/$MYSQL_PORT") >/dev/null 2>&1; do
@@ -89,13 +117,13 @@ EOF
89117
mysqlrouter --bootstrap "$MYSQL_USER@$MYSQL_HOST:$MYSQL_PORT" --directory /tmp/mysqlrouter --force $opt_user $MYSQL_ROUTER_BOOTSTRAP_EXTRA_OPTIONS < "$PASSFILE" || exit 1
90118
fi
91119

120+
rm "$DEFAULTS_EXTRA_FILE"
121+
92122
sed -i -e 's/logging_folder=.*$/logging_folder=/' /tmp/mysqlrouter/mysqlrouter.conf
93123
echo "[Entrypoint] Starting mysql-router."
94124
exec "$@" --config /tmp/mysqlrouter/mysqlrouter.conf
95125

96-
rm -f "$PASSFILE"
97-
rm -f "$DEFAULTS_EXTRA_FILE"
98-
unset DEFAULTS_EXTRA_FILE
126+
rm $PASSFILE
99127
else
100128
exec "$@"
101129
fi

mysql-router/8.4/Dockerfile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@
1414
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
1515
FROM container-registry.oracle.com/os/oraclelinux:9-slim
1616

17-
ARG MYSQL_CLIENT_PACKAGE=mysql-community-client-8.4.2
18-
ARG MYSQL_ROUTER_PACKAGE=mysql-router-community-8.4.2
17+
ARG MYSQL_CLIENT_PACKAGE=mysql-community-client-8.4.3
18+
ARG MYSQL_ROUTER_PACKAGE=mysql-router-community-8.4.3
1919
ARG CONFIG_PACKAGE_NAME=mysql84-community-release-el9.rpm
2020
ARG REPO_NAME_SERVER=mysql-8.4-lts-community
2121
ARG REPO_NAME_TOOLS=mysql-tools-8.4-lts-community

mysql-router/8.4/inspec/control.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,10 @@
1111
impact 0.5
1212
describe package('mysql-community-client') do
1313
it { should be_installed }
14-
its ('version') { should match '8.4.2.*' }
14+
its ('version') { should match '8.4.3.*' }
1515
end
1616
describe package('mysql-router-community') do
1717
it { should be_installed }
18-
its ('version') { should match '8.4.2.*' }
18+
its ('version') { should match '8.4.3.*' }
1919
end
2020
end

mysql-router/8.4/run.sh

Lines changed: 41 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
#!/bin/bash
2-
# Copyright (c) 2018, 2021, Oracle and/or its affiliates.
2+
# Copyright (c) 2018, 2024, Oracle and/or its affiliates.
33
#
44
# This program is free software; you can redistribute it and/or modify
55
# it under the terms of the GNU General Public License as published by
@@ -15,42 +15,70 @@
1515
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
1616
set -e
1717

18+
if [[ -n $MYSQL_USER_FILE && -f $MYSQL_USER_FILE ]]; then
19+
MYSQL_USER=$(cat $MYSQL_USER_FILE)
20+
fi
21+
1822
if [ "$1" = 'mysqlrouter' ]; then
19-
if [[ -z $MYSQL_HOST || -z $MYSQL_PORT || -z $MYSQL_USER || -z $MYSQL_PASSWORD ]]; then
23+
if [[ -z $MYSQL_HOST || -z $MYSQL_PORT || -z $MYSQL_USER || (-z $MYSQL_PASSWORD && -z $MYSQL_PASSWORD_FILE) ]]; then
2024
echo "We require all of"
2125
echo " MYSQL_HOST"
2226
echo " MYSQL_PORT"
23-
echo " MYSQL_USER"
24-
echo " MYSQL_PASSWORD"
27+
echo " MYSQL_USER or MYSQL_USER_FILE"
28+
echo " MYSQL_PASSWORD or MYSQL_PASSWORD_FILE"
2529
echo "to be set."
2630
echo "In addition you can set"
27-
echo " MYSQL_INNODB_CLUSTER_MEMBERS "
31+
echo " MYSQL_INNODB_CLUSTER_MEMBERS"
2832
echo " MYSQL_CREATE_ROUTER_USER"
2933
echo " MYSQL_ROUTER_BOOTSTRAP_EXTRA_OPTIONS"
3034
echo "Exiting."
3135
exit 1
3236
fi
3337

3438
PASSFILE=$(mktemp)
35-
echo "$MYSQL_PASSWORD" > "$PASSFILE"
39+
if [[ -n $MYSQL_PASSWORD_FILE && -f "$MYSQL_PASSWORD_FILE" ]]; then
40+
cat "$MYSQL_PASSWORD_FILE" > "$PASSFILE"
41+
echo "" >> "$PASSFILE"
42+
else
43+
echo "$MYSQL_PASSWORD" > "$PASSFILE"
44+
fi
3645
if [ -z $MYSQL_CREATE_ROUTER_USER ]; then
37-
echo "$MYSQL_PASSWORD" >> "$PASSFILE"
46+
if [[ -n $MYSQL_PASSWORD_FILE && -f "$MYSQL_PASSWORD_FILE" ]]; then
47+
cat "$MYSQL_PASSWORD_FILE" >> "$PASSFILE"
48+
echo "" >> "$PASSFILE"
49+
else
50+
echo "$MYSQL_PASSWORD" >> "$PASSFILE"
51+
fi
3852
MYSQL_CREATE_ROUTER_USER=1
3953
echo "[Entrypoint] MYSQL_CREATE_ROUTER_USER is not set, Router will generate a new account to be used at runtime."
4054
echo "[Entrypoint] Set it to 0 to reuse $MYSQL_USER instead."
4155
elif [ "$MYSQL_CREATE_ROUTER_USER" = "0" ]; then
42-
echo "$MYSQL_PASSWORD" >> "$PASSFILE"
56+
if [[ -n $MYSQL_PASSWORD_FILE && -f "$MYSQL_PASSWORD_FILE" ]]; then
57+
cat "$MYSQL_PASSWORD_FILE" >> "$PASSFILE"
58+
echo "" >> "$PASSFILE"
59+
else
60+
echo "$MYSQL_PASSWORD" >> "$PASSFILE"
61+
fi
4362
echo "[Entrypoint] MYSQL_CREATE_ROUTER_USER is 0, Router will reuse $MYSQL_USER account at runtime"
4463
else
4564
echo "[Entrypoint] MYSQL_CREATE_ROUTER_USER is not 0, Router will generate a new account to be used at runtime"
4665
fi
4766

48-
DEFAULTS_EXTRA_FILE=$(mktemp)
49-
cat >"$DEFAULTS_EXTRA_FILE" <<EOF
67+
if [[ -n $MYSQL_PASSWORD_FILE && -f "$MYSQL_PASSWORD_FILE" ]]; then
68+
DEFAULTS_EXTRA_FILE=$(mktemp)
69+
cat >"$DEFAULTS_EXTRA_FILE" <<EOF
70+
[client]
71+
password="$(cat $MYSQL_PASSWORD_FILE)"
72+
EOF
73+
else
74+
DEFAULTS_EXTRA_FILE=$(mktemp)
75+
cat >"$DEFAULTS_EXTRA_FILE" <<EOF
5076
[client]
5177
password="$MYSQL_PASSWORD"
5278
EOF
79+
fi
5380
unset MYSQL_PASSWORD
81+
5482
max_tries=12
5583
attempt_num=0
5684
until (echo > "/dev/tcp/$MYSQL_HOST/$MYSQL_PORT") >/dev/null 2>&1; do
@@ -89,13 +117,13 @@ EOF
89117
mysqlrouter --bootstrap "$MYSQL_USER@$MYSQL_HOST:$MYSQL_PORT" --directory /tmp/mysqlrouter --force $opt_user $MYSQL_ROUTER_BOOTSTRAP_EXTRA_OPTIONS < "$PASSFILE" || exit 1
90118
fi
91119

120+
rm "$DEFAULTS_EXTRA_FILE"
121+
92122
sed -i -e 's/logging_folder=.*$/logging_folder=/' /tmp/mysqlrouter/mysqlrouter.conf
93123
echo "[Entrypoint] Starting mysql-router."
94124
exec "$@" --config /tmp/mysqlrouter/mysqlrouter.conf
95125

96-
rm -f "$PASSFILE"
97-
rm -f "$DEFAULTS_EXTRA_FILE"
98-
unset DEFAULTS_EXTRA_FILE
126+
rm $PASSFILE
99127
else
100128
exec "$@"
101129
fi

mysql-router/9.1/Dockerfile

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
# Copyright (c) 2018, 2023, Oracle and/or its affiliates.
2+
#
3+
# This program is free software; you can redistribute it and/or modify
4+
# it under the terms of the GNU General Public License as published by
5+
# the Free Software Foundation; version 2 of the License.
6+
#
7+
# This program is distributed in the hope that it will be useful,
8+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
9+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10+
# GNU General Public License for more details.
11+
#
12+
# You should have received a copy of the GNU General Public License
13+
# along with this program; if not, write to the Free Software
14+
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
15+
FROM container-registry.oracle.com/os/oraclelinux:9-slim
16+
17+
ARG MYSQL_CLIENT_PACKAGE=mysql-community-client-9.1.0
18+
ARG MYSQL_ROUTER_PACKAGE=mysql-router-community-9.1.0
19+
ARG CONFIG_PACKAGE_NAME=mysql84-community-release-el9.rpm
20+
ARG REPO_NAME_SERVER=mysql-innovation-community
21+
ARG REPO_NAME_TOOLS=mysql-tools-innovation-community
22+
23+
RUN /usr/sbin/groupadd -g 999 -r mysqlrouter >/dev/null \
24+
&& /usr/sbin/useradd -M -N -u 999 -g mysqlrouter -r -d /var/lib/mysqlrouter -s /bin/false \
25+
-c "MySQL Router" mysqlrouter \
26+
&& rpm -U http://repo.mysql.oraclecorp.com/mysql-uat/repos-stage/$CONFIG_PACKAGE_NAME \
27+
&& microdnf install -y \
28+
--enablerepo=mysql-innovation-community $MYSQL_CLIENT_PACKAGE \
29+
&& microdnf install -y --disablerepo=\* \
30+
--enablerepo=mysql-tools-innovation-community $MYSQL_ROUTER_PACKAGE \
31+
&& microdnf clean all
32+
33+
COPY run.sh /run.sh
34+
HEALTHCHECK \
35+
CMD mysqladmin --port 6446 --protocol TCP ping 2>&1 | grep Access || exit 1
36+
EXPOSE 6446 6447 6448 6449 6450 8443
37+
USER 999:999
38+
ENTRYPOINT ["/run.sh"]
39+
CMD ["mysqlrouter"]

mysql-router/9.1/README.md

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
![logo](https://www.mysql.com/common/logos/logo-mysql-170x115.png)
2+
3+
# What is MySQL Router?
4+
5+
MySQL Router is part of InnoDB cluster, and is lightweight middleware that
6+
provides transparent routing between your application and back-end MySQL
7+
Servers. It can be used for a wide variety of use cases, such as providing high
8+
availability and scalability by effectively routing database traffic to
9+
appropriate back-end MySQL Servers. The pluggable architecture also enables
10+
developers to extend MySQL Router for custom use cases.
11+
12+
# Supported Tags and Respective Dockerfile Links
13+
14+
* MySQL Router 8.0 (tag: [`latest`, `8.0`](https://github.com/mysql/mysql-docker/blob/mysql-router/8.0/Dockerfile)) ([mysql-router/8.0/Dockerfile](https://github.com/mysql/mysql-docker/blob/mysql-router/8.0/Dockerfile))
15+
16+
Images are updated when new MySQL Server maintenance releases and development milestones are published. Please note that non-GA releases are for preview purposes only and should not be used in production setups.
17+
18+
# How to Use the MySQL Router Images
19+
20+
The image currently uses the following mandatory variables:
21+
22+
| Variable | Description |
23+
| ------------------------ | ------------------------------------------- |
24+
| MYSQL_HOST | MySQL host to connect to |
25+
| MYSQL_PORT | Port to use |
26+
| MYSQL_USER | User to connect with |
27+
| MYSQL_PASSWORD | Password to connect with |
28+
29+
Running in a container requires a working InnoDB cluster.
30+
31+
The image uses the following optional variables:
32+
33+
| Variable | Description |
34+
| ------------------------------------ | ------------------------------------------- |
35+
| MYSQL_INNODB_CLUSTER_MEMBERS | Wait for at least this number of cluster instances to be ONLINE |
36+
| MYSQL_CREATE_ROUTER_USER | Whether to create a new account for the Router to use when it's running. Defaults to 1, set to 0 to disable. |
37+
| MYSQL_ROUTER_BOOTSTRAP_EXTRA_OPTIONS | Additional command line options applied while bootstrapping
38+
39+
If supplied the run script waits for the given mysql host to be up, the InnoDB cluster to have
40+
MYSQL_INNODB_CLUSTER_MEMBERS members and then uses the given server for its
41+
bootstrap mode
42+
[Bootstrapping](https://dev.mysql.com/doc/mysql-router/8.0/en/mysql-router-deploying-bootstrapping.html).
43+
44+
The image can be run via:
45+
46+
```
47+
docker run -e MYSQL_HOST=localhost -e MYSQL_PORT=3306 -e MYSQL_USER=mysql -e MYSQL_PASSWORD=mysql -e MYSQL_INNODB_CLUSTER_MEMBERS=3 -ti mysql/mysql-router
48+
```
49+
50+
Additional command line options for running MySQL Router after bootstrap can be passed a command options. For instance you can use a config file from your home directory like this:
51+
52+
```
53+
docker run -e MYSQL_HOST=localhost -e MYSQL_PORT=3306 -e MYSQL_USER=mysql -e MYSQL_PASSWORD=mysql -ti -v $HOME/router-extra.conf:/tmp/router-extra.conf mysql/mysql-router mysqlrouter --extra-config=/tmp/router-extra.conf
54+
```
55+
56+
It can be verified by typing:
57+
58+
```
59+
docker ps
60+
```
61+
62+
The following output should be displayed:
63+
64+
```
65+
4954b1c80be1 mysql-router:8.0 "/run.sh mysqlrouter" About a minute ago Up About a minute (healthy) 6447/tcp, 6448/tcp, 0.0.0.0:6446->6446/tcp, 6449/tcp innodbcluster_mysql-router_1
66+
```
67+
68+
By default the container will run as user 999:999 which maps to mysqlrouter:mysqlrouter inside the container.
69+
70+
# Exposed Ports
71+
72+
The following TCP ports are exposed by the MySQL Router container:
73+
74+
| Port | Description
75+
| ----- | --------------------------------------------------------------------------------------- |
76+
| 6446 | R/W connection port. Clients that connect to this port will be forwarded to the PRIMARY |
77+
| 6447 | R/O connection port. Clients that connect to this port will be forwarded to a SECONDARY |
78+
| 6448 | X Protocol R/W connection port. R/W port for X protocol client connections |
79+
| 6449 | X Protocol R/O connection port. R/O port for X protocol client connections |
80+
| 8443 | HTTPS REST interface port. |
81+
82+
For more information about the REST interface API, see:
83+
84+
https://dev.mysql.com/doc/mysql-router/8.0/en/mysql-router-rest-api-reference.html
85+
86+
For full usage documentation, see:
87+
88+
https://dev.mysql.com/doc/mysql-router/8.0/en/mysql-router-installation-docker.html

0 commit comments

Comments
 (0)