OpenSRE uses MySQL diagnostics to investigate database issues — checking server health, surfacing slow queries, monitoring replication status, and analyzing table statistics. Queries are wrapped as read-only.
CREATE USER 'opensre_readonly'@'%' IDENTIFIED BY 'secure-password';GRANT PROCESS ON *.* TO 'opensre_readonly'@'%';GRANT REPLICATION CLIENT ON *.* TO 'opensre_readonly'@'%';GRANT SELECT ON performance_schema.* TO 'opensre_readonly'@'%';GRANT SELECT ON your_database.* TO 'opensre_readonly'@'%';FLUSH PRIVILEGES;
Three notes on these grants, each confirmed against a real server:
information_schema needs no explicit grant — MySQL exposes it automatically based on a
user’s other privileges. GRANT SELECT ON information_schema.* is rejected outright
(ERROR 1044) and aborts the script before later grants run.
The grant on the target database (MYSQL_DATABASE) is required — the connector
selects it as the default schema on connect, and without it every tool call fails with
Access denied ... to database.
REPLICATION CLIENT is required for get_mysql_replication_status (SHOW REPLICA STATUS
/ SHOW SLAVE STATUS) — without it, that one tool returns an access-denied error even
though integrations verify mysql and the other four tools pass.
performance_schema is enabled by default in MySQL 5.7+. Slow query data will not be available if it has been explicitly disabled in my.cnf.
Wait for it to become healthy, then create the read-only user and a table to inspect:
i=0until docker logs mysql-dev 2>&1 | grep -q "ready for connections.*port: 3306"; do i=$((i + 1)) [ "$i" -ge 30 ] && { echo "ERROR: MySQL never became ready" >&2; exit 1; } sleep 2done
docker exec mysql-dev mysql -uroot -prootpass -e "CREATE USER 'opensre_readonly'@'%' IDENTIFIED BY 'secure-password';GRANT PROCESS ON *.* TO 'opensre_readonly'@'%';GRANT REPLICATION CLIENT ON *.* TO 'opensre_readonly'@'%';GRANT SELECT ON performance_schema.* TO 'opensre_readonly'@'%';GRANT SELECT ON app_db.* TO 'opensre_readonly'@'%';FLUSH PRIVILEGES;CREATE TABLE app_db.orders (id INT PRIMARY KEY, amount DECIMAL(10,2));INSERT INTO app_db.orders VALUES (1, 42.50), (2, 17.00);"
SERVICE │ SOURCE │ STATUS │ DETAILmysql │ local env │ ✓ passed │ Connected to MySQL 8.0.46 │ │ │ target database: app_db.
Chat sessions only treat an integration as active once the store resolution has something to fall through to env vars with — an untouched ~/.opensre/integrations.json with an unrelated integration in it blocks env-var fallback entirely. Point OPENSRE_INTEGRATIONS_STORE_PATH at an empty, valid store instead, so your real config is never read or written and the exported MYSQL_* vars above are the only source of credentials:
A literal zero-byte file does not work here — the store loader expects valid JSON and raises on an empty read, so this writes an explicitly empty (but valid) store rather than just creating the file with mktemp alone.Kick off a long-running query so there is something real to investigate, then ask the agent:
docker exec -d mysql-dev mysql -uroot -prootpass -e "SELECT SLEEP(30);"opensre
Ask: Is anything blocking connections on the app_db MySQL instance?Against this exact local instance the agent calls all 5 registered tools — current
processes, server status, slow queries, table stats, and replication status — and
correctly identifies the synthetic SELECT SLEEP(30) probe as the only long-running
query, with every other health signal clean. An empty store makes the session fall
through to env-var resolution for every integration, not just MySQL — if your shell
already resolves another integration from its own env vars, it rides along too
(harmless).Teardown — remove the demo store file and unset every demo variable, so nothing lingers in the shell to affect a later command:
Use a dedicated read-only user — avoid root credentials.
Prefer MYSQL_SSL_MODE=required in production.
Restrict the user to specific hosts rather than '%' where possible.
Store credentials in .env or your secret manager — not in source control.
Was this page helpful?
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"OpenSRE Documentation","colors":{"primary":"#000000","light":"#FFFFFF","dark":"#000000"},"logo":{"light":"https://mintcdn.com/tracer/rmdYtNSoc9Q5D-5B/images/opensre-logo-black.svg?fit=max\u0026auto=format\u0026n=rmdYtNSoc9Q5D-5B\u0026q=85\u0026s=7ea8db5a1f8e1665db7544632022e298","dark":"https://mintcdn.com/tracer/rmdYtNSoc9Q5D-5B/images/opensre-logo-white.svg?fit=max\u0026auto=format\u0026n=rmdYtNSoc9Q5D-5B\u0026q=85\u0026s=cb153f8bae517d3cea2b823ad2e51327"},"favicon":"https://mintcdn.com/tracer/iKd9uDADI-KBLmoJ/favicon.ico?fit=max\u0026auto=format\u0026n=iKd9uDADI-KBLmoJ\u0026q=85\u0026s=cf78c0f1195ee204bf1022d69a921204","navbar":{"links":[{"icon":"discord","href":"https://discord.gg/opensre","label":"Discord"},{"icon":"box","href":"https://github.com/Tracer-Cloud/opensre/releases","label":"Releases"},{"icon":"github","href":"https://github.com/Tracer-Cloud/opensre","label":"GitHub"}]},"footer":{"socials":{"website":"https://www.opensre.com","github":"https://github.com/Tracer-Cloud/opensre","linkedin":"https://linkedin.com/company/tracercloud","discord":"https://discord.gg/opensre"}},"seo":{"metatags":{},"indexing":"all"},"integrations":{"hotjar":{"hjid":"6568352","hjsv":"6"},"posthog":{"apiKey":"phc_zutpVhmQw7oUmMkbawKNdYCKQWjpfASATtf5ywB75W2","apiHost":"https://us.i.posthog.com","sessionRecording":true}},"contextual":{"options":[],"display":"header"},"interaction":{"drilldown":false},"styling":{"latex":false},"navigation":{"directory":"card","pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"tracer","hasAudioNarration":false,"actualSubdomain":"tracer","customDomains":["opensre.com"],"gitSource":{"type":"github","owner":"tracer-cloud","repo":"opensre","deployBranch":"main","contentDirectory":"docs","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ae8e7d29a7f94b38af35926","collectionId":"54b1096e-9d7c-4398-93e1-59fb3c5b4cb8","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ae8e7d29a7f94b38af35926"},"feedback":{"thumbs":true},"entitlements":{"AI_CHAT":{"status":"DISABLED"}},"buildId":"6ae8e7d29a7f94b38af35926","clientVersion":"0.0.4054","searchFilterCounts":[{"language":"default","tag":"Integrations","count":80},{"language":"default","tag":"Monitoring","count":16},{"language":"default","tag":"Databases","count":13},{"language":"default","tag":"Cloud","count":12},{"language":"default","tag":"Code and CI","count":12},{"language":"default","tag":"Get started","count":10},{"language":"default","tag":"Platform","count":10},{"language":"default","tag":"Messaging","count":9},{"language":"default","tag":"Incidents","count":8},{"language":"default","tag":"Workflows","count":6}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableAskAiSearchBar":false},"basePath":"/docs","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"custom.css","href":"/docs/_mintlify/custom/tracer/5463e43fad15ff95/custom.css"},{"filePath":"sidebar.css","content":":root{--opensre-sidebar-muted:#737373;--opensre-sidebar-link:#a3a3a3;--opensre-sidebar-link-hover:#e5e5e5;--opensre-sidebar-active-bg:rgba(255, 255, 255, 0.08)}:root:not(.dark){--opensre-sidebar-muted:#a3a3a3;--opensre-sidebar-link:#525252;--opensre-sidebar-link-hover:#171717;--opensre-sidebar-active-bg:rgba(0, 0, 0, 0.06)}#navigation-items .sidebar-group-header,#navigation-items .sidebar-group-header h5,#navigation-items [class*=sidebar-group-header],#sidebar .sidebar-group-header,#sidebar .sidebar-group-header h5,#sidebar [class*=SidebarGroup]>:first-child,#sidebar [class*=sidebar-group-header]{font-family:\"Britti Sans Trial\",sans-serif!important;font-size:11px!important;font-weight:600!important;letter-spacing:.08em!important;text-transform:uppercase!important;line-height:1.4!important;color:var(--opensre-sidebar-muted)!important;margin-top:1.25rem!important;margin-bottom:.35rem!important;padding-top:.25rem!important}#navigation-items .sidebar-group:first-child .sidebar-group-header,#sidebar .sidebar-group:first-child .sidebar-group-header,#sidebar nav>.sidebar-group:first-child .sidebar-group-header{margin-top:.25rem!important}#navigation-items a:not([href*=sign-up]),#sidebar a:not([href*=sign-up]){font-family:\"Britti Sans Trial\",sans-serif!important;font-size:14px!important;font-weight:400!important;letter-spacing:normal!important;color:var(--opensre-sidebar-link)!important;border-radius:.375rem!important}#navigation-items a:not([href*=sign-up]):hover,#sidebar a:not([href*=sign-up]):hover{color:var(--opensre-sidebar-link-hover)!important}#navigation-items [data-active=true]>a,#navigation-items a.active,#navigation-items a[aria-current=page],#navigation-items a[data-active=true],#navigation-items li[data-active=true]>a,#sidebar [data-active=true]>a,#sidebar a.active,#sidebar a[aria-current=page],#sidebar a[data-active=true],#sidebar li[data-active=true]>a{color:#fff!important;background:var(--opensre-sidebar-active-bg)!important;font-weight:500!important}:root:not(.dark) #navigation-items [data-active=true]>a,:root:not(.dark) #navigation-items a.active,:root:not(.dark) #navigation-items a[aria-current=page],:root:not(.dark) #navigation-items a[data-active=true],:root:not(.dark) #navigation-items li[data-active=true]>a,:root:not(.dark) #sidebar [data-active=true]>a,:root:not(.dark) #sidebar a.active,:root:not(.dark) #sidebar a[aria-current=page],:root:not(.dark) #sidebar a[data-active=true],:root:not(.dark) #sidebar li[data-active=true]>a{color:#171717!important}header img[src*=\"Tracer-Head-Black.png\"],header img[src*=\"Tracer-Head-White.png\"],nav img[src*=\"Tracer-Head-Black.png\"],nav img[src*=\"Tracer-Head-White.png\"]{width:1rem!important;height:1rem!important;object-fit:contain!important}html.dark img[src*=\"Tracer-Head-Black.png\"]{filter:brightness(0) invert(1)!important}.toc-custom-actions{margin-top:.75rem;padding-top:.75rem;border-top:1px solid rgba(0,0,0,.1)}html.dark .toc-custom-actions{border-top-color:rgba(255,255,255,.1)}.toc-custom-action{display:flex;align-items:center;gap:.5rem;padding-left:.25rem;font-size:.875rem;line-height:1.75rem;color:inherit}.toc-custom-action span{display:inline-block}#table-of-contents-content,[class*=table-of-contents],[data-testid=table-of-contents],nav[aria-label*=\"Table of contents\"]{padding-left:0!important}#table-of-contents-content ul,[class*=table-of-contents] ul,[data-testid=table-of-contents] ul,nav[aria-label*=\"Table of contents\"] ul{padding-left:0!important;margin-left:0!important}#table-of-contents-content a,[class*=table-of-contents] a,[data-testid=table-of-contents] a,nav[aria-label*=\"Table of contents\"] a{padding-left:.25rem!important;margin-left:0!important}[class*=right-sidebar] #table-of-contents-content,[class*=right-sidebar] [class*=table-of-contents],[class*=right-sidebar] [data-testid=table-of-contents],[class*=right-sidebar] nav[aria-label*=\"Table of contents\"]{text-align:left!important;align-items:flex-start!important;justify-content:flex-start!important}[class*=right-sidebar] #table-of-contents-content a,[class*=right-sidebar] [class*=table-of-contents] a,[class*=right-sidebar] [data-testid=table-of-contents] a,[class*=right-sidebar] nav[aria-label*=\"Table of contents\"] a{display:block!important;width:100%!important;text-align:left!important}"}],"page":{"pagePath":"integrations/databases/mysql","slug":"/integrations/databases/mysql","pageMetadata":{"title":"MySQL","description":"Connect MySQL so OpenSRE can diagnose database issues","href":"/integrations/databases/mysql"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Connect MySQL so OpenSRE can diagnose database issues\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={code:`code`,em:`em`,li:`li`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,Heading,Info,Table}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Info)_missingMdxReference(`Info`,true);if(!Table)_missingMdxReference(`Table`,true);return _jsxs(_Fragment,{children:[_jsx(Heading,{level:`2`,id:`overview`,children:`Overview`}),`\n`,_jsx(_components.p,{children:`OpenSRE uses MySQL diagnostics to investigate database issues — checking server health, surfacing slow queries, monitoring replication status, and analyzing table statistics. Queries are wrapped as read-only.`}),`\n`,_jsx(Heading,{level:`2`,id:`prerequisites`,children:`Prerequisites`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`MySQL 5.7+ (8.0+ recommended for full `,_jsx(_components.code,{children:`performance_schema`}),` support)`]}),`\n`,_jsx(_components.li,{children:`Network access from the OpenSRE environment to your MySQL instance`}),`\n`,_jsxs(_components.li,{children:[`A read-only user with access to `,_jsx(_components.code,{children:`information_schema`}),` and `,_jsx(_components.code,{children:`performance_schema`})]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`setup`,children:`Setup`}),`\n`,_jsx(Heading,{level:`3`,id:`option-1-interactive-cli`,children:`Option 1: Interactive CLI`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`opensre`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` integrations`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` setup`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` mysql`})]}),`\n`]})})}),`\n`,_jsx(Heading,{level:`3`,id:`option-2-environment-variables`,children:`Option 2: Environment variables`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`6`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`6`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`MYSQL_HOST`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`your-mysql-host`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`MYSQL_PORT`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`3306`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`MYSQL_DATABASE`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`your-database`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`MYSQL_USERNAME`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`opensre_readonly`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`MYSQL_PASSWORD`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`your-password`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`MYSQL_SSL_MODE`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`preferred`}),_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` # preferred, required, or disabled`})]}),`\n`]})})}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Variable`}),_jsx(_components.th,{children:`Default`}),_jsx(_components.th,{children:`Description`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`MYSQL_HOST`})}),_jsx(_components.td,{children:`—`}),_jsxs(_components.td,{children:[_jsx(_components.strong,{children:`Required.`}),` MySQL hostname or IP`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`MYSQL_PORT`})}),_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`3306`})}),_jsx(_components.td,{children:`MySQL port`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`MYSQL_DATABASE`})}),_jsx(_components.td,{children:`—`}),_jsxs(_components.td,{children:[_jsx(_components.strong,{children:`Required.`}),` Target database`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`MYSQL_USERNAME`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`root`})}),_jsx(_components.td,{children:`Username`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`MYSQL_PASSWORD`})}),_jsx(_components.td,{children:_jsx(_components.em,{children:`(empty)`})}),_jsx(_components.td,{children:`Password`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`MYSQL_SSL_MODE`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`preferred`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`preferred`}),` (no cert verify), `,_jsx(_components.code,{children:`required`}),`, or `,_jsx(_components.code,{children:`disabled`})]})]})]})]}),`\n`,_jsx(Heading,{level:`3`,id:`option-3-persistent-store`,children:`Option 3: Persistent store`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`18`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`18`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"version\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`1`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"integrations\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: [`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"id\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"mysql-prod\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"service\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"mysql\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"status\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"active\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"credentials\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"host\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"prod-primary.mysql.example.com\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"port\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`3306`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"database\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"application_db\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"username\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"opensre_readonly\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"password\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"your-password\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"ssl_mode\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"preferred\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsx(Heading,{level:`2`,id:`credentials`,children:`Credentials`}),`\n`,_jsx(Heading,{level:`3`,id:`creating-a-read-only-user`,children:`Creating a read-only user`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`6`,language:`sql`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`sql`,children:_jsxs(_components.code,{language:`sql`,numberOfLines:`6`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`CREATE`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` USER`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` '`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`opensre_readonly`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`'@`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'%'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` IDENTIFIED `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`BY`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'secure-password'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`GRANT`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` PROCESS `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`ON`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` *`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`*`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` TO`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'opensre_readonly'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`@`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'%'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`GRANT`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` REPLICATION CLIENT `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`ON`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` *`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`*`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` TO`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'opensre_readonly'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`@`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'%'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`GRANT`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` SELECT`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` ON`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` performance_schema.`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`*`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` TO`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'opensre_readonly'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`@`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'%'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`GRANT`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` SELECT`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` ON`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` your_database.`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`*`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` TO`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'opensre_readonly'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`@`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'%'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`FLUSH PRIVILEGES;`})}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`Three notes on these grants, each confirmed against a real server:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`information_schema`}),` needs no explicit grant — MySQL exposes it automatically based on a\nuser’s other privileges. `,_jsx(_components.code,{children:`GRANT SELECT ON information_schema.*`}),` is rejected outright\n(`,_jsx(_components.code,{children:`ERROR 1044`}),`) and aborts the script before later grants run.`]}),`\n`,_jsxs(_components.li,{children:[`The grant on the `,_jsx(_components.strong,{children:`target database`}),` (`,_jsx(_components.code,{children:`MYSQL_DATABASE`}),`) is required — the connector\nselects it as the default schema on connect, and without it every tool call fails with\n`,_jsx(_components.code,{children:`Access denied ... to database`}),`.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`REPLICATION CLIENT`}),` is required for `,_jsx(_components.code,{children:`get_mysql_replication_status`}),` (`,_jsx(_components.code,{children:`SHOW REPLICA STATUS`}),`\n/ `,_jsx(_components.code,{children:`SHOW SLAVE STATUS`}),`) — without it, that one tool returns an access-denied error even\nthough `,_jsx(_components.code,{children:`integrations verify mysql`}),` and the other four tools pass.`]}),`\n`]}),`\n`,_jsx(Info,{children:_jsxs(_components.p,{children:[_jsx(_components.code,{children:`performance_schema`}),` is enabled by default in MySQL 5.7+. Slow query data will not be available if it has been explicitly disabled in `,_jsx(_components.code,{children:`my.cnf`}),`.`]})}),`\n`,_jsx(Heading,{level:`3`,id:`quick-local-test-with-docker`,children:`Quick local test with Docker`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`4`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`4`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`docker`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` run`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -d`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --name`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` mysql-dev`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -p`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 127.0.0.1:3307:3306`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -e`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` MYSQL_ROOT_PASSWORD=rootpass`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -e`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` MYSQL_DATABASE=app_db`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` mysql:8.0`})}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`Wait for it to become healthy, then create the read-only user and a table to inspect:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`6`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`6`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`i`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`0`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`until`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:` docker`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` logs`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` mysql-dev`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` 2>\u00261`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` |`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:` grep`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -q`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"ready for connections.*port: 3306\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`; `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`do`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` i`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`$((`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`i`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` +`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 1`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`))`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` [ `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$i`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` -ge`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 30`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ] \u0026\u0026 { `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:`echo`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"ERROR: MySQL never became ready\"`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` >\u00262`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`; `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:`exit`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 1`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`; }`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:` sleep`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 2`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`done`})}),`\n`]})})}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`10`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`10`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`docker`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` exec`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` mysql-dev`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` mysql`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -uroot`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -prootpass`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -e`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`CREATE USER 'opensre_readonly'@'%' IDENTIFIED BY 'secure-password';`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`GRANT PROCESS ON *.* TO 'opensre_readonly'@'%';`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`GRANT REPLICATION CLIENT ON *.* TO 'opensre_readonly'@'%';`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`GRANT SELECT ON performance_schema.* TO 'opensre_readonly'@'%';`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`GRANT SELECT ON app_db.* TO 'opensre_readonly'@'%';`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`FLUSH PRIVILEGES;`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`CREATE TABLE app_db.orders (id INT PRIMARY KEY, amount DECIMAL(10,2));`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`INSERT INTO app_db.orders VALUES (1, 42.50), (2, 17.00);`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"`})}),`\n`]})})}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`6`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`6`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`export`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` MYSQL_HOST`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`127.0.0.1`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`export`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` MYSQL_PORT`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`3307`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`export`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` MYSQL_DATABASE`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`app_db`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`export`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` MYSQL_USERNAME`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`opensre_readonly`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`export`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` MYSQL_PASSWORD`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`secure-password`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`export`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` MYSQL_SSL_MODE`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`disabled`})]}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`Verify:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`opensre`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` integrations`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` verify`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` mysql`})]}),`\n`]})})}),`\n`,_jsx(CodeBlock,{numberOfLines:`4`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`4`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`SERVICE │ SOURCE │ STATUS │ DETAIL`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`mysql │ local env │ ✓ passed │ Connected to MySQL 8.0.46`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` │ │ │ target database: app_db.`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsxs(_components.p,{children:[`Chat sessions only treat an integration as active once the store resolution has `,_jsx(_components.em,{children:`something`}),` to fall through to env vars with — an untouched `,_jsx(_components.code,{children:`~/.opensre/integrations.json`}),` with an unrelated integration in it blocks env-var fallback entirely. Point `,_jsx(_components.code,{children:`OPENSRE_INTEGRATIONS_STORE_PATH`}),` at an empty, valid store instead, so your real config is never read or written and the exported `,_jsx(_components.code,{children:`MYSQL_*`}),` vars above are the only source of credentials:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`2`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`2`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`export`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` OPENSRE_INTEGRATIONS_STORE_PATH`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`$(`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`mktemp`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` /tmp/opensre-mysql-demo.XXXXXX`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:`echo`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` '{\"version\": 2, \"integrations\": []}'`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` >`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$OPENSRE_INTEGRATIONS_STORE_PATH`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`A literal zero-byte file does not work here — the store loader expects valid JSON and raises on an empty read, so this writes an explicitly empty (but valid) store rather than just creating the file with `,_jsx(_components.code,{children:`mktemp`}),` alone.`]}),`\n`,_jsx(_components.p,{children:`Kick off a long-running query so there is something real to investigate, then ask the agent:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`3`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`3`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`docker`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` exec`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -d`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` mysql-dev`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` mysql`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -uroot`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -prootpass`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -e`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"SELECT SLEEP(30);\"`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`opensre`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`Ask: `,_jsx(_components.em,{children:`Is anything blocking connections on the app_db MySQL instance?`})]}),`\n`,_jsxs(_components.p,{children:[`Against this exact local instance the agent calls all 5 registered tools — current\nprocesses, server status, slow queries, table stats, and replication status — and\ncorrectly identifies the synthetic `,_jsx(_components.code,{children:`SELECT SLEEP(30)`}),` probe as the only long-running\nquery, with every other health signal clean. An empty store makes the session fall\nthrough to env-var resolution for `,_jsx(_components.em,{children:`every`}),` integration, not just MySQL — if your shell\nalready resolves another integration from its own env vars, it rides along too\n(harmless).`]}),`\n`,_jsx(_components.p,{children:`Teardown — remove the demo store file and unset every demo variable, so nothing lingers in the shell to affect a later command:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`4`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`4`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`rm`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -f`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$OPENSRE_INTEGRATIONS_STORE_PATH`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:`unset`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` OPENSRE_INTEGRATIONS_STORE_PATH`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:`unset`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` MYSQL_HOST`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` MYSQL_PORT`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` MYSQL_DATABASE`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` MYSQL_USERNAME`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` MYSQL_PASSWORD`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` MYSQL_SSL_MODE`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`docker`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` rm`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -f`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` mysql-dev`})]}),`\n`]})})}),`\n`,_jsx(Heading,{level:`2`,id:`tools`,children:`Tools`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Tool`}),_jsx(_components.th,{children:`What it does`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`get_mysql_server_status`})}),_jsx(_components.td,{children:`Version, uptime, connections, query rates, InnoDB buffer pool / deadlock counts`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`get_mysql_current_processes`})}),_jsx(_components.td,{children:`Active queries longer than a threshold (default 1s)`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`get_mysql_slow_queries`})}),_jsxs(_components.td,{children:[`Highest average time from `,_jsx(_components.code,{children:`performance_schema.events_statements_summary_by_digest`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`get_mysql_table_stats`})}),_jsxs(_components.td,{children:[`Row estimates, data/index size from `,_jsx(_components.code,{children:`information_schema.TABLES`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`get_mysql_replication_status`})}),_jsxs(_components.td,{children:[`Replica IO/SQL health, seconds behind source (`,_jsx(_components.code,{children:`SHOW REPLICA STATUS`}),` with `,_jsx(_components.code,{children:`SHOW SLAVE STATUS`}),` fallback)`]})]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`verify`,children:`Verify`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`opensre`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` integrations`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` verify`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` mysql`})]}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`Expected output:`}),`\n`,_jsx(CodeBlock,{numberOfLines:`4`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`4`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Service: mysql`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Status: passed`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Detail: Connected to MySQL 8.0.32; target database: application_db`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(Heading,{level:`2`,id:`troubleshooting`,children:`Troubleshooting`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Symptom`}),_jsx(_components.th,{children:`Fix`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Connection refused`})}),_jsxs(_components.td,{children:[`Check host, port, firewall, `,_jsx(_components.code,{children:`bind-address`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Authentication failed`})}),_jsxs(_components.td,{children:[`Confirm user host (`,_jsx(_components.code,{children:`'user'@'%'`}),` or specific IP)`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`SSL error`})}),_jsxs(_components.td,{children:[`Try `,_jsx(_components.code,{children:`MYSQL_SSL_MODE=disabled`}),` or `,_jsx(_components.code,{children:`required`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Access denied on performance_schema`})}),_jsxs(_components.td,{children:[`Grant `,_jsx(_components.code,{children:`SELECT ON performance_schema.*`})]})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.strong,{children:`Access denied to database`}),` on verify/tool calls`]}),_jsxs(_components.td,{children:[`Grant `,_jsx(_components.code,{children:`SELECT ON \u003cyour_database>.*`}),` — the connector selects `,_jsx(_components.code,{children:`MYSQL_DATABASE`}),` as its default schema on connect`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Slow query data empty`})}),_jsxs(_components.td,{children:[`Confirm `,_jsx(_components.code,{children:`performance_schema=ON`}),` and restart MySQL`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Replication shows empty`})}),_jsx(_components.td,{children:`Expected on primary — other tools still work`})]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`security`,children:`Security`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Use a `,_jsx(_components.strong,{children:`dedicated read-only user`}),` — avoid root credentials.`]}),`\n`,_jsxs(_components.li,{children:[`Prefer `,_jsx(_components.code,{children:`MYSQL_SSL_MODE=required`}),` in production.`]}),`\n`,_jsxs(_components.li,{children:[`Restrict the user to specific hosts rather than `,_jsx(_components.code,{children:`'%'`}),` where possible.`]}),`\n`,_jsxs(_components.li,{children:[`Store credentials in `,_jsx(_components.code,{children:`.env`}),` or your secret manager — not in source control.`]}),`\n`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"MySQL","description":"Connect MySQL so OpenSRE can diagnose database issues","href":"/integrations/databases/mysql"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Overview","slug":"overview","depth":2,"children":[]},{"title":"Prerequisites","slug":"prerequisites","depth":2,"children":[]},{"title":"Setup","slug":"setup","depth":2,"children":[{"title":"Option 1: Interactive CLI","slug":"option-1-interactive-cli","depth":3,"children":[]},{"title":"Option 2: Environment variables","slug":"option-2-environment-variables","depth":3,"children":[]},{"title":"Option 3: Persistent store","slug":"option-3-persistent-store","depth":3,"children":[]}]},{"title":"Credentials","slug":"credentials","depth":2,"children":[{"title":"Creating a read-only user","slug":"creating-a-read-only-user","depth":3,"children":[]},{"title":"Quick local test with Docker","slug":"quick-local-test-with-docker","depth":3,"children":[]}]},{"title":"Tools","slug":"tools","depth":2,"children":[]},{"title":"Verify","slug":"verify","depth":2,"children":[]},{"title":"Troubleshooting","slug":"troubleshooting","depth":2,"children":[]},{"title":"Security","slug":"security","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":["/docs/_mintlify/custom/tracer/3640b424f7229c9e/toc-actions.js","/docs/_mintlify/custom/tracer/3efb8263c18eafe6/public/radar-chart.js"],"subdomain":"tracer","siteName":"OpenSRE Documentation","title":"MySQL - OpenSRE Documentation","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-09-28T16:28:41.383Z","originalFileLocation":"integrations/databases/mysql.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Connect MySQL so OpenSRE can diagnose database issues\">\u003cmeta data-mint-head name=\"application-name\" content=\"OpenSRE Documentation\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/docs/mintlify-assets/_mintlify/favicons/tracer/YbZGPFHeNcvj92i8/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/docs/mintlify-assets/_mintlify/favicons/tracer/YbZGPFHeNcvj92i8/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/docs/mintlify-assets/_mintlify/favicons/tracer/YbZGPFHeNcvj92i8/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/docs/mintlify-assets/_mintlify/favicons/tracer/YbZGPFHeNcvj92i8/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/docs/mintlify-assets/_mintlify/favicons/tracer/YbZGPFHeNcvj92i8/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/docs/mintlify-assets/_mintlify/favicons/tracer/YbZGPFHeNcvj92i8/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/docs/mintlify-assets/_mintlify/favicons/tracer/YbZGPFHeNcvj92i8/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/docs/mintlify-assets/_mintlify/favicons/tracer/YbZGPFHeNcvj92i8/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/docs/mintlify-assets/_mintlify/favicons/tracer/YbZGPFHeNcvj92i8/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"MySQL - OpenSRE Documentation\">\u003cmeta data-mint-head property=\"og:description\" content=\"Connect MySQL so OpenSRE can diagnose database issues\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"OpenSRE Documentation\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://opensre.com/docs/integrations/databases/mysql\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://tracer.mintlify.app/_mintlify/api/og/v2?division=Databases\u0026amp;title=MySQL\u0026amp;description=Connect+MySQL+so+OpenSRE+can+diagnose+database+issues\u0026amp;theme=ecba481d104c5d7db3f22fd8\u0026amp;signature=ecd90daa7ef3d10b07acb492f8a529bbe74915d96641b4cb0d5b68a8b5738f4d\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"MySQL - OpenSRE Documentation\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Connect MySQL so OpenSRE can diagnose database issues\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://tracer.mintlify.app/_mintlify/api/og/v2?division=Databases\u0026amp;title=MySQL\u0026amp;description=Connect+MySQL+so+OpenSRE+can+diagnose+database+issues\u0026amp;theme=ecba481d104c5d7db3f22fd8\u0026amp;signature=ecd90daa7ef3d10b07acb492f8a529bbe74915d96641b4cb0d5b68a8b5738f4d\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/docs/mintlify-assets/_mintlify/favicons/tracer/YbZGPFHeNcvj92i8/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"OpenSRE Documentation\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#000000\">\u003clink data-mint-head rel=\"canonical\" href=\"https://opensre.com/docs/integrations/databases/mysql\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/docs/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/docs/integrations/databases/mysql.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://opensre.com/#organization\",\"name\":\"OpenSRE Documentation\",\"url\":\"https://opensre.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/tracer/rmdYtNSoc9Q5D-5B/images/opensre-logo-black.svg?fit=max\u0026auto=format\u0026n=rmdYtNSoc9Q5D-5B\u0026q=85\u0026s=7ea8db5a1f8e1665db7544632022e298\"}},{\"@type\":\"WebSite\",\"@id\":\"https://opensre.com/docs#website\",\"name\":\"OpenSRE Documentation\",\"url\":\"https://opensre.com/docs\",\"publisher\":{\"@id\":\"https://opensre.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://opensre.com/docs/integrations/databases/mysql#webpage\",\"url\":\"https://opensre.com/docs/integrations/databases/mysql\",\"name\":\"MySQL\",\"description\":\"Connect MySQL so OpenSRE can diagnose database issues\",\"dateModified\":\"2026-09-28T16:28:41.383Z\",\"isPartOf\":{\"@id\":\"https://opensre.com/docs#website\"},\"breadcrumb\":{\"@id\":\"https://opensre.com/docs/integrations/databases/mysql#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://opensre.com/docs/integrations/databases/mysql#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Integrations\",\"item\":\"https://opensre.com/docs/integrations/index\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Databases\",\"item\":\"https://opensre.com/docs/integrations/databases/azure-sql\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"MySQL\",\"item\":\"https://opensre.com/docs/integrations/databases/mysql\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://opensre.com/docs/integrations/databases/mysql#article\",\"headline\":\"MySQL\",\"name\":\"MySQL\",\"description\":\"Connect MySQL so OpenSRE can diagnose database issues\",\"url\":\"https://opensre.com/docs/integrations/databases/mysql\",\"mainEntityOfPage\":{\"@id\":\"https://opensre.com/docs/integrations/databases/mysql#webpage\"},\"dateModified\":\"2026-09-28T16:28:41.383Z\",\"publisher\":{\"@id\":\"https://opensre.com/#organization\"},\"isPartOf\":{\"@id\":\"https://opensre.com/docs#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"OpenSRE Documentation\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"OpenSRE Documentation","nav":{"global":null,"directory":"card","groups":[{"group":"Welcome","pages":[{"title":"Welcome to OpenSRE","href":"/index"},{"title":"Showcase","href":"/getting-started/showcase"},{"title":"Features","href":"/getting-started/features"},{"title":"FAQ","href":"/guides/faq"}]},{"group":"Get started","pages":[{"title":"Quickstart","href":"/getting-started/quickstart"},{"title":"Install OpenSRE","href":"/install/index"},{"title":"Local and on-prem setup","href":"/install/install-local"},{"title":"Enterprise setup (OpenSRE Cloud)","href":"/install/install-enterprise"},{"group":"Platforms","expanded":false,"pages":[{"title":"macOS","href":"/install/macos"},{"title":"Linux","href":"/install/linux-local"},{"title":"Windows","href":"/install/windows-local"},{"title":"Docker","href":"/install/docker"}]},{"title":"Environment Variables","href":"/install/environment-variables"},{"title":"Sync to your own object store","href":"/install/remote-sync"}]},{"group":"CI/CD","pages":[{"title":"CI/CD with OpenSRE","href":"/cicd/overview"},{"title":"CI/CD analytics demo","href":"/cicd/cicd-analytics-demo"},{"title":"Fix GitHub CI","href":"/cicd/github-ci-fix"},{"title":"Keep CI green with an agent","href":"/cicd/ci-repair-agent"},{"title":"Scan CI health across repositories","href":"/cicd/github-ci-health-scan"}]},{"group":"Using the shell","pages":[{"title":"Shell commands","href":"/getting-started/interactive-shell-commands"},{"title":"Agent with connected tools","href":"/getting-started/interactive-shell-assistant"},{"title":"Goals","href":"/getting-started/goals"}]},{"group":"Guides","pages":[{"title":"OTel payment auto-triage pilot","href":"/guides/otel-payment-triage"}]},{"group":"Run it anywhere","pages":[{"title":"Deployment","href":"/guides/deployment"},{"title":"Headless CLI","href":"/guides/headless-cli"},{"title":"HTTP API","href":"/guides/api"},{"title":"Python API","href":"/guides/python-api"},{"title":"Hosting the Agent","href":"/guides/hosting-the-agent"}]},{"group":"Platform","pages":[{"title":"LLM Providers","href":"/platform/llm-providers"},{"title":"Multi-instance integrations","href":"/platform/multi-instance-integrations"},{"title":"Masking Sensitive Identifiers","href":"/platform/masking"},{"title":"Interactive Shell Privacy","href":"/platform/interactive-shell-privacy"},{"title":"Session History","href":"/platform/sessions"},{"title":"Principal-scoped storage (Slack and Discord)","href":"/platform/principal-scoped-storage"},{"title":"Long-Term Memory","href":"/platform/memory"},{"title":"Work Management","href":"/platform/work-management"},{"title":"Scheduled Deliveries (Cron)","href":"/platform/cron"},{"title":"Closed-Loop Learning","href":"/platform/closed-loop-learning"}]},{"group":"Integrations","pages":[{"title":"Integrations overview","href":"/integrations/index"},{"group":"Monitoring","expanded":false,"pages":[{"title":"Azure Monitor","href":"/integrations/monitoring/azure-monitor"},{"title":"Better Stack Telemetry","href":"/integrations/monitoring/betterstack"},{"title":"Coralogix","href":"/integrations/monitoring/coralogix"},{"title":"Datadog","href":"/integrations/monitoring/datadog"},{"title":"Grafana","href":"/integrations/monitoring/grafana"},{"title":"Grafana Annotations","href":"/integrations/monitoring/grafana_annotations"},{"title":"groundcover","href":"/integrations/monitoring/groundcover"},{"title":"Honeycomb","href":"/integrations/monitoring/honeycomb"},{"title":"New Relic","href":"/integrations/monitoring/new_relic"},{"title":"OpenObserve","href":"/integrations/monitoring/openobserve"},{"title":"PostHog","href":"/integrations/monitoring/posthog"},{"title":"PostHog (MCP)","href":"/integrations/monitoring/posthog-mcp"},{"title":"SigNoz","href":"/integrations/monitoring/signoz"},{"title":"Splunk","href":"/integrations/monitoring/splunk"},{"title":"Grafana Tempo","href":"/integrations/monitoring/tempo"},{"title":"VictoriaLogs","href":"/integrations/monitoring/victoria_logs"}]},{"group":"Incidents","expanded":false,"pages":[{"title":"Alertmanager","href":"/integrations/incidents/alertmanager"},{"title":"Runbook-guided investigations","href":"/integrations/incidents/runbook-guided-investigations"},{"title":"incident.io","href":"/integrations/incidents/incident_io"},{"title":"PagerDuty","href":"/integrations/incidents/pagerduty"},{"title":"Sentry","href":"/integrations/incidents/sentry"},{"title":"Sentry (MCP)","href":"/integrations/incidents/sentry-mcp"},{"title":"ServiceNow","href":"/integrations/incidents/servicenow"},{"title":"Fix a Sentry issue","href":"/integrations/incidents/fix-sentry-issue"}]},{"group":"Cloud","expanded":false,"pages":[{"title":"Argo CD","href":"/integrations/cloud/argocd"},{"title":"AWS","href":"/integrations/cloud/aws"},{"title":"AWS Lambda","href":"/integrations/cloud/aws_lambda"},{"title":"AWS CloudTrail","href":"/integrations/cloud/cloudtrail_events"},{"title":"AWS EC2","href":"/integrations/cloud/ec2"},{"title":"AWS ELB","href":"/integrations/cloud/elb"},{"title":"Helm (CLI)","href":"/integrations/cloud/helm"},{"title":"Kubernetes","href":"/integrations/cloud/kubernetes"},{"title":"Railway","href":"/integrations/cloud/railway"},{"title":"AWS S3","href":"/integrations/cloud/s3"},{"title":"AWS SQS","href":"/integrations/cloud/sqs_queues"},{"title":"Vercel","href":"/integrations/cloud/vercel"}]},{"group":"Code and CI","expanded":false,"pages":[{"title":"Architecture audit tool","href":"/integrations/code/architecture-audit-tool"},{"title":"Structured file reads","href":"/integrations/code/structured-file-tool"},{"title":"Counting files","href":"/integrations/code/counting-files"},{"title":"Bitbucket","href":"/integrations/code/bitbucket"},{"title":"GitHub","href":"/integrations/code/github"},{"title":"Fix GitHub security and quality findings","href":"/integrations/code/github-security-fix"},{"title":"Resolve merge conflicts","href":"/integrations/code/resolve-merge-conflicts"},{"title":"GitHub workflow tools","href":"/integrations/code/github-workflow-tools"},{"title":"GitHub Actions","href":"/integrations/code/github-actions"},{"title":"GitLab","href":"/integrations/code/gitlab"},{"title":"Jenkins","href":"/integrations/code/jenkins"},{"title":"Pi coding tasks","href":"/integrations/code/pi-coding"}]},{"group":"Collaboration","expanded":false,"pages":[{"title":"Google Docs","href":"/integrations/collaboration/google-docs"},{"title":"Jira","href":"/integrations/collaboration/jira"},{"title":"Trello","href":"/integrations/collaboration/trello"}]},{"group":"Messaging","expanded":false,"pages":[{"title":"Messaging","href":"/integrations/messaging/index"},{"title":"SMTP","href":"/integrations/messaging/smtp"},{"title":"Buzz","href":"/integrations/messaging/buzz"},{"title":"Slack","href":"/integrations/messaging/slack"},{"title":"Discord","href":"/integrations/messaging/discord"},{"title":"Telegram","href":"/integrations/messaging/telegram"},{"title":"Rocket.Chat","href":"/integrations/messaging/rocketchat"},{"title":"WhatsApp","href":"/integrations/messaging/whatsapp"},{"title":"Twilio SMS","href":"/integrations/messaging/twilio-sms"}]},{"group":"Databases","expanded":false,"pages":[{"title":"Azure SQL","href":"/integrations/databases/azure-sql"},{"title":"ClickHouse","href":"/integrations/databases/clickhouse"},{"title":"AWS Elasticsearch (AWS ES)","href":"/integrations/databases/elasticsearch"},{"title":"MariaDB","href":"/integrations/databases/mariadb"},{"title":"MongoDB","href":"/integrations/databases/mongodb"},{"title":"MongoDB Atlas","description":"Connect MongoDB Atlas to give OpenSRE visibility into cluster health, performance metrics, deployment status, and operational insights during incidents","href":"/integrations/databases/mongodb-atlas"},{"title":"MySQL","href":"/integrations/databases/mysql"},{"title":"OpenSearch / Elasticsearch","description":"Connect OpenSearch or Elasticsearch so OpenSRE can search application logs and analytics indices","href":"/integrations/databases/opensearch"},{"title":"PostgreSQL","href":"/integrations/databases/postgresql"},{"title":"AWS RDS","href":"/integrations/databases/rds"},{"title":"Redis","href":"/integrations/databases/redis"},{"title":"Snowflake","href":"/integrations/databases/snowflake"},{"title":"Supabase","href":"/integrations/databases/supabase"}]},{"group":"Workflows","expanded":false,"pages":[{"title":"Airflow","href":"/integrations/workflows/airflow"},{"title":"Dagster","href":"/integrations/workflows/dagster"},{"title":"Kafka","href":"/integrations/workflows/kafka"},{"title":"Prefect","href":"/integrations/workflows/prefect"},{"title":"RabbitMQ","href":"/integrations/workflows/rabbitmq"},{"title":"Temporal","href":"/integrations/workflows/temporal"}]}]},{"group":"Community","pages":[{"title":"Community Giveaway","href":"/guides/bi-weekly-giveaway"},{"title":"Pull request review flow","href":"/guides/pr-review-flow"}]}]},"basePath":"","title":"MySQL - OpenSRE Documentation","buildId":"dpl_GWQzn6k13MqphA3qck3hQKoQXDzM","deploymentId":"dpl_GWQzn6k13MqphA3qck3hQKoQXDzM","dynamics":[],"chunks":[]}