#!/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`程序,当前机器...
基于java的贝儿米幼儿教育管理系统答辩PPT.pptx
本压缩包资源说明,你现在往下拉可以看到压缩包内容目录 我是批量上传的基于SpringBoot+Vue的项目,所以描述都一样;有源码有数据库脚本,系统都是测试过可运行的,看文件名即可区分项目~ |Java|SpringBoot|Vue|前后端分离| 开发语言:Java 框架:SpringBoot,Vue JDK版本:JDK1.8 数据库:MySQL 5.7+(推荐5.7,8.0也可以) 数据库工具:Navicat 开发软件: idea/eclipse(推荐idea) Maven包:Maven3.3.9+ 系统环境:Windows/Mac
基于java的消防物资存储系统答辩PPT.pptx
项目经过测试均可完美运行! 环境说明: 开发语言:java jdk:jdk1.8 数据库:mysql 5.7+ 数据库工具:Navicat11+ 管理工具:maven 开发工具:idea/eclipse
项目经过测试均可完美运行! 环境说明: 开发语言:java jdk:jdk1.8 数据库:mysql 5.7+ 数据库工具:Navicat11+ 管理工具:maven 开发工具:idea/eclipse
TA_lib库(whl轮子),直接pip install安装即可,下载即用,非常方便,各个python版本对应的都有。 使用方法: 1、下载下来解压; 2、确保有python环境,命令行进入终端,cd到whl存放的目录,直接输入pip install TA_lib-xxxx.whl就可以安装,等待安装成功,即可使用! 优点:无需C++环境编译,下载即用,方便
使用软件自带的basic脚本编辑制作的脚本 低版本软件无法输出Excel报告,可以通过脚本方式实现这一功能
基于java的就业信息管理系统答辩PPT.pptx
25法理学背诵逻辑.apk.1g
基于java的大学生校园兼职系统答辩PPT.pptx
做到代码,和分析的源数据
本压缩包资源说明,你现在往下拉可以看到压缩包内容目录 我是批量上传的基于SpringBoot+Vue的项目,所以描述都一样;有源码有数据库脚本,系统都是测试过可运行的,看文件名即可区分项目~ |Java|SpringBoot|Vue|前后端分离| 开发语言:Java 框架:SpringBoot,Vue JDK版本:JDK1.8 数据库:MySQL 5.7+(推荐5.7,8.0也可以) 数据库工具:Navicat 开发软件: idea/eclipse(推荐idea) Maven包:Maven3.3.9+ 系统环境:Windows/Mac
项目经过测试均可完美运行! 环境说明: 开发语言:java jdk:jdk1.8 数据库:mysql 5.7+ 数据库工具:Navicat11+ 管理工具:maven 开发工具:idea/eclipse
适用于ensp已经入门人群的学习,有一定难度
基于java的数码论坛系统设计与实现答辩PPT.pptx
tornado-6.4.1-cp38-abi3-macosx_10_9_universal2.whl
基于java的医院信管系统答辩PPT.pptx