@ -0,0 +1,13 @@ |
|||||
|
{ |
||||
|
"name": "mysql5.7", |
||||
|
"url": "https://gitee.com/ruitao_admin/godoos-mysql5.7/releases/download/mysql5.7/mysql5.7.zip", |
||||
|
"isDev": true, |
||||
|
"needDownload": true, |
||||
|
"needInstall": true, |
||||
|
"version": "5.7.37", |
||||
|
"icon": "https://img0.baidu.com/it/u=1087008535,3349487719&fm=253&fmt=auto&app=138&f=PNG?w=969&h=500", |
||||
|
"checkProgress": true, |
||||
|
"hasRestart": true, |
||||
|
"setting": true, |
||||
|
"isOn": true |
||||
|
} |
@ -0,0 +1,26 @@ |
|||||
|
[client] |
||||
|
port = 3306 |
||||
|
|
||||
|
[mysql] |
||||
|
no-auto-rehash |
||||
|
default-character-set = utf8 |
||||
|
|
||||
|
[mysqld] |
||||
|
basedir = "" |
||||
|
datadir = "data" |
||||
|
port = 3306 |
||||
|
server_id = 1 |
||||
|
character-set-server = utf8 |
||||
|
|
||||
|
explicit_defaults_for_timestamp = on |
||||
|
skip-ssl |
||||
|
|
||||
|
table_open_cache = 256 |
||||
|
|
||||
|
log_timestamps = SYSTEM |
||||
|
|
||||
|
log-error = "logs/mysql.log" |
||||
|
log_syslog = 0 |
||||
|
[mysqldump] |
||||
|
quick |
||||
|
max_allowed_packet = 512M |
@ -0,0 +1,26 @@ |
|||||
|
[client] |
||||
|
port = {port} |
||||
|
|
||||
|
[mysql] |
||||
|
no-auto-rehash |
||||
|
default-character-set = utf8 |
||||
|
|
||||
|
[mysqld] |
||||
|
basedir = "{exePath}" |
||||
|
datadir = "{dataDir}" |
||||
|
port = {port} |
||||
|
server_id = 1 |
||||
|
character-set-server = utf8 |
||||
|
|
||||
|
explicit_defaults_for_timestamp = on |
||||
|
skip-ssl |
||||
|
|
||||
|
table_open_cache = 256 |
||||
|
|
||||
|
log_timestamps = SYSTEM |
||||
|
|
||||
|
log-error = "{logDir}/mysql.log" |
||||
|
log_syslog = 0 |
||||
|
[mysqldump] |
||||
|
quick |
||||
|
max_allowed_packet = 512M |
@ -0,0 +1 @@ |
|||||
|
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456'; |
@ -0,0 +1 @@ |
|||||
|
ALTER USER 'root'@'localhost' IDENTIFIED BY '{password}'; |
@ -0,0 +1,314 @@ |
|||||
|
<!DOCTYPE html> |
||||
|
<html lang="zh-CN"> |
||||
|
|
||||
|
<head> |
||||
|
<meta charset="UTF-8"> |
||||
|
<title>MySQL 设置</title> |
||||
|
<!-- 可以在这里添加CSS样式 --> |
||||
|
<style> |
||||
|
body { |
||||
|
font-family: Arial, sans-serif; |
||||
|
margin: 0; |
||||
|
padding: 0; |
||||
|
} |
||||
|
|
||||
|
.container { |
||||
|
max-width: 500px; |
||||
|
margin: 10px auto; |
||||
|
background: white; |
||||
|
padding: 20px; |
||||
|
box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); |
||||
|
} |
||||
|
|
||||
|
h3 { |
||||
|
text-align: center; |
||||
|
} |
||||
|
|
||||
|
label { |
||||
|
margin-top: 10px; |
||||
|
} |
||||
|
|
||||
|
input { |
||||
|
padding: 10px; |
||||
|
border: 1px solid #ddd; |
||||
|
border-radius: 4px; |
||||
|
} |
||||
|
|
||||
|
.button { |
||||
|
margin-top: 20px; |
||||
|
padding: 10px 20px; |
||||
|
background-color: #007BFF; |
||||
|
color: white; |
||||
|
border: none; |
||||
|
border-radius: 4px; |
||||
|
cursor: pointer; |
||||
|
} |
||||
|
|
||||
|
.button:hover { |
||||
|
background-color: #0056b3; |
||||
|
} |
||||
|
|
||||
|
/* 模态对话框背景 */ |
||||
|
.modal { |
||||
|
display: none; |
||||
|
/* 默认隐藏 */ |
||||
|
position: fixed; |
||||
|
/* 固定位置 */ |
||||
|
z-index: 1; |
||||
|
/* 层叠顺序 */ |
||||
|
left: 0; |
||||
|
top: 0; |
||||
|
width: 100%; |
||||
|
/* 全屏宽度 */ |
||||
|
height: 100%; |
||||
|
/* 全屏高度 */ |
||||
|
overflow: auto; |
||||
|
/* 启用滚动条 */ |
||||
|
background-color: rgba(0, 0, 0, 0.4); |
||||
|
/* 半透明黑色背景 */ |
||||
|
} |
||||
|
|
||||
|
/* 模态对话框内容 */ |
||||
|
.modal-content { |
||||
|
background-color: #fefefe; |
||||
|
margin: 15% auto; |
||||
|
/* 15% 从顶部开始,居中 */ |
||||
|
padding: 20px; |
||||
|
border: 1px solid #888; |
||||
|
width: 80%; |
||||
|
/* 或者设置为固定宽度 */ |
||||
|
} |
||||
|
|
||||
|
/* 关闭按钮 */ |
||||
|
.close { |
||||
|
color: #aaa; |
||||
|
float: right; |
||||
|
font-size: 28px; |
||||
|
font-weight: bold; |
||||
|
} |
||||
|
|
||||
|
.close:hover, |
||||
|
.close:focus { |
||||
|
color: black; |
||||
|
text-decoration: none; |
||||
|
cursor: pointer; |
||||
|
} |
||||
|
|
||||
|
.tab { |
||||
|
overflow: hidden; |
||||
|
} |
||||
|
|
||||
|
/* Tab按钮样式 */ |
||||
|
.tab button { |
||||
|
background-color: inherit; |
||||
|
float: left; |
||||
|
border: none; |
||||
|
outline: none; |
||||
|
cursor: pointer; |
||||
|
padding: 14px 16px; |
||||
|
transition: 0.3s; |
||||
|
} |
||||
|
|
||||
|
/* 活动的tab按钮高亮 */ |
||||
|
.tab button:hover { |
||||
|
background-color: #ddd; |
||||
|
} |
||||
|
|
||||
|
.tab button.active { |
||||
|
background-color: #ccc; |
||||
|
} |
||||
|
|
||||
|
/* Tab页内容样式 */ |
||||
|
.tabcontent { |
||||
|
display: none; |
||||
|
padding: 6px 12px; |
||||
|
border-top: 1px solid #ccc; |
||||
|
flex-direction: column; |
||||
|
} |
||||
|
</style> |
||||
|
</head> |
||||
|
|
||||
|
<body> |
||||
|
<div class="container"> |
||||
|
<h3>MySQL 设置</h3> |
||||
|
<div class="tab"> |
||||
|
<button class="tablinks" onclick="openTab(event, 'General')">常规设置</button> |
||||
|
<button class="tablinks" onclick="openTab(event, 'Password')">设置密码</button> |
||||
|
</div> |
||||
|
<div id="General" class="tabcontent"> |
||||
|
<label for="dataDir">存储地址:</label> |
||||
|
<input type="text" id="dataDir" name="dataDir"> |
||||
|
|
||||
|
<label for="logDir">日志地址:</label> |
||||
|
<input type="text" id="logDir" name="logDir"> |
||||
|
|
||||
|
<label for="port">端口号:</label> |
||||
|
<input type="text" id="port" name="port"> |
||||
|
|
||||
|
<button type="submit" id="saveConfig" class="button">保存</button> |
||||
|
</div> |
||||
|
<div id="Password" class="tabcontent"> |
||||
|
<label for="password">密码:</label> |
||||
|
<input type="password" id="password" name="password" placeholder="请输入数据库密码,不能小于3位"> |
||||
|
|
||||
|
<button type="submit" id="savePwd" class="button">保存</button> |
||||
|
</div> |
||||
|
</div> |
||||
|
<div id="myModal" class="modal"> |
||||
|
<div class="modal-content"> |
||||
|
<span class="close">×</span> |
||||
|
<p id="modalText"></p> |
||||
|
</div> |
||||
|
</div> |
||||
|
<script> |
||||
|
function openTab(evt, tabName) { |
||||
|
var i, tabcontent, tablinks; |
||||
|
tabcontent = document.getElementsByClassName("tabcontent"); |
||||
|
for (i = 0; i < tabcontent.length; i++) { |
||||
|
tabcontent[i].style.display = "none"; |
||||
|
} |
||||
|
tablinks = document.getElementsByClassName("tablinks"); |
||||
|
for (i = 0; i < tablinks.length; i++) { |
||||
|
tablinks[i].className = tablinks[i].className.replace(" active", ""); |
||||
|
} |
||||
|
document.getElementById(tabName).style.display = "flex"; |
||||
|
evt.currentTarget.className += " active"; |
||||
|
} |
||||
|
document.addEventListener('DOMContentLoaded', function () { |
||||
|
let localData = localStorage.getItem('mysqlSettings'); |
||||
|
if (localData) { |
||||
|
localData = JSON.parse(localData); |
||||
|
// 填充表单字段 |
||||
|
document.getElementById('dataDir').value = localData.dataDir; |
||||
|
document.getElementById('logDir').value = localData.logDir; |
||||
|
document.getElementById('port').value = localData.port; |
||||
|
//document.getElementById('password').value = savedData.password; |
||||
|
} |
||||
|
// 获取模态对话框元素 |
||||
|
const modal = document.getElementById("myModal"); |
||||
|
// 获取关闭按钮 |
||||
|
const span = document.getElementsByClassName("close")[0]; |
||||
|
// 获取模态对话框文本 |
||||
|
const modalText = document.getElementById("modalText"); |
||||
|
// 页面加载时激活第一个 tab |
||||
|
document.querySelector('.tablinks:first-child').click(); |
||||
|
|
||||
|
|
||||
|
function showMsg(msg) { |
||||
|
// 替换 alert 为显示模态对话框 |
||||
|
modal.style.display = "block"; |
||||
|
modalText.textContent = msg; |
||||
|
} |
||||
|
async function OpenDirDialog() { |
||||
|
if (window.go) { |
||||
|
return window['go']['app']['App']['OpenDirDialog'](); |
||||
|
} else { |
||||
|
return "" |
||||
|
} |
||||
|
} |
||||
|
document.getElementById('dataDir').addEventListener('click', async function () { |
||||
|
let dir = await OpenDirDialog(); |
||||
|
if (dir) { |
||||
|
document.getElementById('dataDir').value = dir; |
||||
|
} |
||||
|
}); |
||||
|
document.getElementById('logDir').addEventListener('click', async function () { |
||||
|
let dir = await OpenDirDialog(); |
||||
|
if (dir) { |
||||
|
document.getElementById('logDir').value = dir; |
||||
|
} |
||||
|
}); |
||||
|
// 添加事件监听器来处理表单提交 |
||||
|
document.getElementById('saveConfig').addEventListener('click', async function (event) { |
||||
|
event.preventDefault(); // 阻止默认的表单提交行为 |
||||
|
|
||||
|
// 获取表单字段的值 |
||||
|
const dataDir = document.getElementById('dataDir').value; |
||||
|
const logDir = document.getElementById('logDir').value; |
||||
|
const port = document.getElementById('port').value; |
||||
|
|
||||
|
// 表单字段的校验 |
||||
|
if (!dataDir || !logDir || !port) { |
||||
|
showMsg('所有字段都是必填项!'); |
||||
|
return; |
||||
|
} |
||||
|
|
||||
|
// 端口应该是一个数字 |
||||
|
if (isNaN(port)) { |
||||
|
showMsg('端口号必须是一个数字!'); |
||||
|
return; |
||||
|
} |
||||
|
|
||||
|
// 假设端口号应该在 1 到 65535 之间 |
||||
|
if (port < 1 || port > 65535) { |
||||
|
showMsg('端口号必须在 1 到 65535 之间!'); |
||||
|
return; |
||||
|
} |
||||
|
const postData = { |
||||
|
dataDir: dataDir, |
||||
|
logDir: logDir, |
||||
|
port: port, |
||||
|
name: "mysql5.7", |
||||
|
cmdKey: "setting" |
||||
|
} |
||||
|
const comp = await fetch('http://localhost:56780/store/setting', { |
||||
|
method: 'POST', |
||||
|
headers: { |
||||
|
'Content-Type': 'application/json' |
||||
|
}, |
||||
|
body: JSON.stringify(postData) |
||||
|
}); |
||||
|
if (!comp.ok) { |
||||
|
showMsg('设置失败'); |
||||
|
return; |
||||
|
} |
||||
|
// 存储数据到 localStorage |
||||
|
localStorage.setItem('mysqlSettings', JSON.stringify(postData)); |
||||
|
showMsg('设置成功'); |
||||
|
}); |
||||
|
document.getElementById('savePwd').addEventListener('click', async function (event) { |
||||
|
event.preventDefault(); // 阻止默认的表单提交行为 |
||||
|
|
||||
|
// 获取表单字段的值 |
||||
|
const password = document.getElementById('password').value; |
||||
|
|
||||
|
// 表单字段的校验 |
||||
|
if (!password || password.length < 3) { |
||||
|
showMsg('密码不能为空'); |
||||
|
return; |
||||
|
} |
||||
|
const pwData = { |
||||
|
password: password, |
||||
|
name: "mysql5.7", |
||||
|
cmdKey: "changePassword" |
||||
|
} |
||||
|
const res = await fetch('http://localhost:56780/store/setting', { |
||||
|
method: 'POST', |
||||
|
headers: { |
||||
|
'Content-Type': 'application/json' |
||||
|
}, |
||||
|
body: JSON.stringify(pwData) |
||||
|
}); |
||||
|
if (!res.ok) { |
||||
|
showMsg('设置失败'); |
||||
|
return; |
||||
|
} |
||||
|
|
||||
|
showMsg('设置成功'); |
||||
|
}); |
||||
|
// 当用户点击关闭按钮时关闭模态对话框 |
||||
|
span.onclick = function () { |
||||
|
modal.style.display = "none"; |
||||
|
} |
||||
|
|
||||
|
// 当用户点击模态对话框以外的地方时关闭模态对话框 |
||||
|
window.onclick = function (event) { |
||||
|
if (event.target == modal) { |
||||
|
modal.style.display = "none"; |
||||
|
} |
||||
|
} |
||||
|
}); |
||||
|
</script> |
||||
|
</body> |
||||
|
|
||||
|
</html> |
After Width: | Height: | Size: 3.1 KiB |
@ -0,0 +1,84 @@ |
|||||
|
{ |
||||
|
"name": "mysql5.7", |
||||
|
"icon": "mysql.png", |
||||
|
"setting": { |
||||
|
"binPath": "{exePath}/bin/mysqld.exe", |
||||
|
"confPath": "{exePath}/my.ini", |
||||
|
"progressName": "mysqld.exe", |
||||
|
"isOn": true |
||||
|
}, |
||||
|
"config": { |
||||
|
"password": "root", |
||||
|
"port": 3306, |
||||
|
"dataDir": "{exePath}/data", |
||||
|
"logDir": "{exePath}/logs" |
||||
|
}, |
||||
|
"commands": { |
||||
|
"initData": [ |
||||
|
{ |
||||
|
"name": "exec", |
||||
|
"binPath": "{exePath}/bin/mysqld.exe", |
||||
|
"cmds": [ |
||||
|
"--defaults-file={exePath}/my.ini", |
||||
|
"--initialize" |
||||
|
], |
||||
|
"waiting": 1 |
||||
|
}, |
||||
|
{ |
||||
|
"name": "exec", |
||||
|
"binPath": "{exePath}/bin/mysqld.exe", |
||||
|
"cmds": [ |
||||
|
"--defaults-file={exePath}/my.ini", |
||||
|
"--init-file={exePath}/password.txt" |
||||
|
], |
||||
|
"waiting": 3, |
||||
|
"kill": true |
||||
|
}, |
||||
|
{ |
||||
|
"name": "start" |
||||
|
} |
||||
|
], |
||||
|
"setting": [ |
||||
|
{ |
||||
|
"name": "changeFile", |
||||
|
"tplPath": "{exePath}/my.ini.tpl", |
||||
|
"filePath": "{exePath}/my.ini" |
||||
|
}, |
||||
|
{ |
||||
|
"name": "initData" |
||||
|
} |
||||
|
], |
||||
|
"changePassword": [ |
||||
|
{ |
||||
|
"name": "changeFile", |
||||
|
"tplPath": "{exePath}/password.txt.tpl", |
||||
|
"filePath": "{exePath}/password.txt" |
||||
|
}, |
||||
|
{ |
||||
|
"name": "stop" |
||||
|
}, |
||||
|
{ |
||||
|
"name": "exec", |
||||
|
"binPath": "{exePath}/bin/mysqld.exe", |
||||
|
"cmds": [ |
||||
|
"--defaults-file={exePath}/my.ini", |
||||
|
"--init-file={exePath}/password.txt" |
||||
|
], |
||||
|
"waiting": 3, |
||||
|
"kill": true |
||||
|
} |
||||
|
] |
||||
|
}, |
||||
|
"install": { |
||||
|
"installEnvs": [], |
||||
|
"installCmds": [ |
||||
|
"initData" |
||||
|
] |
||||
|
}, |
||||
|
"start": { |
||||
|
"startEnvs": [], |
||||
|
"startCmds": [ |
||||
|
"--defaults-file={exePath}/my.ini" |
||||
|
] |
||||
|
} |
||||
|
} |
Before Width: | Height: | Size: 91 KiB |
Before Width: | Height: | Size: 526 KiB |
Before Width: | Height: | Size: 99 KiB |
Before Width: | Height: | Size: 222 KiB |
Before Width: | Height: | Size: 456 KiB |
Before Width: | Height: | Size: 50 KiB |
Before Width: | Height: | Size: 211 KiB |
Before Width: | Height: | Size: 513 KiB |
Before Width: | Height: | Size: 543 KiB |
Before Width: | Height: | Size: 167 KiB |
Before Width: | Height: | Size: 426 KiB |
Before Width: | Height: | Size: 441 KiB |
Before Width: | Height: | Size: 93 KiB |
Before Width: | Height: | Size: 147 KiB |
Before Width: | Height: | Size: 272 KiB |
Before Width: | Height: | Size: 600 KiB |
Before Width: | Height: | Size: 430 KiB |