diff --git a/agent/app/repo/app_install.go b/agent/app/repo/app_install.go index 49be4d148..ec1c80561 100644 --- a/agent/app/repo/app_install.go +++ b/agent/app/repo/app_install.go @@ -206,17 +206,17 @@ func (a *AppInstallRepo) LoadBaseInfo(key string, name string) (*RootInfo, error return nil, err } switch app.Key { - case "mysql", "mariadb": + case "mysql", "mariadb", constant.AppMysqlCluster: password, ok := envMap["PANEL_DB_ROOT_PASSWORD"].(string) if ok { info.Password = password } - case "redis": + case "redis", constant.AppRedisCluster: password, ok := envMap["PANEL_REDIS_ROOT_PASSWORD"].(string) if ok { info.Password = password } - case "mongodb", constant.AppPostgresql: + case "mongodb", constant.AppPostgresql, constant.AppPostgresqlCluster: user, ok := envMap["PANEL_DB_ROOT_USER"].(string) if ok { info.UserName = user diff --git a/agent/app/service/app_utils.go b/agent/app/service/app_utils.go index 57faafce6..2119e115b 100644 --- a/agent/app/service/app_utils.go +++ b/agent/app/service/app_utils.go @@ -116,13 +116,15 @@ func checkPortExist(port int) error { } var DatabaseKeys = map[string]uint{ - constant.AppMysql: 3306, - constant.AppMariaDB: 3306, - constant.AppPostgresql: 5432, - constant.AppPostgres: 5432, - constant.AppMongodb: 27017, - constant.AppRedis: 6379, - constant.AppMemcached: 11211, + constant.AppMysql: 3306, + constant.AppMariaDB: 3306, + constant.AppPostgresql: 5432, + constant.AppPostgres: 5432, + constant.AppMongodb: 27017, + constant.AppRedis: 6379, + constant.AppMemcached: 11211, + constant.AppMysqlCluster: 3306, + constant.AppPostgresqlCluster: 5432, } var ToolKeys = map[string]uint{ diff --git a/frontend/src/assets/iconfont/iconfont.css b/frontend/src/assets/iconfont/iconfont.css index fd03c5fdd..28afd2ec1 100644 --- a/frontend/src/assets/iconfont/iconfont.css +++ b/frontend/src/assets/iconfont/iconfont.css @@ -1,9 +1,9 @@ @font-face { font-family: "iconfont"; /* Project id 4776196 */ - src: url('iconfont.woff2?t=1750234328196') format('woff2'), - url('iconfont.woff?t=1750234328196') format('woff'), - url('iconfont.ttf?t=1750234328196') format('truetype'), - url('iconfont.svg?t=1750234328196#iconfont') format('svg'); + src: url('iconfont.woff2?t=1752473267421') format('woff2'), + url('iconfont.woff?t=1752473267421') format('woff'), + url('iconfont.ttf?t=1752473267421') format('truetype'), + url('iconfont.svg?t=1752473267421#iconfont') format('svg'); } .iconfont { @@ -14,6 +14,18 @@ -moz-osx-font-smoothing: grayscale; } +.p-cluster-3:before { + content: "\e706"; +} + +.p-cluster-2:before { + content: "\e61f"; +} + +.p-cluster-1:before { + content: "\e7d8"; +} + .p-start:before { content: "\e688"; } diff --git a/frontend/src/assets/iconfont/iconfont.js b/frontend/src/assets/iconfont/iconfont.js index 804a8d4e9..2fe784eed 100644 --- a/frontend/src/assets/iconfont/iconfont.js +++ b/frontend/src/assets/iconfont/iconfont.js @@ -1 +1 @@ -window._iconfont_svg_string_4776196='',(h=>{var l=(a=(a=document.getElementsByTagName("script"))[a.length-1]).getAttribute("data-injectcss"),a=a.getAttribute("data-disable-injectsvg");if(!a){var c,t,p,z,v,i=function(l,a){a.parentNode.insertBefore(l,a)};if(l&&!h.__iconfont__svg__cssinject__){h.__iconfont__svg__cssinject__=!0;try{document.write("")}catch(l){console&&console.log(l)}}c=function(){var l,a=document.createElement("div");a.innerHTML=h._iconfont_svg_string_4776196,(a=a.getElementsByTagName("svg")[0])&&(a.setAttribute("aria-hidden","true"),a.style.position="absolute",a.style.width=0,a.style.height=0,a.style.overflow="hidden",a=a,(l=document.body).firstChild?i(a,l.firstChild):l.appendChild(a))},document.addEventListener?~["complete","loaded","interactive"].indexOf(document.readyState)?setTimeout(c,0):(t=function(){document.removeEventListener("DOMContentLoaded",t,!1),c()},document.addEventListener("DOMContentLoaded",t,!1)):document.attachEvent&&(p=c,z=h.document,v=!1,m(),z.onreadystatechange=function(){"complete"==z.readyState&&(z.onreadystatechange=null,d())})}function d(){v||(v=!0,p())}function m(){try{z.documentElement.doScroll("left")}catch(l){return void setTimeout(m,50)}d()}})(window); \ No newline at end of file +window._iconfont_svg_string_4776196='',(a=>{var l=(c=(c=document.getElementsByTagName("script"))[c.length-1]).getAttribute("data-injectcss"),c=c.getAttribute("data-disable-injectsvg");if(!c){var h,t,p,z,v,i=function(l,c){c.parentNode.insertBefore(l,c)};if(l&&!a.__iconfont__svg__cssinject__){a.__iconfont__svg__cssinject__=!0;try{document.write("")}catch(l){console&&console.log(l)}}h=function(){var l,c=document.createElement("div");c.innerHTML=a._iconfont_svg_string_4776196,(c=c.getElementsByTagName("svg")[0])&&(c.setAttribute("aria-hidden","true"),c.style.position="absolute",c.style.width=0,c.style.height=0,c.style.overflow="hidden",c=c,(l=document.body).firstChild?i(c,l.firstChild):l.appendChild(c))},document.addEventListener?~["complete","loaded","interactive"].indexOf(document.readyState)?setTimeout(h,0):(t=function(){document.removeEventListener("DOMContentLoaded",t,!1),h()},document.addEventListener("DOMContentLoaded",t,!1)):document.attachEvent&&(p=h,z=a.document,v=!1,M(),z.onreadystatechange=function(){"complete"==z.readyState&&(z.onreadystatechange=null,d())})}function d(){v||(v=!0,p())}function M(){try{z.documentElement.doScroll("left")}catch(l){return void setTimeout(M,50)}d()}})(window); \ No newline at end of file diff --git a/frontend/src/assets/iconfont/iconfont.json b/frontend/src/assets/iconfont/iconfont.json index 5f83f0419..b5da8c18e 100644 --- a/frontend/src/assets/iconfont/iconfont.json +++ b/frontend/src/assets/iconfont/iconfont.json @@ -5,6 +5,27 @@ "css_prefix_text": "p-", "description": "", "glyphs": [ + { + "icon_id": "88609", + "name": "cluster-3", + "font_class": "cluster-3", + "unicode": "e706", + "unicode_decimal": 59142 + }, + { + "icon_id": "663330", + "name": "cluster-2", + "font_class": "cluster-2", + "unicode": "e61f", + "unicode_decimal": 58911 + }, + { + "icon_id": "4766884", + "name": "cluster-1", + "font_class": "cluster-1", + "unicode": "e7d8", + "unicode_decimal": 59352 + }, { "icon_id": "15838584", "name": "arrow-right-filling", diff --git a/frontend/src/assets/iconfont/iconfont.svg b/frontend/src/assets/iconfont/iconfont.svg index 4d9bc1ae1..a2ace5801 100644 --- a/frontend/src/assets/iconfont/iconfont.svg +++ b/frontend/src/assets/iconfont/iconfont.svg @@ -14,6 +14,12 @@ /> + + + + + + diff --git a/frontend/src/assets/iconfont/iconfont.ttf b/frontend/src/assets/iconfont/iconfont.ttf index d9089b5c2..ca60bd0e9 100644 Binary files a/frontend/src/assets/iconfont/iconfont.ttf and b/frontend/src/assets/iconfont/iconfont.ttf differ diff --git a/frontend/src/assets/iconfont/iconfont.woff b/frontend/src/assets/iconfont/iconfont.woff index fb5a99b7c..ee592ad85 100644 Binary files a/frontend/src/assets/iconfont/iconfont.woff and b/frontend/src/assets/iconfont/iconfont.woff differ diff --git a/frontend/src/assets/iconfont/iconfont.woff2 b/frontend/src/assets/iconfont/iconfont.woff2 index c2c5b56cb..dcc613fdf 100644 Binary files a/frontend/src/assets/iconfont/iconfont.woff2 and b/frontend/src/assets/iconfont/iconfont.woff2 differ diff --git a/frontend/src/lang/modules/en.ts b/frontend/src/lang/modules/en.ts index fc241fd0c..cecb149b4 100644 --- a/frontend/src/lang/modules/en.ts +++ b/frontend/src/lang/modules/en.ts @@ -1977,6 +1977,8 @@ const message = { node: 'Upgrading to the professional version allows you to manage multiple Linux servers with 1Panel.', fileExchange: 'Upgrade to the Professional Edition to quickly transfer files between multiple servers.', app: 'Upgrade to the professional version to view service information, abnormal monitoring, etc. through the mobile APP. ', + cluster: + 'Upgrading to the Professional Edition allows you to manage MySQL/Postgres/Reids master-slave clusters.', }, clean: { scan: 'Start scanning', @@ -3353,6 +3355,16 @@ const message = { appTitle3: 'Real-Time Abnormal Monitoring', appContent3: 'View real-time server status, WAF security monitoring, website traffic statistics, and process health status on the mobile app.', + + clusterTitle1: 'Master-Slave Deployment', + clusterContent1: + 'Supports creating MySQL/Postgres/Redis master-slave instances on different nodes, automatically completing master-slave association and initialization', + clusterTitle2: 'Master-Slave Management', + clusterContent2: + 'Unified page to centrally manage multiple master-slave nodes, view their roles, running status, etc.', + clusterTitle3: 'Replication Status', + clusterContent3: + 'Displays master-slave replication status and delay information, assisting in troubleshooting synchronization issues', }, node: { master: 'Main Node', diff --git a/frontend/src/lang/modules/ja.ts b/frontend/src/lang/modules/ja.ts index 0683eee76..31f2f2143 100644 --- a/frontend/src/lang/modules/ja.ts +++ b/frontend/src/lang/modules/ja.ts @@ -1893,6 +1893,8 @@ const message = { alert: 'プロのバージョンにアップグレードして、SMSを介してアラーム情報を受信し、アラームログを表示し、さまざまなキーイベントを完全に制御し、心配のないシステム操作を確実にする', app: 'モバイルアプリでサービス情報、異常監視などを表示するには、プロフェッショナル版にアップグレードしてください。', fileExchange: 'プロフェッショナル版にアップグレードすると、複数のサーバー間でファイルを迅速に転送できます。', + cluster: + 'プロフェッショナル版にアップグレードすると、MySQL/Postgres/Reidsマスタースレーブクラスタを管理できます。', }, clean: { scan: 'スキャンを開始します', @@ -3222,6 +3224,16 @@ const message = { appTitle3: 'リアルタイム異常監視', appContent3: 'モバイル端末でサーバーステータス、WAFセキュリティ監視、ウェブサイトの訪問統計、プロセスの健康状態をリアルタイムで確認できます。', + + clusterTitle1: 'マスタースレーブ展開', + clusterContent1: + '異なるノードで MySQL/Postgres/Redis マスタースレーブインスタンスを作成することをサポートし、自動的にマスタースレーブ関連付けと初期化を完了します', + clusterTitle2: 'マスタースレーブ管理', + clusterContent2: + '統一されたページで複数のマスタースレーブノードを一元的に管理し、それらの役割、実行状態などを表示します', + clusterTitle3: 'レプリケーション状態', + clusterContent3: + 'マスタースレーブレプリケーション状態と遅延情報を表示し、同期の問題を解決するのに役立ちます', }, node: { master: '主ノード', diff --git a/frontend/src/lang/modules/ko.ts b/frontend/src/lang/modules/ko.ts index 4af9e8aaf..23249a2cc 100644 --- a/frontend/src/lang/modules/ko.ts +++ b/frontend/src/lang/modules/ko.ts @@ -1861,6 +1861,8 @@ const message = { alert: '전문 버전으로 업그레이드하면 SMS 를 통해 알림 정보를 받고 알림 로그를 볼 수 있으며, 다양한 주요 이벤트를 완벽하게 제어하여 시스템 운영을 걱정 없이 유지할 수 있습니다.', fileExchange: '프로페셔널 에디션으로 업그레이드하여 여러 서버 간에 파일을 빠르게 전송할 수 있습니다.', app: '프로페셔널 버전으로 업그레이드하면 모바일 APP을 통해 서비스 정보, 이상 모니터링 등을 확인할 수 있습니다.', + cluster: + '프로페셔널 에디션으로 업그레이드하면 MySQL/Postgres/Reids 마스터-슬레이브 클러스터를 관리할 수 있습니다.', }, clean: { scan: '스캔 시작', @@ -3164,6 +3166,16 @@ const message = { appTitle3: '실시간 이상 모니터링', appContent3: '모바일 앱에서 서버 상태, WAF 보안 모니터링, 웹사이트 방문 통계 및 프로세스 건강 상태를 실시간으로 확인하세요.', + + clusterTitle1: '마스터-슬레이브 배포', + clusterContent1: + '다른 노드에서 MySQL/Postgres/Redis 마스터-슬레이브 인스턴스를 생성하는 것을 지원하며, 자동으로 마스터-슬레이브 연결 및 초기화를 완료합니다', + clusterTitle2: '마스터-슬레이브 관리', + clusterContent2: + '통합 페이지에서 여러 마스터-슬레이브 노드를 중앙에서 관리하고, 역할, 실행 상태 등을 확인합니다', + clusterTitle3: '복제 상태', + clusterContent3: + '마스터-슬레이브 복제 상태 및 지연 정보를 표시하여 동기화 문제를 해결하는 데 도움을 줍니다', }, node: { master: '주 노드', diff --git a/frontend/src/lang/modules/ms.ts b/frontend/src/lang/modules/ms.ts index bef272fa8..8de091344 100644 --- a/frontend/src/lang/modules/ms.ts +++ b/frontend/src/lang/modules/ms.ts @@ -1949,6 +1949,8 @@ const message = { alert: 'Tingkatkan ke versi profesional untuk menerima maklumat amaran melalui SMS dan melihat log amaran, mengawal sepenuhnya pelbagai acara utama, dan memastikan operasi sistem bebas kerisauan.', fileExchange: 'Naik taraf ke Edisi Professional untuk menghantar fail dengan cepat antara pelbagai pelayan.', app: 'Tingkatkan ke versi profesional untuk melihat maklumat perkhidmatan, pemantauan abnormal, dll melalui aplikasi mudah alih.', + cluster: + 'Versi Profesional menaik taraf membolehkan anda menguruskan kelompok induk-hamba MySQL/Postgres/Reids.', }, clean: { scan: 'Mulakan imbasan', @@ -3293,6 +3295,16 @@ const message = { appTitle3: 'Pemantauan Anomali Masa Nyata', appContent3: 'Lihat status pelayan, pemantauan keselamatan WAF, statistik pelawat laman web dan status kesihatan proses di aplikasi mudah alih secara masa nyata.', + + clusterTitle1: 'Penyebaran Utama-Hamba', + clusterContent1: + 'Menyokong penciptaan contoh utama-hamba MySQL/Postgres/Redis pada nod yang berbeza, secara automatik melengkapkan perhubungan utama-hamba dan permulaan', + clusterTitle2: 'Pengurusan Utama-Hamba', + clusterContent2: + 'Halaman terpadu untuk menguruskan pelbagai nod utama-hamba, lihat peranan, status berjalan, dsb.', + clusterTitle3: 'Status Replikasi', + clusterContent3: + 'Memaparkan status replikasi utama-hamba dan maklumat kelewatan, membantu menyelesaikan masalah sinkronisasi', }, node: { master: 'Nod Utama', diff --git a/frontend/src/lang/modules/pt-br.ts b/frontend/src/lang/modules/pt-br.ts index e21f3b108..044d24664 100644 --- a/frontend/src/lang/modules/pt-br.ts +++ b/frontend/src/lang/modules/pt-br.ts @@ -1940,6 +1940,8 @@ const message = { fileExchange: 'Atualize para a Edição Profissional para transferir arquivos rapidamente entre vários servidores.', app: 'Upgrade para a versão profissional para visualizar informações do serviço, monitoramento anômalo, etc., através do aplicativo móvel.', + cluster: + 'A atualização para a Edição Profissional permite gerenciar clusters mestre-escravo MySQL/Postgres/Reids.', }, clean: { scan: 'Iniciar escaneamento', @@ -3301,6 +3303,16 @@ const message = { appTitle3: 'Monitoramento Anômalo em Tempo Real', appContent3: 'Veja o status do servidor, monitoramento de segurança WAF, estatísticas de visitas ao site e saúde dos processos em tempo real no aplicativo móvel.', + + clusterTitle1: 'Implantação Mestre-Escravo', + clusterContent1: + 'Suporta a criação de instâncias mestre-escravo MySQL/Postgres/Redis em diferentes nós, completando automaticamente a associação e inicialização mestre-escravo', + clusterTitle2: 'Gestão Mestre-Escravo', + clusterContent2: + 'Página unificada para gerir centralmente vários nós mestre-escravo, visualizar seus papéis, status de execução, etc.', + clusterTitle3: 'Estado de Replicação', + clusterContent3: + 'Exibe o estado de replicação mestre-escravo e informações de atraso, auxiliando na resolução de problemas de sincronização', }, node: { master: 'Nó Principal', diff --git a/frontend/src/lang/modules/ru.ts b/frontend/src/lang/modules/ru.ts index 7b190b72f..71a4469b0 100644 --- a/frontend/src/lang/modules/ru.ts +++ b/frontend/src/lang/modules/ru.ts @@ -1935,6 +1935,8 @@ const message = { alert: 'Обновление до профессиональной версии позволяет получать информацию о тревогах через SMS и просматривать логи тревог, полностью контролировать различные ключевые события и обеспечивать беспроблемную работу системы', fileExchange: 'Обновите до Профессиональной версии, чтобы быстро передавать файлы между несколькими серверами.', app: 'Обновите до профессиональной версии, чтобы просматривать информацию о сервисах, мониторинг аномалий и т.д. через мобильное приложение.', + cluster: + 'Обновление до профессиональной версии позволяет управлять кластерами мастер-слейв MySQL/Postgres/Reids.', }, clean: { scan: 'Начать сканирование', @@ -3286,6 +3288,16 @@ const message = { appTitle3: 'Мониторинг аномалий в реальном времени', appContent3: 'Просматривайте статус сервера, мониторинг безопасности WAF, статистику посещений сайта и состояние процессов в реальном времени через мобильное приложение.', + + clusterTitle1: 'Развертывание мастер-слейв', + clusterContent1: + 'Поддерживает создание мастер-слейв экземпляров MySQL/Postgres/Redis на разных узлах, автоматически завершая связь мастер-слейв и инициализацию', + clusterTitle2: 'Управление мастер-слейв', + clusterContent2: + 'Единая страница для централизованного управления несколькими узлами мастер-слейв, просмотр их ролей, статуса выполнения и т.д.', + clusterTitle3: 'Состояние репликации', + clusterContent3: + 'Отображает состояние репликации мастер-слейв и информацию о задержке, помогая в устранении проблем синхронизации', }, node: { master: 'Главный узел', diff --git a/frontend/src/lang/modules/tr.ts b/frontend/src/lang/modules/tr.ts index b48624b9e..e8320e2df 100644 --- a/frontend/src/lang/modules/tr.ts +++ b/frontend/src/lang/modules/tr.ts @@ -1997,6 +1997,7 @@ const message = { node: 'Profesyonel sürüme yükseltme, birden fazla Linux sunucusunu 1Panel ile yönetmenize olanak tanır.', fileExchange: 'Profesyonel Sürüme yükseltme, birden fazla sunucu arasında hızlı dosya aktarımı sağlar.', app: 'Profesyonel sürüme yükseltme, mobil uygulama üzerinden hizmet bilgilerini, anormal izlemeyi vb. görüntülemenize olanak tanır. ', + cluster: 'Profesyonel Sürüme Yükseltme, MySQL/Postgers/Reids ana-çalışan kümelerini yönetmenizi sağlar.', }, clean: { scan: 'Taramayı başlat', @@ -3389,6 +3390,16 @@ const message = { appTitle3: 'Gerçek Zamanlı Anormallik İzleme', appContent3: 'Mobil uygulama üzerinden gerçek zamanlı sunucu durumu, WAF güvenlik izleme, web sitesi trafik istatistikleri ve işlem sağlığı durumunu görüntüleyin.', + + clusterTitle1: 'Ana-Çalışan Dağıtımı', + clusterContent1: + 'Farklı düğümlerde MySQL/Postgres/Redis ana-çalışan örnekleri oluşturmayı destekler, ana-çalışan ilişkisi ve başlatmayı otomatik olarak tamamlar', + clusterTitle2: 'Ana-Çalışan Yönetimi', + clusterContent2: + 'Birleşik bir sayfa ile birden çok ana-çalışan düğümünü merkezi olarak yönetin, rollerini, çalışma durumlarını vb. görüntüleyin', + clusterTitle3: 'Çoğaltma Durumu', + clusterContent3: + 'Ana-çalışan çoğaltma durumunu ve gecikme bilgilerini görüntüleyerek senkronizasyon sorunlarını gidermeye yardımcı olur', }, node: { master: 'Ana Düğüm', diff --git a/frontend/src/lang/modules/zh-Hant.ts b/frontend/src/lang/modules/zh-Hant.ts index afbcf0c69..5a1542dd0 100644 --- a/frontend/src/lang/modules/zh-Hant.ts +++ b/frontend/src/lang/modules/zh-Hant.ts @@ -1846,6 +1846,7 @@ const message = { node: '升級專業版可以使用 1Panel 管理多台 linux 伺服器。', fileExchange: '升級專業版可以在多台服務器之間快速傳輸文件。', app: '升級專業版可通過手機APP,查看服務資訊、异常監控等。', + cluster: '升級專業版可以管理 MySQL/Postgres/Reids 主從集群。', }, clean: { scan: '開始掃描', @@ -3124,6 +3125,13 @@ const message = { appContent2: '在移動端進行應用、網站、Docker、資料庫等基礎管理,支持快速創建應用與網站。', appTitle3: '實時異常監控', appContent3: '移動端實時查看伺服器狀態、WAF 安全監控、網站訪問統計與進程健康狀況。', + + clusterTitle1: '主從部署', + clusterContent1: '支持在不同節點創建 MySQL/Postgres/Redis 主從實例,自動完成主從關聯與初始化', + clusterTitle2: '主從管理', + clusterContent2: '統一頁面集中管理多個主從節點,查看其角色、運行狀態等信息', + clusterTitle3: '複製狀態', + clusterContent3: '展示主從複製狀態與延遲信息,輔助排查同步異常問題', }, node: { master: '主節點', diff --git a/frontend/src/lang/modules/zh.ts b/frontend/src/lang/modules/zh.ts index 89d6f74f5..7c6814f86 100644 --- a/frontend/src/lang/modules/zh.ts +++ b/frontend/src/lang/modules/zh.ts @@ -1837,6 +1837,7 @@ const message = { node: '升级专业版可以使用 1Panel 管理多台 linux 服务器。', fileExchange: '升级专业版可以在多台服务器之间快速传输文件。', app: '升级专业版可通过手机 APP,查看服务信息、异常监控等。', + cluster: '升级专业版可以管理 MySQL/Postgres/Reids 主从集群。', }, clean: { scan: '开始扫描', @@ -3094,6 +3095,13 @@ const message = { appContent2: '在移动端进行应用、网站、Docker、数据库等基础管理,支持快速创建应用与网站。', appTitle3: '实时异常监控', appContent3: '移动端实时查看服务器状态、WAF 安全监控、网站访问统计与进程健康状况。', + + clusterTitle1: '主从部署', + clusterContent1: '支持在不同节点创建 MySQL/Postgres/Redis 主从实例,自动完成主从关联与初始化', + clusterTitle2: '主从管理', + clusterContent2: '统一页面集中管理多个主从节点,查看其角色、运行状态等信息', + clusterTitle3: '复制状态', + clusterContent3: '展示主从复制状态与延迟信息,辅助排查同步异常问题', }, node: { master: '主节点', diff --git a/frontend/src/views/database/mysql/index.vue b/frontend/src/views/database/mysql/index.vue index c95a5ec43..9eb1aef6c 100644 --- a/frontend/src/views/database/mysql/index.vue +++ b/frontend/src/views/database/mysql/index.vue @@ -486,7 +486,7 @@ const checkExist = (data: App.CheckInstalled) => { const loadDBOptions = async () => { try { - const res = await listDatabases('mysql,mariadb'); + const res = await listDatabases('mysql,mariadb,mysql-cluster'); let datas = res.data || []; dbOptionsLocal.value = []; dbOptionsRemote.value = [];