Skip to content

Commit 6801e69

Browse files
dongwook-chansoulee-devwonkajin
authored
Refactor/docker compose anchors (#449)
* Eliminate `log_slave_updates` system variable, closes #410 - `log_slave_updates` modifies to which file binlog events is written. - The variable is not applicable to python-mysql-replication, because no file is written * Refactor docker-compose.yml to use extension and YAML anchors for improved readability and expandability Changes: - Updated version to 3.4 at which extension for docker compose was first introduced - Use extension to hold common fields and anchors to reference the extensions * fix: use folded block scalar * fix: add volumes to test MariadbStartEncryptionEvent * fix: docker-compose-test mysql server check query * Eliminate log_slave_updates system variable in docker-compose-test.yml * fix: docker-compose settings for mariadb * fix: MYSQL_5_7_CTL_PORT casting * add copy .mariadb --------- Co-authored-by: Soul Lee <[email protected]> Co-authored-by: lre12 <[email protected]>
1 parent a8aa0d9 commit 6801e69

File tree

5 files changed

+94
-41
lines changed

5 files changed

+94
-41
lines changed

docker-compose-test.yml

+51-17
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,56 @@
1-
version: '3.2'
1+
version: '3.4'
2+
3+
x-mysql: &mysql
4+
environment:
5+
MYSQL_ALLOW_EMPTY_PASSWORD: true
6+
command: >
7+
mysqld
8+
--log-bin=mysql-bin.log
9+
--server-id 1
10+
--binlog-format=row
11+
--gtid_mode=on
12+
--enforce-gtid-consistency=on
13+
14+
x-mariadb: &mariadb
15+
environment:
16+
MARIADB_ALLOW_EMPTY_ROOT_PASSWORD: 1
17+
command: >
18+
--server-id=1
19+
--default-authentication-plugin=mysql_native_password
20+
--log-bin=master-bin
21+
--binlog-format=row
22+
223
services:
3-
percona-5.7:
4-
platform: linux/amd64
24+
percona-5.7-ctl:
25+
<<: *mysql
526
image: percona:5.7
6-
environment:
7-
MYSQL_ALLOW_EMPTY_PASSWORD: true
8-
MYSQL_DATABASE: pymysqlreplication_test
927
ports:
10-
- 3306:3306
11-
command: mysqld --log-bin=mysql-bin.log --server-id 1 --binlog-format=row --gtid_mode=on --enforce-gtid-consistency=on --log_slave_updates
12-
restart: always
28+
- "3307:3306"
1329
networks:
1430
- default
1531

16-
percona-5.7-ctl:
32+
percona-5.7:
33+
<<: *mysql
1734
image: percona:5.7
18-
environment:
19-
MYSQL_ALLOW_EMPTY_PASSWORD: true
20-
MYSQL_DATABASE: pymysqlreplication_test
2135
ports:
22-
- 3307:3307
23-
command: mysqld --log-bin=mysql-bin.log --server-id 1 --binlog-format=row --gtid_mode=on --enforce-gtid-consistency=on --log_slave_updates -P 3307
36+
- "3306:3306"
37+
networks:
38+
- default
39+
40+
mariadb-10.6:
41+
<<: *mariadb
42+
image: mariadb:10.6
43+
ports:
44+
- "3308:3306"
45+
volumes:
46+
- type: bind
47+
source: ./.mariadb
48+
target: /opt/key_file
49+
- type: bind
50+
source: ./.mariadb/my.cnf
51+
target: /etc/mysql/my.cnf
52+
networks:
53+
- default
2454

2555
pymysqlreplication:
2656
build:
@@ -30,6 +60,9 @@ services:
3060
BASE_IMAGE: python:3.11-alpine
3161
MYSQL_5_7: percona-5.7
3262
MYSQL_5_7_CTL: percona-5.7-ctl
63+
MYSQL_5_7_CTL_PORT: 3306
64+
MARIADB_10_6: mariadb-10.6
65+
MARIADB_10_6_PORT: 3306
3366

3467
command:
3568
- /bin/sh
@@ -39,7 +72,7 @@ services:
3972
4073
while :
4174
do
42-
if mysql -h percona-5.7 --user=root --execute "USE pymysqlreplication_test;" 2>&1 >/dev/null && mysql -h percona-5.7-ctl --port=3307 --user=root --execute "USE pymysqlreplication_test;" 2>&1 >/dev/null; then
75+
if mysql -h percona-5.7 --user=root --execute "SELECT version();" 2>&1 >/dev/null && mysql -h percona-5.7-ctl --user=root --execute "SELECT version();" 2>&1 >/dev/null; then
4376
break
4477
fi
4578
sleep 1
@@ -56,4 +89,5 @@ services:
5689
- percona-5.7-ctl
5790

5891
networks:
59-
default: {}
92+
default:
93+
driver: bridge

docker-compose.yml

+28-18
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,47 @@
1-
version: '3.2'
1+
version: '3.4'
2+
3+
x-mysql: &mysql
4+
environment:
5+
MYSQL_ALLOW_EMPTY_PASSWORD: true
6+
command: >
7+
mysqld
8+
--log-bin=mysql-bin.log
9+
--server-id 1
10+
--binlog-format=row
11+
--gtid_mode=on
12+
--enforce-gtid-consistency=on
13+
14+
x-mariadb: &mariadb
15+
environment:
16+
MARIADB_ALLOW_EMPTY_ROOT_PASSWORD: 1
17+
command: >
18+
--log-bin=master-bin
19+
--server-id=1
20+
--default-authentication-plugin=mysql_native_password
21+
--binlog-format=row
22+
223
services:
324
percona-5.7:
25+
<<: *mysql
426
image: percona:5.7
5-
environment:
6-
MYSQL_ALLOW_EMPTY_PASSWORD: true
727
ports:
8-
- 3306:3306
9-
command: mysqld --log-bin=mysql-bin.log --server-id 1 --binlog-format=row --gtid_mode=on --enforce-gtid-consistency=on --log_slave_updates
28+
- "3306:3306"
1029

1130
percona-5.7-ctl:
31+
<<: *mysql
1232
image: percona:5.7
13-
environment:
14-
MYSQL_ALLOW_EMPTY_PASSWORD: true
1533
ports:
16-
- 3307:3307
17-
command: mysqld --log-bin=mysql-bin.log --server-id 1 --binlog-format=row --gtid_mode=on --enforce-gtid-consistency=on --log_slave_updates -P 3307
34+
- "3307:3306"
1835

1936
mariadb-10.6:
37+
<<: *mariadb
2038
image: mariadb:10.6
21-
environment:
22-
MARIADB_ALLOW_EMPTY_ROOT_PASSWORD: 1
2339
ports:
2440
- "3308:3306"
25-
command: |
26-
--server-id=1
27-
--default-authentication-plugin=mysql_native_password
28-
--log-bin=master-bin
29-
--binlog-format=row
30-
--log-slave-updates=on
3141
volumes:
3242
- type: bind
3343
source: ./.mariadb
3444
target: /opt/key_file
3545
- type: bind
3646
source: ./.mariadb/my.cnf
37-
target: /etc/mysql/my.cnf
47+
target: /etc/mysql/my.cnf

pymysqlreplication/tests/base.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -125,10 +125,10 @@ class PyMySQLReplicationMariaDbTestCase(PyMySQLReplicationTestCase):
125125
def setUp(self):
126126
# default
127127
self.database = {
128-
"host": "localhost",
128+
"host": os.environ.get("MARIADB_10_6") or "localhost",
129129
"user": "root",
130130
"passwd": "",
131-
"port": 3308,
131+
"port": int(os.environ.get("MARIADB_10_6_PORT") or 3308),
132132
"use_unicode": True,
133133
"charset": "utf8",
134134
"db": "pymysqlreplication_test"

pymysqlreplication/tests/test_basic.py

+2-3
Original file line numberDiff line numberDiff line change
@@ -771,9 +771,8 @@ def setUp(self):
771771
self.stream.close()
772772
ctl_db = copy.copy(self.database)
773773
ctl_db["db"] = None
774-
ctl_db["port"] = 3307
775-
if os.environ.get("MYSQL_5_7_CTL") is not None:
776-
ctl_db["host"] = os.environ.get("MYSQL_5_7_CTL")
774+
ctl_db["port"] = int(os.environ.get("MYSQL_5_7_CTL_PORT") or 3307)
775+
ctl_db["host"] = os.environ.get("MYSQL_5_7_CTL") or "localhost"
777776
self.ctl_conn_control = pymysql.connect(**ctl_db)
778777
self.ctl_conn_control.cursor().execute("DROP DATABASE IF EXISTS pymysqlreplication_test")
779778
self.ctl_conn_control.cursor().execute("CREATE DATABASE pymysqlreplication_test")

test.Dockerfile

+11-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
ARG BASE_IMAGE=${BASE_IMAGE:-python:3.11-alpine}
22
FROM ${BASE_IMAGE}
33

4+
COPY .mariadb .mariadb
45
COPY pymysqlreplication pymysqlreplication
56
COPY README.md README.md
67
COPY setup.py setup.py
@@ -13,4 +14,13 @@ ARG MYSQL_5_7
1314
ENV MYSQL_5_7 ${MYSQL_5_7}
1415

1516
ARG MYSQL_5_7_CTL
16-
ENV MYSQL_5_7_CTL ${MYSQL_5_7_CTL}
17+
ENV MYSQL_5_7_CTL ${MYSQL_5_7_CTL}
18+
19+
ARG MYSQL_5_7_CTL_PORT
20+
ENV MYSQL_5_7_CTL_PORT ${MYSQL_5_7_CTL_PORT}
21+
22+
ARG MARIADB_10_6
23+
ENV MARIADB_10_6 ${MARIADB_10_6}
24+
25+
ARG MARIADB_10_6_PORT
26+
ENV MARIADB_10_6_PORT ${MARIADB_10_6_PORT}

0 commit comments

Comments
 (0)