#!/usr/bin/perl
use strict;
use Getopt::Long;
use lib 'lib';
use MogileFS::Store; // 解压文件夹对应的位置是lib\MogileFS,直接使用模块吗?对应于Store.pm, perl module?
use MogileFS::Config;
# Rename binary in process list to make init scripts saner
$0 = $_ = $0;
my %args = ( // Perl这里定义的是映射类型吗?Pythony也不怎么用,很快就搞混了。
dbhost => "localhost",
dbport => undef, // 这种变量可以设置为undef的?
dbname => "mogilefs",
dbrootuser => undef,
dbrootpass => "",
dbuser => "mogile",
dbpass => "",
);
my $opt_help;
my $opt_verbose = 0;
my $opt_yes = 0;
my $opt_noschemabump;
my $dbtype = "MySQL"; // 默认是MySQL数据库
my $plugins;
usage()
unless GetOptions(
"dbhost=s" => \$args{dbhost},
"dbport=s" => \$args{dbport},
"dbname=s" => \$args{dbname},
"dbrootuser=s" => \$args{dbrootuser},
"dbrootpassword:s" => \$args{dbrootpass},
"dbuser=s" => \$args{dbuser},
"dbpassword:s" => \$args{dbpass},
"help" => \$opt_help,
"verbose" => \$opt_verbose,
"yes" => \$opt_yes,
"noschemabump" => \$opt_noschemabump,
"type=s" => \$dbtype,
"plugins=s" => \$plugins,
); // 这个GetOptions定义在何处的?
usage() if $opt_help;
# Be nice about what the default admin user is called.
if(!defined($args{dbrootuser})) { // 上面出现过这个变量,但是是udef
$args{dbrootuser} = 'root' if $dbtype =~ /MySQL/i; // ... 原来使用正则表达式了,默认是使用MySQL
$args{dbrootuser} = 'postgres' if $dbtype =~ /Postgres/i;
}
# Saner port management.
# This should default to the UNIX sockets on localhost
if(!defined($args{dbport}) and $args{dbhost} != "localhost" and $args{dbhost} != "127.0.0.1") {
$args{dbport} = '3306' if $dbtype =~ /MySQL/i;
$args{dbport} = '5432' if $dbtype =~ /Postgres/i;
}
sub usage { // 这个sub usage的sub用来干什么的?
die <<USAGE;
// mogdbsetup --help才会显示如下信息
Usage: mogdbsetup [opts]
Options:
Default Description
============ ===========================================
--verbose <off> Be verbose about what\'s happening.
--dbhost= localhost hostname or IP to database server.
--dbport= dbd default port number to database server.
--dbname= mogilefs database name to create/upgrade.
--dbrootuser= root Database administrator username. Only needed
for initial setup, not subsequent upgrades.
--dbrootpass= <blank> Database administrator password. Only needed
for initial setup, not subsequent upgrades.
--dbuser= mogile Regular database user to create and/or use
for MogileFS database. This is what the
mogilefsd trackers connect as.
--dbpass= <blank> You should change this, especially if your
database servers are accessible to other users
on the network. But they shouldn't be
if you're running MogileFS, because MogileFS
assumes your network is closed.
--type= MySQL Which MogileFS::Store implementation to use.
Available: MySQL, Postgres
--yes Run without questions.
// 这个USAGE是什么,提示时并不显示?
USAGE
}
my $sclass = "MogileFS::Store::$dbtype";
eval "use $sclass; 1;" or die "Failed to load $sclass: $@";
foreach my $plugin (split /\s*,\s*/, $plugins) {
eval "use MogileFS::Plugin::$plugin; 1;" or die "Failed to load plugin $plugin: $@";
}
// 运行mogdbsetup,首先出来的是下面这段话
confirm("This will attempt to setup or upgrade your MogileFS database.\nIt won't destroy existing data.\nRun with --help for more information. Run with --yes to shut up these prompts.\n\nContinue?", 0);
// 如果运行命令不带任何参数,现在执行显示报错信息 @error_msg1
$sclass->on_status(\&status);
$sclass->on_confirm(\&confirm);
MogileFS::Config->load_config; // 这种是什么写法?
// 下面是生成数据库连接对象吗?
my $sto = $sclass->new_from_mogdbsetup(
map { $_ => $args{$_} }
qw(dbhost dbport dbname
dbrootuser dbrootpass
dbuser dbpass)
); // qw用于生成数据库连接串?
my $dbh = $sto->dbh;
$sto->setup_database
or die "Database upgrade failed.\n";
my $latestver = MogileFS::Store->latest_schema_version;
if ($opt_noschemabump) {
warn "\n*\n* Per your request, NOT UPGRADING to $latestver. I assume you understand why.\n*\n";
} else {
$sto->set_schema_vesion($latestver);
}
warn "Done.\n" if $opt_verbose;
exit 0;
############################################################################
sub confirm {
my $q = shift;
my $def = shift;
$def = 1 unless defined $def;
return 1 if $opt_yes;
my $deftext = $def ? "[Y/n]" : "[N/y]";
print "\n$q $deftext: ";
my $ans = <STDIN>;
if ($ans =~ /^\s*$/) {
die "Stopped.\n" unless $def;
return 0;
}
return 1 if $ans =~ /^y/i;
die "Stopped.\n";
}
sub status {
warn "$_[0]\n" if $opt_verbose;
}
@error_msg1:Failed to connect to DBI:mysql:mysql;host=localhost as specified root user (root): Access denied for user 'root'@'localhost' (using password: NO)
[root@localhost ~]#
分享到:
相关推荐
可以使用`mogdbsetup`脚本来初始化MogileFS所需的数据库表结构。 3. **安装跟踪器**:在选定的服务器上安装MogileFS跟踪器程序`mogilefsd`。配置好后,启动跟踪器服务。 4. **部署存储节点**:在存储节点服务器上...
通过使用`mogdbsetup`程序,可以完成数据库的初始化设置。为了确保系统的高可用性,建议采用HA(High Availability)结构来部署数据库服务器。 - **StorageServer(存储节点)**:通过启动`mogstored`程序,当前机器...
2025职业教育知识竞赛题库(含答案).pptx
"SOA海鸥算法优化下的KELM核极限学习机分类MATLAB代码详解:传感器故障诊断数据集应用与本地EXCEL数据读取功能",(SOA-KELM)海鸥算法SOA优化KELM核极限学习机分类MATLAB代码 代码注释清楚。 main为运行主程序,可以读取本地EXCEL数据。 很方便,容易上手。 (以传感器故障诊断数据集为例) ,核心关键词:SOA-KELM;海鸥算法优化;核极限学习机分类;MATLAB代码;代码注释清楚;main程序;读取本地EXCEL数据;传感器故障诊断数据集。,SOA-KELM分类算法MATLAB代码:海鸥优化核极限学习机,轻松上手,读取EXCEL数据集进行传感器故障诊断
内容概要:本文由世界经济论坛与Capgemini联合发布,主要阐述了AI代理从简单程序演变为复杂自主系统的进程,强调了它们在现代各行业如医疗保健、教育及金融服务等方面所发挥的作用,并讨论了其潜在收益以及伴随的风险和挑战。文中详细介绍了AI代理的发展历程、核心技术趋势(深度学习、强化学习)、多种类型的AI代理及其系统架构,同时对未来的发展方向——多智能体系统进行了展望,探讨了提高生产力、优化资源配置的新机会。 适合人群:对人工智能感兴趣的各界人士,尤其是关注技术创新对企业和社会长远影响的决策者和技术领导者,如商业领袖、政府官员及其他利益相关方。 使用场景及目标:①帮助政策制定者理解AI代理的功能和应用场景;②为企业管理者提供关于部署和管理AI系统的指导;③为研究者指明未来科研方向并探讨伦理和社会责任等问题;④为技术人员揭示当前最先进技术和最佳实践案例。 其他说明:文中还提到了随着更加先进的AI代理不断涌现,确保安全性和有效监管将是未来发展的重要议题之一。此外,跨行业的共识对于将AI代理顺利整合到各个部门至关重要。文章指出需要建立稳健治理机制来保障AI技术健康发展并服务于公共利益最大化的目标。
2025网络安全理论知识考试题(含答案).pptx
项目已获导师指导并通过的高分毕业设计项目,可作为课程设计和期末大作业,下载即用无需修改,项目完整确保可以运行。 包含:项目源码、数据库脚本、软件工具等,该项目可以作为毕设、课程设计使用,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 项目都经过严格调试,确保可以运行!可以放心下载 技术组成 语言:java 开发环境:idea 数据库:MySql8.0 部署环境:Tomcat(建议用 7.x 或者 8.x 版本),maven 数据库工具:navicat
基于FATFS系统的STM32F407 SD卡升级Bootloader程序:自动检测与升级流程,stm32f407 SD卡升级 bootloader程序 基于sdio fatfs系统的stm32 bootloader程序 功能简介: 本程序使用fatfs系统读取bin文件。 开机后会自动检测sd卡,检测到sd卡后,再读取固定名称的bin文件,之后会对bin文件进行首包校验,判断该升级包的起始地址是否正确,正确的话,就循环读取bin文件并写入到flash中。 完成升级。 详细流程请看流程图 ,stm32f407; SD卡升级; bootloader程序; fatfs系统读取bin文件; 检测SD卡; 首包校验; 循环写入flash。,STM32F407 SD卡升级Bootloader程序:基于SDIO FATFS系统实现自动升级功能
2025网络与信息安全技术题库及答案.doc
C# WinForm通用软件开发框架源码,基于VS2019 .NET与DevExpress 21,WebApi连接SQLServer2014数据库,互联网化数据访问模式,C# 源码 WinForm?通用软件开发框架平台源码 基于:C#Winform+ WebApi +SQLServer2014数据库 基于:VS2019.NET? DevExpress 21.2.6控件 基于:SQLServer2014?数据库 客户端通过Http访问WebApi获得json数据的模式,本系统走互联网,只需要把WebApi发布在公网即可。 说明:此框架源码除系统管理功能外,其它无源码 ,C#源码; WinForm; WebApi; SQLServer2014; VS2019.NET; DevExpress控件; 互联网模式; 系统管理功能; 发布。,C# WinForm开发框架:基于DevExpress与WebApi的通用软件平台源码
项目已获导师指导并通过的高分毕业设计项目,可作为课程设计和期末大作业,下载即用无需修改,项目完整确保可以运行。 包含:项目源码、数据库脚本、软件工具等,该项目可以作为毕设、课程设计使用,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 项目都经过严格调试,确保可以运行!可以放心下载 技术组成 语言:java 开发环境:idea 数据库:MySql8.0 部署环境:Tomcat(建议用 7.x 或者 8.x 版本),maven 数据库工具:navicat
基于SqueezeNet迁移学习算法的滚动轴承故障诊断方法研究——在MATLAB r2021b环境下的应用与拓展至多元信号领域的研究,MATLAB环境下一种基于sqeezenet网络迁移学习的滚动轴承故障诊断方法。 算法运行环境为MATLAB r2021b,该代码展示了如何使用深度学习(迁移学习)方法对滚动轴承进行故障诊断,演示了如何将一维轴承振动信号转为二维尺度图图像并使用预训练网络应用迁移学习对轴承故障进行分类。 迁移学习显著减少了传统轴承诊断方法特征提取和特征选择所花费的时间,并在小型数据集中获得了良好的准确性。 算法可迁移至金融时间序列,地震 微震信号,机械振动信号,声发射信号,电压 电流信号,语音信号,声信号,生理信号(ECG,EEG,EMG)等信号。 ,MATLAB环境; SqueezeNet网络; 迁移学习; 滚动轴承故障诊断; 算法运行环境; 一维轴承振动信号转换; 二维尺度图图像; 特征提取和选择; 信号分析;迁移至其他类型信号 (以分号隔开),基于SqueezeNet迁移学习在MATLAB的滚动轴承故障诊断算法优化
基于弱形式PDE建模的COMSOL不相溶两相流渗流水驱油模拟研究,comsol不相溶两相流渗流模拟,水驱油,基于弱形式PDE建模,模型已验证。 ,核心关键词:comsol; 不相溶两相流; 渗流模拟; 水驱油; 弱形式PDE建模; 模型验证。,"基于弱形式PDE建模的COMSOL两相流渗流模拟:验证水驱油模型"
Tiled for Mac是一款功能强大的开源地图编辑器,适用于macOS系统。它支持正交、等距和六边形地图类型,可创建无限大小的地图,并支持多图层编辑。用户可以通过直观的界面快速添加、修改地图元素,使用像素精度放置对象,并支持图块动画和碰撞编辑。Tiled的TMX格式易于理解,支持多种插件扩展,兼容多种游戏引擎,如RPG和平台游戏。它还提供撤销/重做功能,方便用户调整和优化地图。
太阳能光伏MPPT控制蓄电池三阶段充电模型仿真说明文档(附扰动观测法仿真模型,R2015b版),充电控制器,太阳能光伏MPPT控制蓄电池充电模型。 其中,光伏MPPT控制采用扰动观测法(P&O法),蓄电池充电采用三阶段充电控制。 仿真模型附加一份仿真说明文档,便于理解和修改参数。 版本: R2015b ,充电控制器; 光伏MPPT控制; 扰动观测法(P&O法); 蓄电池充电控制; 三阶段充电控制; 仿真模型; 仿真说明文档; 版本:R2015b,"R2015b版:太阳能光伏MPPT三阶段充电控制仿真模型及说明"
项目已获导师指导并通过的高分毕业设计项目,可作为课程设计和期末大作业,下载即用无需修改,项目完整确保可以运行。 包含:项目源码、数据库脚本、软件工具等,该项目可以作为毕设、课程设计使用,前后端代码都在里面。 该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 项目都经过严格调试,确保可以运行!可以放心下载 技术组成 语言:java 开发环境:idea 数据库:MySql8.0 部署环境:Tomcat(建议用 7.x 或者 8.x 版本),maven 数据库工具:navicat
2025医院收费员考试题题库(含答案).docx
"欧姆龙PLC编程新手宝典:标准程序案例集,包括CP1H脉冲编程与触摸屏实战应用",欧姆龙PLC程序欧姆龙案例欧姆龙标准程序 本产品适用于新手或者在校生 本程序包括有欧姆龙CP1H脉冲程序案例,威纶通触摸屏程序,电子版讲义 程序涉及方面广,适合新手入门学习,掌握了这些以后欧姆龙脉冲程序基本通吃,编程起来无压力 本程序设计到CP1H各个轴的程序编写具体用了ACC PLS2 INI等众多指令, 每个轴的程序都是单独的,包括触摸屏在内,您可以直接调用程序套到直接的程序上,只需要把地址稍微改动即可。 本程序适用于新手、自动化专业在校生学习和提高,另外额外赠送主流的CAD电气原理图纸,包含各种主流的PLC接线原理图,各种成功案例,是每个电气工程师学习和提高最必不可少的资料 ,欧姆龙PLC程序; 欧姆龙案例; 欧姆龙标准程序; 新手学习; 在校生; CP1H脉冲程序案例; 威纶通触摸屏程序; 电子版讲义; 编程指令; 程序设计; PLC接线原理图; 成功案例。,欧姆龙PLC入门宝典:从新手到专业工程师的实用指南
"基于Simulink的锂电池SOC估计模型研究:卡尔曼滤波算法的参数辨识与模型优化",锂电池SOC估计模型 simulink SOC估算卡尔曼滤波估算 SOC电池参数辨识模型10个; 卡尔曼滤波算法锂电池SOC估算估算模型15个; 卡尔曼滤波31个; ,锂电池SOC估计模型; Simulink; SOC估算; 卡尔曼滤波估算; 电池参数辨识模型; 锂电池SOC卡尔曼滤波估算模型; 卡尔曼滤波,基于Simulink的锂电池SOC估计与卡尔曼滤波算法研究