MariaDB
v1.0.0Write efficient MariaDB queries with proper indexing, temporal tables, and clustering.
Security Scan
OpenClaw
Benign
high confidencePurpose & Capability
Name and description match the runtime instructions: the SKILL.md provides guidance on indexing, temporal tables, clustering, backups, and other MariaDB topics. The registry requires the 'mariadb' binary which is appropriate for a DB helper.
Instruction Scope
Instructions stay within MariaDB administration and query-writing scope and do not request reading arbitrary files or environment secrets. Minor mismatch: the text references additional tools/commands (mariadb-dump, mariadb-backup, mysqlbinlog) that are not listed in requires.bins — this is likely harmless but could cause runtime failures if those binaries are missing.
Install Mechanism
No install spec is provided (instruction-only), so nothing is written to disk or downloaded during install — lowest-risk install model.
Credentials
The skill declares no environment variables, credentials, or config paths. The instructions reference connection strings and SQL commands but do not demand any secrets in the skill manifest — this is proportionate to the described functionality.
Persistence & Privilege
always is false and the skill is user-invocable. It does not request persistent elevated privileges or configuration changes to other skills.
Assessment
This skill appears coherent and safe as a local MariaDB helper. It does presume presence of the mariadb client and also mentions related tools (mariadb-dump, mariadb-backup, mysqlbinlog) — you may need to install those if you want backup/restore guidance. The skill does not request credentials in its manifest, but to actually run queries or backups the agent will need database connection details: only provide DB credentials to the agent if you trust it and prefer doing so in a controlled, non-production environment first. If you want stricter control, test the skill locally and avoid giving persistent secrets to the agent.Like a lobster shell, security has layers — review code before you run it.
Runtime requirements
🦭 Clawdis
OSLinux · macOS · Windows
Binsmariadb
latest
Character Set
- Always use
utf8mb4for tables and connections—full Unicode including emoji utf8mb4_unicode_cifor proper linguistic sorting,utf8mb4_binfor byte comparison- Set connection charset:
SET NAMES utf8mb4or in connection string - Collation mismatch in JOINs forces conversion—kills index usage
Indexing
- TEXT/BLOB columns need prefix length:
INDEX (description(100)) - Composite index order matters—
(a, b)servesWHERE a=?but notWHERE b=? - Foreign keys auto-create index on child table—but verify with
SHOW INDEX - Covering indexes: include all SELECT columns to avoid table lookup
Sequences
CREATE SEQUENCE seq_namefor guaranteed unique IDs across tablesNEXT VALUE FOR seq_nameto get next—survives transaction rollback- Better than auto-increment when you need ID before insert
SETVAL(seq_name, n)to reset—useful for migrations
System Versioning (Temporal Tables)
ALTER TABLE t ADD SYSTEM VERSIONINGto track all historical changesFOR SYSTEM_TIME AS OF '2024-01-01 00:00:00'queries past stateFOR SYSTEM_TIME BETWEEN start AND endfor change history- Invisible columns
row_startandrow_endstore validity period
JSON Handling
JSON_VALUE(col, '$.key')extracts scalar, returns NULL if not foundJSON_QUERY(col, '$.obj')extracts object/array with quotes preservedJSON_TABLE()converts JSON array to rows—powerful for unnestingJSON_VALID()before insert if column isn't strictly typed
Galera Cluster
- All nodes writable—but same-row conflicts cause rollback
wsrep_sync_wait = 1before critical reads—ensures node is synced- Keep transactions small—large transactions increase conflict probability
wsrep_cluster_sizeshould be odd number—avoids split-brain
Window Functions
ROW_NUMBER() OVER (PARTITION BY x ORDER BY y)for ranking within groupsLAG(col, 1) OVER (ORDER BY date)for previous row valueSUM(amount) OVER (ORDER BY date ROWS UNBOUNDED PRECEDING)for running total- CTEs with
WITH cte AS (...)for readable complex queries
Thread Pool
- Enable with
thread_handling=pool-of-threads—better than thread-per-connection thread_pool_size= CPU cores for CPU-bound, higher for I/O-bound- Reduces context switching with many concurrent connections
- Monitor with
SHOW STATUS LIKE 'Threadpool%'
Storage Engines
- InnoDB default—ACID transactions, row locking, crash recovery
- Aria for temporary tables—crash-safe replacement for MyISAM
- MEMORY for caches—data lost on restart, but fast
- Check engine:
SHOW TABLE STATUS WHERE Name='table'
Locking
SELECT ... FOR UPDATElocks rows until commitLOCK TABLES t WRITEfor DDL-like exclusive access—blocks all other sessions- Deadlock detection automatic—one transaction rolled back; must retry
innodb_lock_wait_timeoutdefault 50s—lower for interactive apps
Query Optimization
EXPLAIN ANALYZEfor actual execution times (10.1+)optimizer_tracefor deep dive:SET optimizer_trace='enabled=on'FORCE INDEX (idx)when optimizer chooses wrong indexSTRAIGHT_JOINto force join order—last resort
Backup and Recovery
mariadb-dump --single-transactionfor consistent backup without locksmariadb-backupfor hot InnoDB backup—incremental supported- Binary logs for point-in-time recovery:
mysqlbinlog binlog.000001 | mariadb - Test restores regularly—backups that can't restore aren't backups
Common Errors
- "Too many connections"—increase
max_connectionsor use connection pool - "Lock wait timeout exceeded"—find blocking query with
SHOW ENGINE INNODB STATUS - "Row size too large"—TEXT/BLOB stored off-page, but row pointers have limits
- "Duplicate entry for key"—check unique constraints, use
ON DUPLICATE KEY UPDATE
Comments
Loading comments...
