sqltool logo

# sqltool Local MySQL/MariaDB instance manager for development. No containers, no systemd services - just isolated database instances that run when you need them. ## Features - **No containers** - runs mysqld directly as your user - **Isolated instances** - each project gets its own data directory, socket, port, and logs - **No auto-start** - databases only run when you start them - **Multi-distro support** - auto-detects your distro and installs MariaDB if needed - **Simple workflow** - add, start, stop, backup, restore, clone ## Requirements - Perl 5 (pre-installed on most systems) - MariaDB or MySQL (auto-installed if missing) ## Installation ### macOS (Homebrew) ```bash brew tap lucianofedericopereira/sqltool brew install sqltool ``` ### Linux ```bash git clone https://github.com/lucianofedericopereira/sqltool.git cd sqltool chmod +x sqltool sudo cp sqltool /usr/local/bin/ ``` Or just run it from anywhere: ```bash ./sqltool help ``` ## Quick Demo Run the included demo script to see sqltool in action: ```bash ./tryme.sh ``` This will: 1. Create a test instance called `demo` 2. Start it 3. Create a sample table with data 4. Make a backup 5. Stop the instance After the demo, clean up with `./sqltool remove demo`. ## Usage ```bash # Create a new database instance sqltool add myproject # Start it sqltool start myproject # Connect mysql -u myproject -p -S ~/sql/myproject/data/mysql.sock # or via TCP mysql -u myproject -p -h 127.0.0.1 -P 3307 # Stop when done sqltool stop myproject # See all instances sqltool list ``` ## Commands | Command | Description | |---------|-------------| | `add ` | Create new database instance | | `remove ` | Delete instance and all data | | `start ` | Start instance | | `stop ` | Stop instance | | `list` | List all instances | | `info ` | Show instance details | | `port ` | Show port number | | `logs ` | Show recent error logs | | `backup ` | Create SQL backup | | `restore ` | Restore from backup | | `clone ` | Clone an instance | | `status ` | Quick status check | | `help` | Show help | ## Directory Structure All data is stored in `~/sql/`: ``` ~/sql/ ├── myproject/ │ ├── data/ # MySQL data files │ │ └── mysql.sock # Unix socket │ ├── etc/ │ │ └── my.cnf # Instance config │ ├── logs/ │ │ └── error.log # Error log │ └── scripts/ │ ├── start # Start script │ └── stop # Stop script ├── anotherproject/ │ └── ... └── backups/ # SQL backups ``` ## Supported Systems Auto-detection and installation works on: - **macOS**: via Homebrew (Apple Silicon and Intel) - **Debian/Ubuntu** family: Debian, Ubuntu, Linux Mint, Pop!_OS, elementary OS - **Red Hat** family: Fedora, RHEL, CentOS, Rocky Linux, AlmaLinux - **Arch** family: Arch Linux, Manjaro - **SUSE** family: openSUSE, SUSE - **Others**: Void Linux, Alpine Linux For other systems, install MariaDB manually first. ## Why Perl? Perl is the right tool for this job: - **Pre-installed everywhere** - available on virtually every GNU/Linux system out of the box, from Debian to Arch to Alpine - **No setup required** - no `pip install`, no `npm install`, no `cargo build`, no virtual environments, no dependency hell - **Uses only core modules** - File::Path, File::Basename, POSIX are part of Perl's standard library since forever - **Single file distribution** - copy one file, make it executable, done - **Battle-tested stability** - Perl scripts written 20 years ago still run today without modification - **Fast startup** - instant execution, no JIT warm-up, no interpreter initialization overhead - **Excellent for system tasks** - process management, file operations, and text processing are Perl's bread and butter ### The Unix tradition Perl follows the Unix philosophy that shaped GNU/Linux: small, focused tools that do one thing well. Like `grep`, `awk`, and `sed` before it, Perl was designed for text processing and system administration - the same tasks this tool performs. Classic sysadmin tools have always been scripts: - `autoconf`, `automake` - Perl and shell - `git-send-email` - Perl - `debhelper` - Perl - Countless system utilities in `/usr/bin` - Perl, shell, awk This isn't legacy - it's proven engineering. These tools have managed millions of servers for decades. Perl is part of the GNU/Linux ecosystem in a way that newer languages simply aren't. ### Why this matters today In 2026, installing a simple CLI tool often means: - Python: create venv, pip install dependencies, hope nothing conflicts with system Python - Node: npm install, node_modules bloat, version conflicts - Rust/Go: compile step, or trust pre-built binaries With Perl: ```bash chmod +x sqltool ./sqltool add myproject ``` That's it. Works on a fresh Debian install. Works on a minimal Alpine container. Works on your colleague's Fedora laptop. No `pyproject.toml`, no `package.json`, no build artifacts. For a CLI tool that manages system processes and files, Perl hits the sweet spot between shell scripts (too limited for complex logic) and heavier languages (unnecessary complexity for this use case). ## Default Credentials Each instance creates: - **Database**: `` - **User**: `` - **Password**: `admin1234` - **Port**: 3307 (increments for each new instance) ### Security Note The default password `admin1234` is meant for **local development only**. These instances bind to `127.0.0.1` by default and are not accessible from the network. If you need to change the password or create additional users, connect as root: ```bash mysql -u root -S ~/sql/myproject/data/mysql.sock ``` Then run: ```sql ALTER USER 'myproject'@'localhost' IDENTIFIED BY 'your_secure_password'; FLUSH PRIVILEGES; ``` **Never expose these instances to the network without proper security configuration.** ## License LGPL-2.1 - See source file for details. ## Author Luciano Federico Pereira