mirror of
https://github.com/MHSanaei/3x-ui.git
synced 2026-06-08 06:04:10 +00:00
feat: add database management menu (option 27) to x-ui.sh
This commit is contained in:
parent
d0592a1be8
commit
ecc724b787
1 changed files with 145 additions and 2 deletions
147
x-ui.sh
147
x-ui.sh
|
|
@ -2202,6 +2202,144 @@ show_usage() {
|
||||||
└────────────────────────────────────────────────────────────────┘"
|
└────────────────────────────────────────────────────────────────┘"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Read dbType from /etc/x-ui/x-ui.json
|
||||||
|
read_json_dbtype() {
|
||||||
|
local json_path="/etc/x-ui/x-ui.json"
|
||||||
|
if [ ! -f "$json_path" ]; then
|
||||||
|
echo "sqlite"
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
# Try nested format first (other.dbType)
|
||||||
|
local db_type=$(grep -o '"dbType"[[:space:]]*:[[:space:]]*"[^"]*"' "$json_path" | head -1 | sed 's/.*"dbType"[[:space:]]*:[[:space:]]*"\([^"]*\)".*/\1/')
|
||||||
|
if [ -z "$db_type" ]; then
|
||||||
|
echo "sqlite"
|
||||||
|
else
|
||||||
|
echo "$db_type"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Show current database status
|
||||||
|
db_show_status() {
|
||||||
|
local current_type=$(read_json_dbtype)
|
||||||
|
echo -e "${green}当前数据库类型: ${current_type}${plain}"
|
||||||
|
if [ "$current_type" = "mariadb" ]; then
|
||||||
|
local json_path="/etc/x-ui/x-ui.json"
|
||||||
|
local host=$(grep -o '"dbHost"[[:space:]]*:[[:space:]]*"[^"]*"' "$json_path" 2>/dev/null | head -1 | sed 's/.*"dbHost"[[:space:]]*:[[:space:]]*"\([^"]*\)".*/\1/')
|
||||||
|
local port=$(grep -o '"dbPort"[[:space:]]*:[[:space:]]*"[^"]*"' "$json_path" 2>/dev/null | head -1 | sed 's/.*"dbPort"[[:space:]]*:[[:space:]]*"\([^"]*\)".*/\1/')
|
||||||
|
local dbname=$(grep -o '"dbName"[[:space:]]*:[[:space:]]*"[^"]*"' "$json_path" 2>/dev/null | head -1 | sed 's/.*"dbName"[[:space:]]*:[[:space:]]*"\([^"]*\)".*/\1/')
|
||||||
|
echo -e "${green}MariaDB 主机: ${host:-127.0.0.1}:${port:-3306}${plain}"
|
||||||
|
echo -e "${green}数据库名: ${dbname:-3xui}${plain}"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Switch to MariaDB
|
||||||
|
db_switch_to_mariadb() {
|
||||||
|
local current_type=$(read_json_dbtype)
|
||||||
|
if [ "$current_type" = "mariadb" ]; then
|
||||||
|
echo -e "${yellow}当前已经是 MariaDB${plain}"
|
||||||
|
db_menu
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo -e "${green}请输入 MariaDB 连接信息(直接回车使用默认值):${plain}"
|
||||||
|
|
||||||
|
read -rp "MariaDB IP(默认 127.0.0.1): " db_host
|
||||||
|
db_host=${db_host:-127.0.0.1}
|
||||||
|
|
||||||
|
read -rp "MariaDB 端口(默认 3306): " db_port
|
||||||
|
db_port=${db_port:-3306}
|
||||||
|
|
||||||
|
read -rp "MariaDB 用户名: " db_user
|
||||||
|
if [ -z "$db_user" ]; then
|
||||||
|
echo -e "${red}用户名不能为空${plain}"
|
||||||
|
db_menu
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
read -rsp "MariaDB 密码: " db_pass
|
||||||
|
echo
|
||||||
|
if [ -z "$db_pass" ]; then
|
||||||
|
echo -e "${red}密码不能为空${plain}"
|
||||||
|
db_menu
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
read -rp "数据库名(默认 3xui): " db_name
|
||||||
|
db_name=${db_name:-3xui}
|
||||||
|
|
||||||
|
echo -e "${green}正在配置 MariaDB 连接...${plain}"
|
||||||
|
${xui_folder}/x-ui setting -dbType mariadb -dbHost "$db_host" -dbPort "$db_port" -dbUser "$db_user" -dbPassword "$db_pass" -dbName "$db_name" >/dev/null 2>&1
|
||||||
|
|
||||||
|
echo -e "${green}正在迁移数据从 SQLite 到 MariaDB...${plain}"
|
||||||
|
${xui_folder}/x-ui migrate-db
|
||||||
|
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
echo -e "${green}数据库切换成功,正在重启面板...${plain}"
|
||||||
|
restart
|
||||||
|
else
|
||||||
|
echo -e "${red}数据迁移失败,正在回滚到 SQLite...${plain}"
|
||||||
|
${xui_folder}/x-ui setting -dbType sqlite >/dev/null 2>&1
|
||||||
|
restart
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Switch to SQLite
|
||||||
|
db_switch_to_sqlite() {
|
||||||
|
local current_type=$(read_json_dbtype)
|
||||||
|
if [ "$current_type" = "sqlite" ]; then
|
||||||
|
echo -e "${yellow}当前已经是 SQLite${plain}"
|
||||||
|
db_menu
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo -e "${green}正在迁移数据从 MariaDB 到 SQLite...${plain}"
|
||||||
|
${xui_folder}/x-ui setting -dbType sqlite >/dev/null 2>&1
|
||||||
|
${xui_folder}/x-ui migrate-db
|
||||||
|
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
echo -e "${green}数据库切换成功,正在重启面板...${plain}"
|
||||||
|
restart
|
||||||
|
else
|
||||||
|
echo -e "${red}数据迁移失败${plain}"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Database management menu
|
||||||
|
db_menu() {
|
||||||
|
local current_type=$(read_json_dbtype)
|
||||||
|
|
||||||
|
echo -e "
|
||||||
|
╔────────────────────────────────────────────────╗
|
||||||
|
│ ${green}数据库管理${plain} │
|
||||||
|
│────────────────────────────────────────────────│
|
||||||
|
│ ${green}0.${plain} 返回主菜单 │
|
||||||
|
│ ${green}1.${plain} 查看当前数据库类型(当前: ${current_type}) │
|
||||||
|
│ ${green}2.${plain} 切换到 MariaDB │
|
||||||
|
│ ${green}3.${plain} 切换到 SQLite │
|
||||||
|
╚════════════════════════════════════════════════╝
|
||||||
|
"
|
||||||
|
read -rp "请输入选择 [0-3]:" num
|
||||||
|
case "${num}" in
|
||||||
|
0)
|
||||||
|
show_menu
|
||||||
|
;;
|
||||||
|
1)
|
||||||
|
db_show_status
|
||||||
|
db_menu
|
||||||
|
;;
|
||||||
|
2)
|
||||||
|
db_switch_to_mariadb
|
||||||
|
;;
|
||||||
|
3)
|
||||||
|
db_switch_to_sqlite
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo -e "${red}无效选项,请选择有效数字。${plain}\n"
|
||||||
|
db_menu
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
show_menu() {
|
show_menu() {
|
||||||
echo -e "
|
echo -e "
|
||||||
╔────────────────────────────────────────────────╗
|
╔────────────────────────────────────────────────╗
|
||||||
|
|
@ -2239,10 +2377,12 @@ show_menu() {
|
||||||
│ ${green}24.${plain} BBR 管理 │
|
│ ${green}24.${plain} BBR 管理 │
|
||||||
│ ${green}25.${plain} 更新 Geo 文件 │
|
│ ${green}25.${plain} 更新 Geo 文件 │
|
||||||
│ ${green}26.${plain} 网速测试 (Speedtest) │
|
│ ${green}26.${plain} 网速测试 (Speedtest) │
|
||||||
|
│────────────────────────────────────────────────│
|
||||||
|
│ ${green}27.${plain} 数据库管理 │
|
||||||
╚────────────────────────────────────────────────╝
|
╚────────────────────────────────────────────────╝
|
||||||
"
|
"
|
||||||
show_status
|
show_status
|
||||||
echo && read -rp "请输入选择 [0-26]:" num
|
echo && read -rp "请输入选择 [0-27]:" num
|
||||||
|
|
||||||
case "${num}" in
|
case "${num}" in
|
||||||
0)
|
0)
|
||||||
|
|
@ -2326,8 +2466,11 @@ show_menu() {
|
||||||
26)
|
26)
|
||||||
run_speedtest
|
run_speedtest
|
||||||
;;
|
;;
|
||||||
|
27)
|
||||||
|
check_install && db_menu
|
||||||
|
;;
|
||||||
*)
|
*)
|
||||||
LOGE "请输入正确的数字 [0-26]"
|
LOGE "请输入正确的数字 [0-27]"
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue