{
  "schemaVersion": "1.0",
  "item": {
    "slug": "mariadb",
    "name": "MariaDB",
    "source": "tencent",
    "type": "skill",
    "category": "数据分析",
    "sourceUrl": "https://clawhub.ai/ivangdavila/mariadb",
    "canonicalUrl": "https://clawhub.ai/ivangdavila/mariadb",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/mariadb",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=mariadb",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-23T16:43:11.935Z",
      "expiresAt": "2026-04-30T16:43:11.935Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=4claw-imageboard",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=4claw-imageboard",
        "contentDisposition": "attachment; filename=\"4claw-imageboard-1.0.1.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/mariadb"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/mariadb",
    "agentPageUrl": "https://openagent3.xyz/skills/mariadb/agent",
    "manifestUrl": "https://openagent3.xyz/skills/mariadb/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/mariadb/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "Character Set",
        "body": "Always use utf8mb4 for tables and connections—full Unicode including emoji\nutf8mb4_unicode_ci for proper linguistic sorting, utf8mb4_bin for byte comparison\nSet connection charset: SET NAMES utf8mb4 or in connection string\nCollation mismatch in JOINs forces conversion—kills index usage"
      },
      {
        "title": "Indexing",
        "body": "TEXT/BLOB columns need prefix length: INDEX (description(100))\nComposite index order matters—(a, b) serves WHERE a=? but not WHERE b=?\nForeign keys auto-create index on child table—but verify with SHOW INDEX\nCovering indexes: include all SELECT columns to avoid table lookup"
      },
      {
        "title": "Sequences",
        "body": "CREATE SEQUENCE seq_name for guaranteed unique IDs across tables\nNEXT VALUE FOR seq_name to get next—survives transaction rollback\nBetter than auto-increment when you need ID before insert\nSETVAL(seq_name, n) to reset—useful for migrations"
      },
      {
        "title": "System Versioning (Temporal Tables)",
        "body": "ALTER TABLE t ADD SYSTEM VERSIONING to track all historical changes\nFOR SYSTEM_TIME AS OF '2024-01-01 00:00:00' queries past state\nFOR SYSTEM_TIME BETWEEN start AND end for change history\nInvisible columns row_start and row_end store validity period"
      },
      {
        "title": "JSON Handling",
        "body": "JSON_VALUE(col, '$.key') extracts scalar, returns NULL if not found\nJSON_QUERY(col, '$.obj') extracts object/array with quotes preserved\nJSON_TABLE() converts JSON array to rows—powerful for unnesting\nJSON_VALID() before insert if column isn't strictly typed"
      },
      {
        "title": "Galera Cluster",
        "body": "All nodes writable—but same-row conflicts cause rollback\nwsrep_sync_wait = 1 before critical reads—ensures node is synced\nKeep transactions small—large transactions increase conflict probability\nwsrep_cluster_size should be odd number—avoids split-brain"
      },
      {
        "title": "Window Functions",
        "body": "ROW_NUMBER() OVER (PARTITION BY x ORDER BY y) for ranking within groups\nLAG(col, 1) OVER (ORDER BY date) for previous row value\nSUM(amount) OVER (ORDER BY date ROWS UNBOUNDED PRECEDING) for running total\nCTEs with WITH cte AS (...) for readable complex queries"
      },
      {
        "title": "Thread Pool",
        "body": "Enable with thread_handling=pool-of-threads—better than thread-per-connection\nthread_pool_size = CPU cores for CPU-bound, higher for I/O-bound\nReduces context switching with many concurrent connections\nMonitor with SHOW STATUS LIKE 'Threadpool%'"
      },
      {
        "title": "Storage Engines",
        "body": "InnoDB default—ACID transactions, row locking, crash recovery\nAria for temporary tables—crash-safe replacement for MyISAM\nMEMORY for caches—data lost on restart, but fast\nCheck engine: SHOW TABLE STATUS WHERE Name='table'"
      },
      {
        "title": "Locking",
        "body": "SELECT ... FOR UPDATE locks rows until commit\nLOCK TABLES t WRITE for DDL-like exclusive access—blocks all other sessions\nDeadlock detection automatic—one transaction rolled back; must retry\ninnodb_lock_wait_timeout default 50s—lower for interactive apps"
      },
      {
        "title": "Query Optimization",
        "body": "EXPLAIN ANALYZE for actual execution times (10.1+)\noptimizer_trace for deep dive: SET optimizer_trace='enabled=on'\nFORCE INDEX (idx) when optimizer chooses wrong index\nSTRAIGHT_JOIN to force join order—last resort"
      },
      {
        "title": "Backup and Recovery",
        "body": "mariadb-dump --single-transaction for consistent backup without locks\nmariadb-backup for hot InnoDB backup—incremental supported\nBinary logs for point-in-time recovery: mysqlbinlog binlog.000001 | mariadb\nTest restores regularly—backups that can't restore aren't backups"
      },
      {
        "title": "Common Errors",
        "body": "\"Too many connections\"—increase max_connections or use connection pool\n\"Lock wait timeout exceeded\"—find blocking query with SHOW ENGINE INNODB STATUS\n\"Row size too large\"—TEXT/BLOB stored off-page, but row pointers have limits\n\"Duplicate entry for key\"—check unique constraints, use ON DUPLICATE KEY UPDATE"
      }
    ],
    "body": "Character Set\nAlways use utf8mb4 for tables and connections—full Unicode including emoji\nutf8mb4_unicode_ci for proper linguistic sorting, utf8mb4_bin for byte comparison\nSet connection charset: SET NAMES utf8mb4 or in connection string\nCollation mismatch in JOINs forces conversion—kills index usage\nIndexing\nTEXT/BLOB columns need prefix length: INDEX (description(100))\nComposite index order matters—(a, b) serves WHERE a=? but not WHERE b=?\nForeign keys auto-create index on child table—but verify with SHOW INDEX\nCovering indexes: include all SELECT columns to avoid table lookup\nSequences\nCREATE SEQUENCE seq_name for guaranteed unique IDs across tables\nNEXT VALUE FOR seq_name to get next—survives transaction rollback\nBetter than auto-increment when you need ID before insert\nSETVAL(seq_name, n) to reset—useful for migrations\nSystem Versioning (Temporal Tables)\nALTER TABLE t ADD SYSTEM VERSIONING to track all historical changes\nFOR SYSTEM_TIME AS OF '2024-01-01 00:00:00' queries past state\nFOR SYSTEM_TIME BETWEEN start AND end for change history\nInvisible columns row_start and row_end store validity period\nJSON Handling\nJSON_VALUE(col, '$.key') extracts scalar, returns NULL if not found\nJSON_QUERY(col, '$.obj') extracts object/array with quotes preserved\nJSON_TABLE() converts JSON array to rows—powerful for unnesting\nJSON_VALID() before insert if column isn't strictly typed\nGalera Cluster\nAll nodes writable—but same-row conflicts cause rollback\nwsrep_sync_wait = 1 before critical reads—ensures node is synced\nKeep transactions small—large transactions increase conflict probability\nwsrep_cluster_size should be odd number—avoids split-brain\nWindow Functions\nROW_NUMBER() OVER (PARTITION BY x ORDER BY y) for ranking within groups\nLAG(col, 1) OVER (ORDER BY date) for previous row value\nSUM(amount) OVER (ORDER BY date ROWS UNBOUNDED PRECEDING) for running total\nCTEs with WITH cte AS (...) for readable complex queries\nThread Pool\nEnable with thread_handling=pool-of-threads—better than thread-per-connection\nthread_pool_size = CPU cores for CPU-bound, higher for I/O-bound\nReduces context switching with many concurrent connections\nMonitor with SHOW STATUS LIKE 'Threadpool%'\nStorage Engines\nInnoDB default—ACID transactions, row locking, crash recovery\nAria for temporary tables—crash-safe replacement for MyISAM\nMEMORY for caches—data lost on restart, but fast\nCheck engine: SHOW TABLE STATUS WHERE Name='table'\nLocking\nSELECT ... FOR UPDATE locks rows until commit\nLOCK TABLES t WRITE for DDL-like exclusive access—blocks all other sessions\nDeadlock detection automatic—one transaction rolled back; must retry\ninnodb_lock_wait_timeout default 50s—lower for interactive apps\nQuery Optimization\nEXPLAIN ANALYZE for actual execution times (10.1+)\noptimizer_trace for deep dive: SET optimizer_trace='enabled=on'\nFORCE INDEX (idx) when optimizer chooses wrong index\nSTRAIGHT_JOIN to force join order—last resort\nBackup and Recovery\nmariadb-dump --single-transaction for consistent backup without locks\nmariadb-backup for hot InnoDB backup—incremental supported\nBinary logs for point-in-time recovery: mysqlbinlog binlog.000001 | mariadb\nTest restores regularly—backups that can't restore aren't backups\nCommon Errors\n\"Too many connections\"—increase max_connections or use connection pool\n\"Lock wait timeout exceeded\"—find blocking query with SHOW ENGINE INNODB STATUS\n\"Row size too large\"—TEXT/BLOB stored off-page, but row pointers have limits\n\"Duplicate entry for key\"—check unique constraints, use ON DUPLICATE KEY UPDATE"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/ivangdavila/mariadb",
    "publisherUrl": "https://clawhub.ai/ivangdavila/mariadb",
    "owner": "ivangdavila",
    "version": "1.0.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/mariadb",
    "downloadUrl": "https://openagent3.xyz/downloads/mariadb",
    "agentUrl": "https://openagent3.xyz/skills/mariadb/agent",
    "manifestUrl": "https://openagent3.xyz/skills/mariadb/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/mariadb/agent.md"
  }
}