2024-01-27 04:39:18 +00:00
|
|
|
# MySQL Proxy
|
|
|
|
|
2024-02-07 15:21:14 +00:00
|
|
|
## Usage with docker-compose
|
2024-01-27 04:39:18 +00:00
|
|
|
|
|
|
|
without
|
2024-02-07 15:21:14 +00:00
|
|
|
|
|
|
|
```yaml
|
|
|
|
version: "2"
|
2024-01-27 04:39:18 +00:00
|
|
|
|
|
|
|
services:
|
|
|
|
db:
|
|
|
|
image: mysql:8.0.0
|
|
|
|
restart: always
|
|
|
|
ports:
|
|
|
|
- "3307:3306" #for external connection
|
|
|
|
volumes:
|
|
|
|
- ../mysql-data/db:/var/lib/mysql #mysql-data
|
|
|
|
environment:
|
|
|
|
MYSQL_ROOT_PASSWORD: password
|
|
|
|
MYSQL_DATABASE: dbuser
|
|
|
|
MYSQL_USER: dbuser
|
|
|
|
MYSQL_PASSWORD: password
|
|
|
|
```
|
|
|
|
|
|
|
|
within
|
2024-02-07 15:21:14 +00:00
|
|
|
|
|
|
|
```yaml
|
|
|
|
version: "2"
|
2024-01-27 04:39:18 +00:00
|
|
|
|
|
|
|
services:
|
|
|
|
mysql:
|
|
|
|
image: mysql:8.0.0
|
|
|
|
restart: always
|
|
|
|
expose:
|
|
|
|
- "3306" #for service mysql-proxy
|
|
|
|
ports:
|
|
|
|
- "3307:3306" #for external connection
|
|
|
|
volumes:
|
|
|
|
- ../mysql-data/db:/var/lib/mysql #mysql-data
|
|
|
|
environment:
|
|
|
|
MYSQL_ROOT_PASSWORD: password
|
|
|
|
MYSQL_DATABASE: dbuser
|
|
|
|
MYSQL_USER: dbuser
|
|
|
|
MYSQL_PASSWORD: password
|
|
|
|
db:
|
|
|
|
image: matthewbaggett/mysql-proxy
|
|
|
|
expose:
|
|
|
|
- "3306" #for service php
|
|
|
|
ports:
|
|
|
|
- "3308:3306" #for external connection
|
|
|
|
restart: always
|
2024-02-07 15:21:14 +00:00
|
|
|
volumes:
|
2024-01-27 04:39:18 +00:00
|
|
|
- ../mysql-proxy-conf:/opt/mysql-proxy/conf
|
|
|
|
environment:
|
|
|
|
PROXY_DB_PORT: 3306
|
|
|
|
REMOTE_DB_HOST: mysql
|
|
|
|
REMOTE_DB_PORT: 3306
|
|
|
|
LUA_SCRIPT: "/opt/mysql-proxy/conf/main.lua"
|
|
|
|
depends_on:
|
|
|
|
- mysql
|
|
|
|
```
|
|
|
|
|
2024-02-07 15:21:14 +00:00
|
|
|
## Query to stdout
|
|
|
|
|
2024-01-27 04:39:18 +00:00
|
|
|
For `docker-compose up` without `-d` (`../mysql-proxy/main.lua`)
|
2024-02-07 15:21:14 +00:00
|
|
|
|
|
|
|
```lua
|
2024-01-27 04:39:18 +00:00
|
|
|
function read_query(packet)
|
|
|
|
if string.byte(packet) == proxy.COM_QUERY then
|
|
|
|
print(string.sub(packet, 2))
|
|
|
|
end
|
|
|
|
end
|
|
|
|
```
|
|
|
|
|
2024-02-07 15:21:14 +00:00
|
|
|
## Query logging for mysql-proxy
|
|
|
|
|
|
|
|
```yaml
|
|
|
|
volumes:
|
|
|
|
- ../mysql-proxy-conf:/opt/mysql-proxy/conf
|
|
|
|
- ../mysql-proxy-logs:/opt/mysql-proxy/logs
|
|
|
|
environment:
|
|
|
|
PROXY_DB_PORT: 3306
|
|
|
|
REMOTE_DB_HOST: mysql
|
|
|
|
REMOTE_DB_PORT: 3306
|
|
|
|
LUA_SCRIPT: "/opt/mysql-proxy/conf/log.lua"
|
|
|
|
LOG_FILE: "/opt/mysql-proxy/logs/mysql.log"
|
2024-01-27 04:39:18 +00:00
|
|
|
```
|
|
|
|
|
|
|
|
`/mysql-proxy-conf/log.lua` https://gist.github.com/simonw/1039751
|
2024-02-07 15:21:14 +00:00
|
|
|
|
|
|
|
```lua
|
2024-01-27 04:39:18 +00:00
|
|
|
local log_file = os.getenv("LOG_FILE")
|
|
|
|
|
|
|
|
local fh = io.open(log_file, "a+")
|
|
|
|
|
|
|
|
function read_query( packet )
|
|
|
|
if string.byte(packet) == proxy.COM_QUERY then
|
|
|
|
local query = string.sub(packet, 2)
|
2024-02-07 15:21:14 +00:00
|
|
|
fh:write( string.format("%s %6d -- %s \n",
|
|
|
|
os.date('%Y-%m-%d %H:%M:%S'),
|
|
|
|
proxy.connection.server["thread_id"],
|
|
|
|
query))
|
2024-01-27 04:39:18 +00:00
|
|
|
fh:flush()
|
|
|
|
end
|
|
|
|
end
|
|
|
|
```
|
2024-02-07 15:21:14 +00:00
|
|
|
|
|
|
|
## thanks
|
2024-01-27 04:39:18 +00:00
|
|
|
|
|
|
|
https://hub.docker.com/r/zwxajh/mysql-proxy
|
|
|
|
https://hub.docker.com/r/gediminaspuksmys/mysqlproxy/
|
|
|
|
|
2024-02-07 15:21:14 +00:00
|
|
|
## logrotate
|
|
|
|
|
2024-01-27 04:39:18 +00:00
|
|
|
The image can be expand with `logrotate`
|
|
|
|
Config file `/etc/logrotate.d/mysql-proxy` (approximate)
|
|
|
|
|
2024-02-07 15:21:14 +00:00
|
|
|
```text
|
2024-01-27 04:39:18 +00:00
|
|
|
/opt/mysql-proxy/mysql.log {
|
|
|
|
weekly
|
|
|
|
missingok
|
|
|
|
rotate 35600
|
|
|
|
compress
|
|
|
|
delaycompress
|
|
|
|
notifempty
|
2024-02-07 15:21:14 +00:00
|
|
|
create 666 root root
|
2024-01-27 04:39:18 +00:00
|
|
|
postrotate
|
|
|
|
/etc/init.d/mysql-proxy reload > /dev/null
|
|
|
|
endscript
|
|
|
|
}
|
|
|
|
```
|
|
|
|
|
2024-02-07 15:21:14 +00:00
|
|
|
## troubleshooting
|
|
|
|
|
2024-01-27 04:39:18 +00:00
|
|
|
If you can't create the chain `mysql` -> `mysql-proxy` -> `external client liten 0.0.0.0:3308`
|
|
|
|
check extends ports on the `mysql` service and/or add `expose` directly
|
2024-02-07 15:21:14 +00:00
|
|
|
|
|
|
|
```yaml
|
|
|
|
expose:
|
|
|
|
- "3306" #for service mysql-proxy
|
2024-01-27 04:39:18 +00:00
|
|
|
```
|
|
|
|
|
2024-02-07 15:21:14 +00:00
|
|
|
> note: Log send to file with delay (buffering mechanism). You can restart the container for get the log immediately.
|