{"id":29311566,"url":"https://github.com/wsmaxcy/clusterduck","last_synced_at":"2026-05-16T21:09:44.279Z","repository":{"id":300546100,"uuid":"1006440668","full_name":"wsmaxcy/ClusterDuck","owner":"wsmaxcy","description":"MySQL InnoDB-Cluster GUI Manager","archived":false,"fork":false,"pushed_at":"2025-06-22T09:37:32.000Z","size":169,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-06-22T10:28:53.923Z","etag":null,"topics":["cluster-api","clustering","gui","gui-application","innodb","innodb-cluster","mysql","mysql-connector","mysql-database","mysql-gui","mysql-gui-client"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/wsmaxcy.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-06-22T09:22:40.000Z","updated_at":"2025-06-22T09:39:59.000Z","dependencies_parsed_at":"2025-06-23T18:30:31.827Z","dependency_job_id":null,"html_url":"https://github.com/wsmaxcy/ClusterDuck","commit_stats":null,"previous_names":["wsmaxcy/clusterduck"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/wsmaxcy/ClusterDuck","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wsmaxcy%2FClusterDuck","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wsmaxcy%2FClusterDuck/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wsmaxcy%2FClusterDuck/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wsmaxcy%2FClusterDuck/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/wsmaxcy","download_url":"https://codeload.github.com/wsmaxcy/ClusterDuck/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wsmaxcy%2FClusterDuck/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":264040973,"owners_count":23548077,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cluster-api","clustering","gui","gui-application","innodb","innodb-cluster","mysql","mysql-connector","mysql-database","mysql-gui","mysql-gui-client"],"created_at":"2025-07-07T08:15:13.447Z","updated_at":"2026-05-16T21:09:44.247Z","avatar_url":"https://github.com/wsmaxcy.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ClusterDuck 🐥  \n*A Modern GUI for Managing MySQL InnoDB Clusters*\n\n![ClusterDuck Logo](img/overview2.png)\n\n**ClusterDuck** is a modern, dark-themed GUI built with Python and `customtkinter` to manage and monitor [MySQL InnoDB Clusters](https://dev.mysql.com/doc/mysql-shell/8.0/en/). Featuring real-time LED indicators, a tabbed multi-node interface, safe command presets, and portable `.exe` support — it’s the friendliest duck in your database pond.\n\n---\n\n## 🚀 Features\n\n- ✅ Sleek **dark-mode GUI** using `customtkinter`\n- ✅ Real-time **LED indicators** (green/yellow/red/blue) for node status\n- ✅ **Tabbed layout** for simultaneous multi-node management\n- ✅ **Preloaded MySQL Shell commands** (JS + SQL) with color-coded safety levels\n- ✅ **Custom JS/SQL input** field with live output display\n- ✅ **Safe subprocess handling** (no flashing terminals)\n- ✅ **Fully portable `.exe`** (no installer needed)\n\n---\n\n## 🧰 Preinstalled Commands\n\nClusterDuck includes a wide range of prebuilt administrative and diagnostic commands, color-coded and organized by risk level:\n\n### 🔵 Safe JS Commands\n- ✅ Check Cluster Status  \n  `dba.getCluster().status({ extended: true })`\n- ✅ List Cluster Instances  \n  `dba.getCluster().describe()`\n- ✅ Rescan Topology  \n  `dba.getCluster().rescan()`\n- ✅ Check Instance Health  \n  `dba.checkInstanceConfiguration('\u003cuser\u003e@\u003cnode\u003e')`\n- ✅ Check Global Config  \n  `dba.checkInstanceConfiguration()`\n\n### 🟢 Safe SQL Commands\n- ✅ Show Hostname and Port  \n  `SELECT @@hostname, @@port;`\n- ✅ Show Cluster Members  \n  `SELECT * FROM performance_schema.replication_group_members;`\n- ✅ Show Replication Applier Status  \n  `SELECT * FROM performance_schema.replication_applier_status;`\n- ✅ Show Replication Connection Status  \n  `SELECT * FROM performance_schema.replication_connection_status;`\n- ✅ Check GTID Mode  \n  `SELECT @@gtid_mode;`\n- ✅ Check Binary Log Format  \n  `SELECT @@global.binlog_format;`\n- ✅ Check SSL Settings  \n  `SHOW VARIABLES LIKE '%ssl_mode%';`\n- ✅ MySQL Version  \n  `SELECT VERSION();`\n- ✅ Set Read-Only Mode  \n  `SET GLOBAL super_read_only = ON; SET GLOBAL read_only = ON;`\n- ✅ Set Read-Write Mode  \n  `SET GLOBAL super_read_only = OFF; SET GLOBAL read_only = OFF;`\n- ✅ Start Group Replication  \n  `START GROUP_REPLICATION;`\n\n### ⚠️ Dangerous JS Commands (Yellow)\n- ⚠️ Set Primary Instance  \n  `dba.getCluster().setPrimaryInstance('\u003cnode\u003e')`\n- ⚠️ Rejoin Instance  \n  `dba.getCluster().rejoinInstance('\u003cnode\u003e')`\n- ⚠️ Force Rejoin  \n  `dba.getCluster().rejoinInstance('\u003cnode\u003e', {force: true})`\n- ⚠️ Reboot from Outage  \n  `dba.rebootClusterFromCompleteOutage()`\n- ⚠️ Add Instance (Clone)  \n  `dba.getCluster().addInstance('\u003cuser\u003e@\u003cnode\u003e', {recoveryMethod: 'clone'})`\n- ⚠️ Remove Instance  \n  `dba.getCluster().removeInstance('\u003cuser\u003e@\u003cnode\u003e')`\n\n### 🟥 Dangerous SQL Commands (Red)\n- ⚠️ Stop Group Replication  \n  `STOP GROUP_REPLICATION;`\n\n\u003e Dangerous commands are clearly marked in red or yellow with warning icons and hover tooltips in the UI.\n\n---\n\n## 📸 Screenshots\n\n\u003e Add screenshots in the `img/screenshots/` folder and update the links below.\n\n| Login Dialog | Cluster Overview | Node Detail View |\n|--------------|------------------|------------------|\n| ![Login](img/login.png) | ![Overview](img/overview.png) | ![Node View](img/node-detail.png) |\n\n---\n\n## 📁 Project Structure\n\nInnoDB-Manager/\n\n├── img/\n\n│ ├── icon.png\n\n│ ├── icon.ico\n\n│ ├── greenLED.png\n\n│ ├── yellowLED.png\n\n│ ├── redLED.png\n\n│ ├── blueLED.png\n\n│ └── screenshots/\n\n│ ├── login.png\n\n│ ├── overview.png\n\n│ └── node-detail.png\n\n├── tabbed.py\n\n├── README.md\n\n├── LICENSE\n\n└── dist/\n\n└── ClusterDuck.exe\n\n\n---\n\n## 🔧 Requirements\n\n- **Python 3.9+** (tested on Python 3.12)\n- [`mysqlsh`](https://dev.mysql.com/downloads/shell/) must be installed and available in your system `PATH`\n- **Windows 10/11** recommended (but Linux support possible with modification)\n- Install required libraries:\n  ```bash\n  pip install customtkinter pillow psutil\n\n---\n\n## ▶️ Running from Source\n\n```python\npython ClusterDuck.py\n```\n\n---\n\n## 📦 Build a Standalone .exe\n\nTo create a fully portable executable using PyInstaller:\n\n```bash\npyinstaller --noconfirm --onefile --windowed --icon \"img/icon.ico\" --add-data \"img;img/\" tabbed.py\n\n```\n\n---\n\n## 🐞 Known Issues\n\nRequires mysqlsh in the system PATH\n\nDesigned/tested against MySQL InnoDB Cluster 8.x with GTID enabled\n\nGUI assumes a fully functioning cluster topology with reachable nodes\n\n---\n\n## 📄 License\nMIT License\n\n---\n\n## 📬 Feedback \u0026 Contributions\nSpotted a bug? Have a feature request?\n\nOpen an issue or contribute at:\n🔗 github.com/wsmaxcy/ClusterDuck","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwsmaxcy%2Fclusterduck","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwsmaxcy%2Fclusterduck","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwsmaxcy%2Fclusterduck/lists"}