Skip to content

Instantly share code, notes, and snippets.

@yrcjaya
Created February 16, 2022 15:20
Show Gist options
  • Save yrcjaya/a5966e40644611bede23aa62c5158612 to your computer and use it in GitHub Desktop.
Save yrcjaya/a5966e40644611bede23aa62c5158612 to your computer and use it in GitHub Desktop.
Setup mysql for a project

Project Setup and Teardown script

Requirements

Usage

  1. Rename setup.py to setup
  2. chmod +x setup
  3. ./setup up
  4. Once done with project services setup, then teardown services ./setup down
#!/usr/bin/env python3
from pathlib import Path
import hashlib
import os
import fire
import portpicker
def get_name():
folder = Path(__file__).resolve()
h = hashlib.sha256(bytes(folder))
hash_part = h.hexdigest()[:6]
return f"{folder.parent.name}-{hash_part}"
class Cli:
def __init__(self):
self.container_name = get_name()
self.mysql_path = Path(__file__).resolve().parent/'.mysql'
self.init_path = self.mysql_path/'initdb.d'
self.data_path = self.mysql_path/'data'
def up(self):
"""Start MySQL Server Container"""
port = portpicker.pick_unused_port()
print(f'MySQL Port possibility {port}, but sticking to 3306')
print(f'''podman run --name {self.container_name} -e MYSQL_ROOT_PASSWORD=password -e MYSQL_DATABASE=spark --publish 3306:3306 --publish {port}:3306 --volume {self.init_path}:/docker-entrypoint-initdb.d:Z --volume {self.data_path}:/var/lib/mysql:Z --security-opt label=disable --detach percona:5.6 --lower_case_table_names=1''')
def down(self):
print(f'podman rm -f {self.container_name}')
def logs(self):
print(f'podman logs -f {self.container_name}')
def clean(self):
print(f'sudo rm -rf {self.data_path}')
if __name__ == "__main__":
fire.Fire(Cli())
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment