npm in china mirrors

使用npm可以很方便的安装各种Node模块,但是npm默认连接的镜像库在国外,致使我们安装模块时很慢,甚至出现卡死现象。

官方镜像

https://registry.npmjs.org/

淘宝镜像

这是一个完整 npmjs.org 镜像,你可以用此代替官方版本(只读),同步频率目前为 10分钟 一次以保证尽量与官方服务同步。
网站地址:https://npm.taobao.org/
registry地址:http://registry.npm.taobao.org

cnpmjs镜像

网站地址:http://cnpmjs.org
registry地址:http://r.cnpmjs.org

 

切换到淘宝镜像

1. 临时使用

npm --registry https://registry.npm.taobao.org

2. 永久使用

npm config set registry https://registry.npm.taobao.org

3. 验证配置

npm config get registry

使用cnpm工具

1. 安装

npm install -g cnpm --registry=https://registry.npm.taobao.org

2. 使用

cnpm install xxx

 

NPM INSTALL FOR CENTOS 7

1.安装gcc

yum install gcc gcc-c++

2.下载node国内镜像(推荐)

wget https://npm.taobao.org/mirrors/node/v16.8.0/node-v16.8.0-linux-x64.tar.gz

3.解压并重命名文件夹

tar -xvf node-v16.8.0-linux-x64.tar.gz
mv node-v16.8.0-linux-x64 node

4.添加环境变量

vi /etc/profile

在文件最后添加以下配置:

export NODE_HOME=/usr/local/node
export PATH=$NODE_HOME/bin:$PATH

5.刷新配置

source /etc/profile

6.验证结果

node -v

npm -v

 

ERRORS

Node Sass version 6.0.1 is incompatible with ^4.0.0

cnpm uninstall node-sass
cnpm install -g cnpm --registry=https://registry.npm.taobao.org
cnpm install node-sass@4.14.1

ERRORS

# gyp error
# cnpm install -g npm

# Cannot find module 'node-sass'
# cnpm uninstall node-sass
# cnpm install node-sass@4.14.1

# Node Sass version 6.0.0 is incompatible with^4.0.0
# cnpm uninstall node-sass
# cnpm install node-sass@4.14.1

# Error: Node Sass does not yet support your current environment
# cnpm rebuild node-sass
# or
# cnpm uninstall --save node-sass
# cnpm cache clean -f
# cnpm install --save node-sass

# npm
# npm uninstall node-sass
# npm install -g cnpm --registry=https://registry.npm.taobao.org
# npm install node-sass@4.14.1

 

 

.

 

发表在 technologys | npm in china mirrors已关闭评论

备忘:常见的消息中间件的简单比较

 

中间件名称 单机吞吐量 客户端语言 文档完备性 社区活跃度 商业支持 消息丢失 所属公司
ActiveMQ 万级 支持多语言,java优先 Apache
RabbitMQ 万级 多语言 Mozilla Public License
RocketMQ 十万级 只支持java Alibaba 理论上不会 阿里开发,已捐献给Apache
Kafka 十万级 多语言,java优先 理论上不会 Apache

 

RocketMQ:

RocketMQ架构主要分为四部分:

Name Server:Name Server的作用就是记录其他节点的信息,它是无状态的(Topic等信息不会持久存储,而是每次由其他节点上报给它,Name Server关闭后将清除所有信息)。
Broker:Broker就是实际上做消息发送的,是一个集群部署上的概念,也可以理解为对应的物理机器。
Consumer:Consumer字面上的意思就是消费者,是消息的接收者,Consumer可以订阅一个或者多个Topic。
Producer:Producer是消息的生产者,它将消息发往对应的消息队列。

心跳机制:

所有的Broker都会和Name Server心跳请求,Broker每隔30秒会向所有的Name Server发送一个心跳包,心跳包中包含了自身所包含的Topic信息;如果在两分钟内都没有接收到某个Broker的心跳包,则认为该Broker已下线了,Name Server会调整Topic跟Broker的关系,但是!!!NameServer不会主动通知Consumer和Producer有Broker宕机了。
Consumer跟Broker是长连接,它会每隔30秒发送心跳信息给Broker,而Broker每隔10秒会扫描一次online的Consumer,如果两分钟内没有收到某个Consumer的心跳包,那么就会断开与该Consumer的连接,并通知该消费组的其他实例,触发该消费者集群的负载均衡。
Producer每隔30秒从Name Server获取Topic和Broker的映射关系,并更新到本地内存中;再跟Topic所涉及的所有Broker建立长连接,并且每隔30秒发送一遍心跳包,此时Broker端也会每隔十秒钟扫描一次当前注册的所有Producer,如果两分钟内没有收到某个Producer的心跳包,那么长连接断开。

 

 

.

发表在 technologys | 备忘:常见的消息中间件的简单比较已关闭评论

CentOS各个版本支持周期

CentOS 各个版本支持周期

版本 发布日期 完全更新 维护更新
3 2004年3月19日 2006年7月20日 2010年10月31日
4 2005年3月9日 2009年3月31日 2012年2月29日
5 2007年4月12日 2014年一季度 2017年3月31日
6 2011年7月10日 2017年二季度 2020年11月30日
7 2014年7月7日 2020年四季度 2024年6月30日
8 -- 2021年12月31日 2021年12月31日
Stream 8 -- -- 2024年05月31日
Stream 9 -- -- --

参考:

https://www.centos.org/cl-vs-cs/

 

CentOS 7版本

 

版本 架构 内核版本 发布日期
7.0-1406 x86-64 3.10.0-123 2014-07-07
7.1-1503 x86-64 3.10.0-229 2015-03-31
7.2-1511 x86-64 3.10.0-327 2015-12-14
7.3-1611 x86-64 3.10.0-514 2016-12-12
7.4-1708 x86-64 3.10.0-693 2017-09-13
7.5-1804 x86-64 3.10.0-862 2018-05-10
7.6-1810 x86-64 3.10.0-957 2018-12-03
7.7-1908 x86-64 3.10.0-1062 2019-09-17

 

终止支持计划

版本 完整更新 维护更新
3 2006-07-20 2010-10-31
4 2009-03-31 2012-02-29
5 2014-01-31 2017-03-31
6 2017-05-10 2020-11-30
7 2020-08-06 2024-06-30
8 2024-05-01 --

 

CentOS 8版本

版本 架构:内核版本:发布日期
8.0-1905 x86-64, POWER8 (le), AArch64:4.18.0-80:2019-09-24

 

Timeline

.

发表在 linux | CentOS各个版本支持周期已关闭评论

中国互联网域名体系 2018

2017年8月,新版《互联网域名管理办法》正式公布,并将于自2017年11月1日起施行,而原信息产业部2004年11月5日公布的《中国互联网络域名管理办法》(原信息产业部令第30号)同时废止。

近日,根据新版《互联网域名管理办法》要求调整后的中国互联网域名体系正式公告。

公告原文如下:

中华人民共和国工业和信息化部公告2018年 第7号

根据《互联网域名管理办法》(工业和信息化部令第43号)第五条的规定,现将调整后的中国互联网域名体系予以公告,自发布之日起施行。

附件:中国互联网域名体系

工业和信息化部

2018年1月29日

 

中国互联网域名体系

一、我国互联网域名体系中各级域名可以由字母(A-Z,a-z,大小写等效)、数字(0-9)、连接符(-)或汉字组成,各级域名之间用实点(.)连接,中文域名的各级域名之间用实点或中文句号(。)连接。

二、我国互联网域名体系在国家顶级域名“.CN”“.中国”之外,设有多个英文和中文顶级域名,其中“.政务”“.公益”顶级域名为面向我国党政群机关等各级政务部门及非营利性机构的专用中文顶级域名。我国互联网域名体系图详见“http://中国互联网域名体系.中国”“http://中国互联网域名体系.政务”或“http://中国互联网域名体系.信息”。

三、国家顶级域名“.CN”之下,设置“类别域名”和“行政区域名”两类二级域名。

设置“类别域名”9个,分别为:“政务”适用于党政群机关等各级政务部门;“公益”适用于非营利性机构;“GOV”适用于政府机构;“ORG”适用于非营利性的组织;“AC”适用于科研机构;“COM”适用于工、商、金融等企业;“EDU”适用于教育机构;“MIL”适用于国防机构;“NET”适用于提供互联网服务的机构。

设置“行政区域名”34个,适用于我国的各省、自治区、直辖市、特别行政区的组织,分别为:“BJ”北京市;“SH”上海市;“TJ”天津市;“CQ”重庆市;“HE”河北省;“SX”山西省;“NM”内蒙古自治区;“LN”辽宁省;“JL”吉林省;“HL”黑龙江省;“JS”江苏省;“ZJ”浙江省;“AH”安徽省;“FJ”福建省;“JX”江西省;“SD”山东省;“HA”河南省;“HB”湖北省;“HN”湖南省;“GD”广东省;“GX”广西壮族自治区;“HI”海南省;“SC”四川省;“GZ”贵州省;“YN”云南省;“XZ”西藏自治区;“SN”陕西省;“GS”甘肃省;“QH”青海省;“NX”宁夏回族自治区;“XJ”新疆维吾尔自治区;“TW”台湾省;“HK”香港特别行政区;“MO”澳门特别行政区。

四、在国家顶级域名“.CN”“.中国”下可以直接申请注册二级域名。

发表在 it | 中国互联网域名体系 2018已关闭评论

python 虚拟环境 virtualenv

安装

pip install virtualenv
or
python -m pip install virtualenv 

创建环境

virtualenv ENV
or
python3 -m venv /path/to/new/virtual/environment

激活

\path\to\env\Scripts\activate

退出

\path\to\env\Scripts\deactivate

删除

直接删除虚拟环境目录

 

.

 

 

发表在 python | python 虚拟环境 virtualenv已关闭评论

Java Swagger memo

服务

pom.xml

<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger2</artifactId>
    <version>2.9.2</version>
</dependency>
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger-ui</artifactId>
    <version>2.9.2</version>
</dependency>

Swagger2.java:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.ParameterBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.schema.ModelRef;
import springfox.documentation.service.*;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spi.service.contexts.SecurityContext;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

import java.util.ArrayList;
import java.util.List;


@Configuration
@EnableSwagger2
public class Swagger2 {

    /**
     * 创建API应用
     * apiInfo() 增加API相关信息
     * 通过select()函数返回一个ApiSelectorBuilder实例,用来控制哪些接口暴露给Swagger来展现,
     * 本例采用指定扫描的包路径来定义指定要建立API的目录。
     *
     * @return
     */
    @Bean
    public Docket createRestApi() {
        ParameterBuilder ticketPar = new ParameterBuilder();
        List<Parameter> pars = new ArrayList<Parameter>();
        ticketPar.name("X-AUTH").description("token")
                .modelRef(new ModelRef("string"))
                .parameterType("header")
                .required(false)
                .build();
        pars.add(ticketPar.build());

        return new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .select()
                .apis(RequestHandlerSelectors.basePackage("cn.user.controller"))
                .paths(PathSelectors.any())
                .build()
                .securitySchemes(securitySchemes())
                .securityContexts(securityContexts());
    }


    private List<ApiKey> securitySchemes() {
        List<ApiKey> apiKeyList= new ArrayList();
        apiKeyList.add(new ApiKey("X-AUTH", "X-AUTH", "header"));
        return apiKeyList;
    }

    private List<SecurityContext> securityContexts() {
        List<SecurityContext> securityContexts=new ArrayList<>();
        securityContexts.add(
                SecurityContext.builder()
                        .securityReferences(defaultAuth())
                        .forPaths(PathSelectors.regex("^(?!auth).*$"))
                        .build());
        return securityContexts;
    }

    List<SecurityReference> defaultAuth() {
        AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything");
        AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];
        authorizationScopes[0] = authorizationScope;
        List<SecurityReference> securityReferences=new ArrayList<>();
        securityReferences.add(new SecurityReference("X-AUTH", authorizationScopes));
        return securityReferences;
    }


    /**
     * 创建该API的基本信息(这些基本信息会展现在文档页面中)
     * 访问地址:/swagger-ui.html
     * @return
     */
    private ApiInfo apiInfo() {
        return new ApiInfoBuilder().title("用户相关接口").build();
    }
}

 

网关(Gateway)

pom.xml


<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger-common</artifactId>
    <version>2.8.0</version>
    <scope>compile</scope>
</dependency>
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger-ui</artifactId>
    <version>2.8.0</version>
</dependency>        
        

SwaggerHandler

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import reactor.core.publisher.Mono;
import springfox.documentation.swagger.web.*;

import java.util.Optional;

@RestController
public class SwaggerHandler {
    @Autowired(required = false)
    private SecurityConfiguration securityConfiguration;
    @Autowired(required = false)
    private UiConfiguration uiConfiguration;
    private final SwaggerResourcesProvider swaggerResources;

    @Autowired
    public SwaggerHandler(SwaggerResourcesProvider swaggerResources) {
        this.swaggerResources = swaggerResources;
    }


    @GetMapping("/swagger-resources/configuration/security")
    public Mono<ResponseEntity<SecurityConfiguration>> securityConfiguration() {
        return Mono.just(new ResponseEntity<>(
                Optional.ofNullable(securityConfiguration).orElse(SecurityConfigurationBuilder.builder().build()), HttpStatus.OK));
    }

    @GetMapping("/swagger-resources/configuration/ui")
    public Mono<ResponseEntity<UiConfiguration>> uiConfiguration() {
        return Mono.just(new ResponseEntity<>(
                Optional.ofNullable(uiConfiguration).orElse(UiConfigurationBuilder.builder().build()), HttpStatus.OK));
    }

    @GetMapping("/swagger-resources")
    public Mono<ResponseEntity> swaggerResources() {
        return Mono.just((new ResponseEntity<>(swaggerResources.get(), HttpStatus.OK)));
    }

    @GetMapping("/")
    public Mono<ResponseEntity> swaggerResourcesN() {
        return Mono.just((new ResponseEntity<>(swaggerResources.get(), HttpStatus.OK)));
    }

    @GetMapping("/csrf")
    public Mono<ResponseEntity> swaggerResourcesCsrf() {
        return Mono.just((new ResponseEntity<>(swaggerResources.get(), HttpStatus.OK)));
    }

}

 

SwaggerProvider

import lombok.AllArgsConstructor;
import org.springframework.cloud.gateway.config.GatewayProperties;
import org.springframework.cloud.gateway.route.RouteLocator;
import org.springframework.cloud.gateway.support.NameUtils;
import org.springframework.context.annotation.Primary;
import org.springframework.stereotype.Component;
import springfox.documentation.swagger.web.SwaggerResource;
import springfox.documentation.swagger.web.SwaggerResourcesProvider;

import java.util.ArrayList;
import java.util.List;

@Component
@Primary
@AllArgsConstructor
public class SwaggerProvider implements SwaggerResourcesProvider {
    public static final String API_URI = "/v2/api-docs";
    private final RouteLocator routeLocator;
    private final GatewayProperties gatewayProperties;

    @Override
    public List<SwaggerResource> get() {
        List<SwaggerResource> resources = new ArrayList<>();
        List<String> routes = new ArrayList<>();
        //取出gateway的route
        routeLocator.getRoutes().subscribe(route -> routes.add(route.getId()));
        //结合配置的route-路径(Path),和route过滤,只获取有效的route节点
        gatewayProperties.getRoutes().stream().filter(routeDefinition -> routes.contains(routeDefinition.getId()))
                .forEach(routeDefinition -> routeDefinition.getPredicates().stream()
                        .filter(predicateDefinition -> ("Path").equalsIgnoreCase(predicateDefinition.getName()))
                        .forEach(predicateDefinition -> resources.add(swaggerResource(routeDefinition.getId(),
                                predicateDefinition.getArgs().get(NameUtils.GENERATED_NAME_PREFIX + "0")
                                        .replace("/**", API_URI)))));
        return resources;
    }

    private SwaggerResource swaggerResource(String name, String location) {
        SwaggerResource swaggerResource = new SwaggerResource();
        swaggerResource.setName(name);
        swaggerResource.setLocation(location);
        swaggerResource.setSwaggerVersion("2.0");
        return swaggerResource;
    }

}

 

 

.

 

发表在 java | Java Swagger memo已关闭评论

Spring Cloud Gateway 微服务网关

参考:

 

SpringCloud gateway (史上最全)

https://www.cnblogs.com/crazymakercircle/p/11704077.html

 

微服务网关 Spring Cloud Gateway

https://www.cnblogs.com/cjsblog/p/11099234.html

 

Gateway网关拦截器的ServerWebExchange

https://www.cnblogs.com/fdzang/p/11812348.html

 

.

 

发表在 java | Spring Cloud Gateway 微服务网关已关闭评论

Java AES 密钥生成 / Shiro 动态密钥生成

AES key 生成 / shiro 密钥生成

KeyGenerator keygen = KeyGenerator.getInstance("AES"); 
SecretKey deskey = keygen.generateKey(); 
String cipherKey = Base64.encodeToString(deskey.getEncoded());
System.out.println(cipherKey);

随机产生

byte[] keys = new byte[16];
new Random().nextBytes(keys);

.

发表在 java | Java AES 密钥生成 / Shiro 动态密钥生成已关闭评论

GIT 命令行指引

GIT 命令行指引

您还可以按照以下说明从计算机中上传现有文件。

Git 全局设置
git config --global user.name "xiaobo"
git config --global user.email "xb@mail.org"
创建一个新仓库
git clone https://git.my.org/abc/my.git
cd my
touch README.md
git add README.md
git commit -m "add README"
git push -u origin master
推送现有文件夹
cd existing_folder
git init
git remote add origin https://git.my.org/abc/my.git
git add .
git commit -m "Initial commit"
git push -u origin master
推送现有的 Git 仓库
cd existing_repo
git remote rename origin old-origin
git remote add origin https://git.my.org/abc/my.git
git push -u origin --all
git push -u origin --tags

 

注:加了参数-u后,以后即可直接用git push 代替git push origin master

git push -u origin master

.

发表在 technologys | GIT 命令行指引已关闭评论

Mysqldump参数大全(参数来源于mysql5.5.19源码)

参数

参数说明

--all-databases  , -A

导出全部数据库。

mysqldump  -uroot -p --all-databases

--all-tablespaces  , -Y

导出全部表空间。

mysqldump  -uroot -p --all-databases --all-tablespaces

--no-tablespaces  , -y

不导出任何表空间信息。

mysqldump  -uroot -p --all-databases --no-tablespaces

--add-drop-database

每个数据库创建之前添加drop数据库语句。

mysqldump  -uroot -p --all-databases --add-drop-database

--add-drop-table

每个数据表创建之前添加drop数据表语句。(默认为打开状态,使用--skip-add-drop-table取消选项)

mysqldump  -uroot -p --all-databases  (默认添加drop语句)

mysqldump  -uroot -p --all-databases –skip-add-drop-table  (取消drop语句)

--add-locks

在每个表导出之前增加LOCK TABLES并且之后UNLOCK  TABLE。(默认为打开状态,使用--skip-add-locks取消选项)

mysqldump  -uroot -p --all-databases  (默认添加LOCK语句)

mysqldump  -uroot -p --all-databases –skip-add-locks   (取消LOCK语句)

--allow-keywords

允许创建是关键词的列名字。这由表名前缀于每个列名做到。

mysqldump  -uroot -p --all-databases --allow-keywords

--apply-slave-statements

在'CHANGE MASTER'前添加'STOP SLAVE',并且在导出的最后添加'START SLAVE'。

mysqldump  -uroot -p --all-databases --apply-slave-statements

--character-sets-dir

字符集文件的目录

mysqldump  -uroot -p --all-databases  --character-sets-dir=/usr/local/mysql/share/mysql/charsets

--comments

附加注释信息。默认为打开,可以用--skip-comments取消

mysqldump  -uroot -p --all-databases  (默认记录注释)

mysqldump  -uroot -p --all-databases --skip-comments   (取消注释)

--compatible

导出的数据将和其它数据库或旧版本的MySQL 相兼容。值可以为ansi、mysql323、mysql40、postgresql、oracle、mssql、db2、maxdb、no_key_options、no_tables_options、no_field_options等,

要使用几个值,用逗号将它们隔开。它并不保证能完全兼容,而是尽量兼容。

mysqldump  -uroot -p --all-databases --compatible=ansi

--compact

导出更少的输出信息(用于调试)。去掉注释和头尾等结构。可以使用选项:--skip-add-drop-table  --skip-add-locks --skip-comments --skip-disable-keys

mysqldump  -uroot -p --all-databases --compact

--complete-insert,  -c

使用完整的insert语句(包含列名称)。这么做能提高插入效率,但是可能会受到max_allowed_packet参数的影响而导致插入失败。

mysqldump  -uroot -p --all-databases --complete-insert

--compress, -C

在客户端和服务器之间启用压缩传递所有信息

mysqldump  -uroot -p --all-databases --compress

--create-options,  -a

在CREATE TABLE语句中包括所有MySQL特性选项。(默认为打开状态)

mysqldump  -uroot -p --all-databases

--databases,  -B

导出几个数据库。参数后面所有名字参量都被看作数据库名。

mysqldump  -uroot -p --databases test mysql

--debug

输出debug信息,用于调试。默认值为:d:t:o,/tmp/mysqldump.trace

mysqldump  -uroot -p --all-databases --debug

mysqldump  -uroot -p --all-databases --debug=” d:t:o,/tmp/debug.trace”

--debug-check

检查内存和打开文件使用说明并退出。

mysqldump  -uroot -p --all-databases --debug-check

--debug-info

输出调试信息并退出

mysqldump  -uroot -p --all-databases --debug-info

--default-character-set

设置默认字符集,默认值为utf8

mysqldump  -uroot -p --all-databases --default-character-set=latin1

--delayed-insert

采用延时插入方式(INSERT DELAYED)导出数据

mysqldump  -uroot -p --all-databases --delayed-insert

--delete-master-logs

master备份后删除日志. 这个参数将自动激活--master-data。

mysqldump  -uroot -p --all-databases --delete-master-logs

--disable-keys

对于每个表,用/*!40000 ALTER TABLE tbl_name DISABLE KEYS */;和/*!40000 ALTER TABLE tbl_name ENABLE KEYS */;语句引用INSERT语句。这样可以更快地导入dump出来的文件,因为它是在插入所有行后创建索引的。该选项只适合MyISAM表,默认为打开状态。

mysqldump  -uroot -p --all-databases

--dump-slave

该选项将导致主的binlog位置和文件名追加到导出数据的文件中。设置为1时,将会以CHANGE MASTER命令输出到数据文件;设置为2时,在命令前增加说明信息。该选项将会打开--lock-all-tables,除非--single-transaction被指定。该选项会自动关闭--lock-tables选项。默认值为0。

mysqldump  -uroot -p --all-databases --dump-slave=1

mysqldump  -uroot -p --all-databases --dump-slave=2

--events, -E

导出事件。

mysqldump  -uroot -p --all-databases --events

--extended-insert,  -e

使用具有多个VALUES列的INSERT语法。这样使导出文件更小,并加速导入时的速度。默认为打开状态,使用--skip-extended-insert取消选项。

mysqldump  -uroot -p --all-databases

mysqldump  -uroot -p --all-databases--skip-extended-insert   (取消选项)

--fields-terminated-by

导出文件中忽略给定字段。与--tab选项一起使用,不能用于--databases和--all-databases选项

mysqldump  -uroot -p test test --tab=”/home/mysql” --fields-terminated-by=”#”

--fields-enclosed-by

输出文件中的各个字段用给定字符包裹。与--tab选项一起使用,不能用于--databases和--all-databases选项

mysqldump  -uroot -p test test --tab=”/home/mysql” --fields-enclosed-by=”#”

--fields-optionally-enclosed-by

输出文件中的各个字段用给定字符选择性包裹。与--tab选项一起使用,不能用于--databases和--all-databases选项

mysqldump  -uroot -p test test --tab=”/home/mysql”  --fields-enclosed-by=”#” --fields-optionally-enclosed-by  =”#”

--fields-escaped-by

输出文件中的各个字段忽略给定字符。与--tab选项一起使用,不能用于--databases和--all-databases选项

mysqldump  -uroot -p mysql user --tab=”/home/mysql” --fields-escaped-by=”#”

--flush-logs

开始导出之前刷新日志。

请注意:假如一次导出多个数据库(使用选项--databases或者--all-databases),将会逐个数据库刷新日志。除使用--lock-all-tables或者--master-data外。在这种情况下,日志将会被刷新一次,相应的所以表同时被锁定。因此,如果打算同时导出和刷新日志应该使用--lock-all-tables 或者--master-data 和--flush-logs。

mysqldump  -uroot -p --all-databases --flush-logs

--flush-privileges

在导出mysql数据库之后,发出一条FLUSH  PRIVILEGES 语句。为了正确恢复,该选项应该用于导出mysql数据库和依赖mysql数据库数据的任何时候。

mysqldump  -uroot -p --all-databases --flush-privileges

--force

在导出过程中忽略出现的SQL错误。

mysqldump  -uroot -p --all-databases --force

--help

显示帮助信息并退出。

mysqldump  --help

--hex-blob

使用十六进制格式导出二进制字符串字段。如果有二进制数据就必须使用该选项。影响到的字段类型有BINARY、VARBINARY、BLOB。

mysqldump  -uroot -p --all-databases --hex-blob

--host, -h

需要导出的主机信息

mysqldump  -uroot -p --host=localhost --all-databases

--ignore-table

不导出指定表。指定忽略多个表时,需要重复多次,每次一个表。每个表必须同时指定数据库和表名。例如:--ignore-table=database.table1 --ignore-table=database.table2 ……

mysqldump  -uroot -p --host=localhost --all-databases --ignore-table=mysql.user

--include-master-host-port

在--dump-slave产生的'CHANGE  MASTER TO..'语句中增加'MASTER_HOST=<host>,MASTER_PORT=<port>'

mysqldump  -uroot -p --host=localhost --all-databases --include-master-host-port

--insert-ignore

在插入行时使用INSERT IGNORE语句.

mysqldump  -uroot -p --host=localhost --all-databases --insert-ignore

--lines-terminated-by

输出文件的每行用给定字符串划分。与--tab选项一起使用,不能用于--databases和--all-databases选项。

mysqldump  -uroot -p --host=localhost test test --tab=”/tmp/mysql”  --lines-terminated-by=”##”

--lock-all-tables,  -x

提交请求锁定所有数据库中的所有表,以保证数据的一致性。这是一个全局读锁,并且自动关闭--single-transaction 和--lock-tables 选项。

mysqldump  -uroot -p --host=localhost --all-databases --lock-all-tables

--lock-tables,  -l

开始导出前,锁定所有表。用READ  LOCAL锁定表以允许MyISAM表并行插入。对于支持事务的表例如InnoDB和BDB,--single-transaction是一个更好的选择,因为它根本不需要锁定表。

请注意当导出多个数据库时,--lock-tables分别为每个数据库锁定表。因此,该选项不能保证导出文件中的表在数据库之间的逻辑一致性。不同数据库表的导出状态可以完全不同。

mysqldump  -uroot -p --host=localhost --all-databases --lock-tables

--log-error

附加警告和错误信息到给定文件

mysqldump  -uroot -p --host=localhost --all-databases  --log-error=/tmp/mysqldump_error_log.err

--master-data

该选项将binlog的位置和文件名追加到输出文件中。如果为1,将会输出CHANGE MASTER 命令;如果为2,输出的CHANGE  MASTER命令前添加注释信息。该选项将打开--lock-all-tables 选项,除非--single-transaction也被指定(在这种情况下,全局读锁在开始导出时获得很短的时间;其他内容参考下面的--single-transaction选项)。该选项自动关闭--lock-tables选项。

mysqldump  -uroot -p --host=localhost --all-databases --master-data=1;

mysqldump  -uroot -p --host=localhost --all-databases --master-data=2;

--max_allowed_packet

服务器发送和接受的最大包长度。

mysqldump  -uroot -p --host=localhost --all-databases --max_allowed_packet=10240

--net_buffer_length

TCP/IP和socket连接的缓存大小。

mysqldump  -uroot -p --host=localhost --all-databases --net_buffer_length=1024

--no-autocommit

使用autocommit/commit 语句包裹表。

mysqldump  -uroot -p --host=localhost --all-databases --no-autocommit

--no-create-db,  -n

只导出数据,而不添加CREATE DATABASE 语句。

mysqldump  -uroot -p --host=localhost --all-databases --no-create-db

--no-create-info,  -t

只导出数据,而不添加CREATE TABLE 语句。

mysqldump  -uroot -p --host=localhost --all-databases --no-create-info

--no-data, -d

不导出任何数据,只导出数据库表结构。

mysqldump  -uroot -p --host=localhost --all-databases --no-data

--no-set-names,  -N

等同于--skip-set-charset

mysqldump  -uroot -p --host=localhost --all-databases --no-set-names

--opt

等同于--add-drop-table,  --add-locks, --create-options, --quick, --extended-insert, --lock-tables,  --set-charset, --disable-keys 该选项默认开启,  可以用--skip-opt禁用.

mysqldump  -uroot -p --host=localhost --all-databases --opt

--order-by-primary

如果存在主键,或者第一个唯一键,对每个表的记录进行排序。在导出MyISAM表到InnoDB表时有效,但会使得导出工作花费很长时间。

mysqldump  -uroot -p --host=localhost --all-databases --order-by-primary

--password, -p

连接数据库密码

--pipe(windows系统可用)

使用命名管道连接mysql

mysqldump  -uroot -p --host=localhost --all-databases --pipe

--port, -P

连接数据库端口号

--protocol

使用的连接协议,包括:tcp, socket, pipe, memory.

mysqldump  -uroot -p --host=localhost --all-databases --protocol=tcp

--quick, -q

不缓冲查询,直接导出到标准输出。默认为打开状态,使用--skip-quick取消该选项。

mysqldump  -uroot -p --host=localhost --all-databases

mysqldump  -uroot -p --host=localhost --all-databases --skip-quick

--quote-names,-Q

使用(`)引起表和列名。默认为打开状态,使用--skip-quote-names取消该选项。

mysqldump  -uroot -p --host=localhost --all-databases

mysqldump  -uroot -p --host=localhost --all-databases --skip-quote-names

--replace

使用REPLACE INTO 取代INSERT INTO.

mysqldump  -uroot -p --host=localhost --all-databases --replace

--result-file,  -r

直接输出到指定文件中。该选项应该用在使用回车换行对(\\r\\n)换行的系统上(例如:DOS,Windows)。该选项确保只有一行被使用。

mysqldump  -uroot -p --host=localhost --all-databases --result-file=/tmp/mysqldump_result_file.txt

--routines, -R

导出存储过程以及自定义函数。

mysqldump  -uroot -p --host=localhost --all-databases --routines

--set-charset

添加'SET NAMES  default_character_set'到输出文件。默认为打开状态,使用--skip-set-charset关闭选项。

mysqldump  -uroot -p --host=localhost --all-databases

mysqldump  -uroot -p --host=localhost --all-databases --skip-set-charset

--single-transaction

该选项在导出数据之前提交一个BEGIN SQL语句,BEGIN 不会阻塞任何应用程序且能保证导出时数据库的一致性状态。它只适用于多版本存储引擎,仅InnoDB。本选项和--lock-tables 选项是互斥的,因为LOCK  TABLES 会使任何挂起的事务隐含提交。要想导出大表的话,应结合使用--quick 选项。

mysqldump  -uroot -p --host=localhost --all-databases --single-transaction

--dump-date

将导出时间添加到输出文件中。默认为打开状态,使用--skip-dump-date关闭选项。

mysqldump  -uroot -p --host=localhost --all-databases

mysqldump  -uroot -p --host=localhost --all-databases --skip-dump-date

--skip-opt

禁用–opt选项.

mysqldump  -uroot -p --host=localhost --all-databases --skip-opt

--socket,-S

指定连接mysql的socket文件位置,默认路径/tmp/mysql.sock

mysqldump  -uroot -p --host=localhost --all-databases --socket=/tmp/mysqld.sock

--tab,-T

为每个表在给定路径创建tab分割的文本文件。注意:仅仅用于mysqldump和mysqld服务器运行在相同机器上。

mysqldump  -uroot -p --host=localhost test test --tab="/home/mysql"

--tables

覆盖--databases (-B)参数,指定需要导出的表名。

mysqldump  -uroot -p --host=localhost --databases test --tables test

--triggers

导出触发器。该选项默认启用,用--skip-triggers禁用它。

mysqldump  -uroot -p --host=localhost --all-databases --triggers

--tz-utc

在导出顶部设置时区TIME_ZONE='+00:00' ,以保证在不同时区导出的TIMESTAMP 数据或者数据被移动其他时区时的正确性。

mysqldump  -uroot -p --host=localhost --all-databases --tz-utc

--user, -u

指定连接的用户名。

--verbose, --v

输出多种平台信息。

--version, -V

输出mysqldump版本信息并退出

--where, -w

只转储给定的WHERE条件选择的记录。请注意如果条件包含命令解释符专用空格或字符,一定要将条件引用起来。

mysqldump  -uroot -p --host=localhost --all-databases --where=” user=’root’”

--xml, -X

导出XML格式.

mysqldump  -uroot -p --host=localhost --all-databases --xml

--plugin_dir

客户端插件的目录,用于兼容不同的插件版本。

mysqldump  -uroot -p --host=localhost --all-databases --plugin_dir=”/usr/local/lib/plugin”

--default_auth

客户端插件默认使用权限。

mysqldump  -uroot -p --host=localhost --all-databases --default-auth=”/usr/local/lib/plugin/<PLUGIN>”

摘自:
https://www.cnblogs.com/qq78292959/p/3637135.html

 

发表在 db | Mysqldump参数大全(参数来源于mysql5.5.19源码)已关闭评论

MySQL Group Replication(MGR) 动态添加成员节点

相关信息

MGR单主模式搭建完成
原MGR节点
192.168.3.252:3306 192.168.222.171:3306 192.168.222.70:3306

新增节点 192.168.222.78:3306
需要保证新增节点IP 在group_replication_ip_whitelist
我的配置为 group_replication_ip_whitelist="192.168.3.252,192.168.222.0/24"
新增节点在此网段中,所以不需要修改此配置(修改需重启)

修改已有节点配置

分别登陆test-1、test-2、test-3
修改配置

# 修改
set global group_replication_group_seeds="192.168.3.252:13306,192.168.222.171:13306,192.168.222.70:13306,192.168.222.78:13306";
# 查看
show variables like '%group_replication_group_seeds%';

安装mysql

(test-4)
mysql 安装修改配置文件及初始化(省略)
详见其它安装流程

配置MGR

创建授权用户(test-4)

set sql_log_bin=0;
grant replication slave,replication client on *.* to repuser@'%' IDENTIFIED BY 'amT_2Kj19';
grant replication slave,replication client on *.* to repuser@'127.0.0.1' IDENTIFIED BY 'amT_2Kj19';
grant replication slave,replication client on *.* to repuser@'localhost' IDENTIFIED BY 'amT_2Kj19' ;
set sql_log_bin=1;

配置同步使用的用户

CHANGE MASTER TO MASTER_USER='rpl_user', MASTER_PASSWORD='rpl_pass' FOR CHANNEL 'group_replication_recovery';

安装mysql group replication插件

# 备注:如果在my.cnf里写写入plugin_load="group_replication=group_replication.so" 这步就可以不用操作
install plugin group_replication soname 'group_replication.so';
# 通过show plugins;查看是否安装成功

启动

开启兼容模式

set global group_replication_allow_local_disjoint_gtids_join=ON;
START GROUP_REPLICATION;

检查

mysql> select * from performance_schema.replication_group_members;
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| group_replication_applier | 07a96b05-9bd1-11e9-bd95-000c29ceaa09 | test-3      |        3306 | ONLINE       |
| group_replication_applier | 9739c60d-9bda-11e9-9af3-000c29a21c95 | test-1      |        3306 | ONLINE       |
| group_replication_applier | cdbd0ca5-9e37-11e9-aa52-000c29daa6b3 | test-4      |        3306 | RECOVERING   |
| group_replication_applier | ec96355f-9bd0-11e9-8437-000c29fdc162 | test-2      |        3306 | ONLINE       |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
# 刚加入是状态是 RECOVERING
mysql> select * from performance_schema.replication_group_members;
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| CHANNEL_NAME              | MEMBER_ID                            | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
| group_replication_applier | 07a96b05-9bd1-11e9-bd95-000c29ceaa09 | test-3      |        3306 | ONLINE       |
| group_replication_applier | 9739c60d-9bda-11e9-9af3-000c29a21c95 | test-1      |        3306 | ONLINE       |
| group_replication_applier | cdbd0ca5-9e37-11e9-aa52-000c29daa6b3 | test-4      |        3306 | ONLINE       |
| group_replication_applier | ec96355f-9bd0-11e9-8437-000c29fdc162 | test-2      |        3306 | ONLINE       |
+---------------------------+--------------------------------------+-------------+-------------+--------------+
# 数据同步完成是 就是ONLINE

 

.

文章源:https://yangxx.net/?p=3672

 

发表在 db | MySQL Group Replication(MGR) 动态添加成员节点已关闭评论

SpringMVC路径匹配/Ant PATH路径匹配

在Spring MVC中经常要用到拦截器,在配置需要要拦截的路径时经常用到<mvc:mapping/>子标签,其有一个path属性,它就是用来指定需要拦截的路径的。例如:
<mvc:interceptor>
<mvc:mapping path="/**" />
<bean class="com.i360r.platform.webapp.runtime.view.interceptor.GenericInterceptor" />
</mvc:interceptor>
</mvc:interceptor>
根据以上配置,此拦截器会拦截所有的请求。
Spring MVC中的路径匹配要比标准的web.xml要灵活的多。默认的策略实现了 org.springframework.util.AntPathMatcher,就像名字提示的那样,路径模式是使用了Apache Ant的样式路径,Apache Ant样式的路径有三种通配符匹配方法(在下面的表格中列出)
这些可以组合出很多种灵活的路径模式
Table Ant Wildcard Characters

Wildcard Description
? 匹配任何单字符
* 匹配0或者任意数量的字符
** 匹配0或者更多的目录

Table Example Ant-Style Path Patterns

Path Description
/app/*.x 匹配(Matches)所有在app路径下的.x文件
/app/p?ttern 匹配(Matches) /app/pattern 和 /app/pXttern,但是不包括/app/pttern
/**/example 匹配(Matches) /app/example, /app/foo/example, 和 /example
/app/**/dir/file. 匹配(Matches) /app/dir/file.jsp, /app/foo/dir/file.html,/app/foo/bar/dir/file.pdf, 和 /app/dir/file.java
/**/*.jsp 匹配(Matches)任何的.jsp 文件

 

 HandlerMapping

一 个WEB应用程序基本上都要依赖于URL与请求处理器之间的映射,spring MVC也是一样,但Spring MVC就像Spring所作的一切一样(译者:灵活,可以配置各种东西,但是也造成了很多复杂性),肯定不会只有一种方法来映射URL和 Controller之间的关系,并且在实际上,允许你自己创建映射规则和实现,而不仅仅依赖URL映射。
Spring提供了URL的映射处理, 并且处理路径模式的顺序和方法并没有限定到任何的接口上。Spring MVC的默认实现org.springframework.web.servlet.handler. AbstractUrlHandlerMapping, 会以最长符合路径模式来匹配一个路径。
例如:给定一个请求是 /app/dir/file.jsp 并且现在存在两个路径匹配模式/**/*.jsp 和/app/dir/*.jsp, 那么,URL会匹配那个模式呢?最后的那个模式/app/dir/*.jsp,会因为最长(has more characters)的原则被匹配,它比/**/*.jsp拥有更多的字符.注意的是,这个原则并没有在任何高级别的接口中指定,但却是一种实现细节。
!!下面看一下默认的两个HandlerMapping
BeanNameUrlHandlerMapping
默 认的映射策略实现是org.springframework.web. servlet.handler.BeanNameUrlHandlerMapping类. 这个类要求任何有可能处理请求的Bean都要起一个以反斜杠(/)字符开头的名称或者别名,这个名称或者别名可以是符合URL Path匹配原则中的任何名字。

Listing A Controller Mapped by a Bean Name

xml 代码
<bean name="/home"  class="com.apress.expertspringmvc.flight.web.HomeController">  
<property name="flightService" ref="flightService" /> 
</bean>

■注意:你不能使用id这个属性来指定任何的URL路径,因为在XML规格定中禁止(/)字符来指定XML的id,不过你可以在一个Bean定义中同时拥有id和name属性
BeanNameUrlHandlerMapping 的缺点
它 非常便于使用的同时,也拥有一些缺点。它不能影射一个Prototype的Bean.换句话说,当使用 BeanNameUrlHandlerMapping时, 所有的请求处理类只能是单例的(singletons) . 一般来说,Controllers 都是按照单例建立的,所以这个并不是一个很严重的问题.还有,我会在后面的章节中介绍Controller,只会有很少类型的Controller需要是 prototypes.

■注释: Prototype bean 是一种非单例(non-singleton)的bean. 任何一次调用ApplicationContext的getBean()方法时都会返回一个新的Bean实例.

BeanNameUrlHandlerMapping的另外一个问题存在于在你的应用程序中 应用拦截(interceptor). 因为请求的映射(handler mapping )和Bean(beans imapping)的映射给绑定在一起了,没有分开,这样就不可能在Controller和拦截之间创建复杂的关系。如果有复杂的请求映射需求,你可以用 SimpleUrlHandlerMapping 来代替BeanNameUrlHandlerMapping. SimpleUrlHandlerMapping作为BeanNameUrlHandlerMapping的另外一种选择, SimpleUrlHandlerMapping直指BeanNameUrlHandlerMapping的两大软肋.它可以映射 prototype类型的请求处理器,并且它允许你为处理器(handlers)和拦截器(interceptors)之间创建复杂灵活的映射路径的映射算法与BeanNameUrlHandlerMapping是 使用相同的基础组件,所以这个模式依然是映射URL到请求处理器的(request handler) ,你简单的在ApplicationContext中声明一下,就可以使用SimpleUrlHandlerMapping了. DispatcherServlet会根据类型找到的,并且不会创建默认的映射器了(BeanNameUrlHandlerMapping).意思就是, 如果你想两个都用,那么就要全部声明一下在ApplicationContext里.
■提示 DispatcherServlet会链式处理请求的(译者:依次处理请求,可以参照过滤器和GOF中的责任链模式),这样允许按照你的要求处理映射,映射处理器(Handler mappings )实现了Orderedr接口.

 

同时存在路径变量和通配符匹配时的优先级关系

当一个请求路径可以匹配多个处理器方法时,SpringMVC将优先匹配路径映射更精确的那个。

拥有更少的路径变量和通配符的路径映射更精确。比如/hotels/{hotel}/*拥有一个路径变量和一个通配符,那么它会比/hotels/{hotel}/**更精确,会优先匹配,因为后者拥有一个路径变量和两个通配符。
如果两个路径映射的通配符数量是一样的,则指定的信息更多那个路径会更精确,比如/hotels/abc*比/hotels/*更精确。
路径变量比通配符更精确。比如/hotels/{hotel}比/hotels/*更精确。
默认映射/**比其它所有的路径映射的优先级都低,比如/{a}/{b}就比它更精确。
拥有两个通配符的路径映射比其它没有两个通配符的路径映射的优先级都低,比如/abc/**的优先级低于/abc/{a}。

发表在 java | SpringMVC路径匹配/Ant PATH路径匹配已关闭评论

时间格式/dateformat

日期的表示形式:

  1. 1980-01-01 或 19800101
  2. 可以加入时区:1980-01-01+08:00

时间的表示:

  1. 21:08:33 或 210833 表示当前时区
  2. 21:08:33Z 或 210833Z 表示UTC时区

日期时间表示

  1. 1980-01-01 21:08:33 当前时区
  2. 1980-01-01 21:08:33+08:00 设定时区
  3. 1980-01-01 21:08:33Z UTC时区
  4. 1980-01-01T21:08:33Z
  5. 19800101T210833Z

时间偏移表示

P1Y3M5DT6H7M30S 表示:1年3月...

PHP

//可以运用所有时间格式
$date=new DateTime('19800101T210833Z');
//偏移时间(注意中间的T)
$date->sub(new DateInterval('P1Y2MT3H2M'));
echo $date->format('Y-m-d H:i:sP');

RFC1123

Tue, 30 Oct 2018 15:33:48 GMT

.

发表在 technologys | 时间格式/dateformat已关闭评论

nfs

NFS服务器配置

1.安装NFS服务

首先使用yum安装nfs服务:

yum -y install rpcbind nfs-utils

2.创建共享目录

在服务器上创建共享目录,并设置权限。

mkdir /data/share/
chmod 755 -R /data/share/

3.配置NFS

nfs的配置文件是 /etc/exports ,在配置文件中加入一行:

/data/share1/ 192.168.11.34(rw,no_root_squash,no_all_squash,sync)
/data/share2/ *(rw,no_root_squash,no_all_squash,sync)

rw 表示设置目录可读写。

sync 表示数据会同步写入到内存和硬盘中,相反 rsync 表示数据会先暂存于内存中,而非直接写入到硬盘中。

no_root_squash NFS客户端连接服务端时如果使用的是root的话,那么对服务端分享的目录来说,也拥有root权限。

no_all_squash 不论NFS客户端连接服务端时使用什么用户,对服务端分享的目录来说都不会拥有匿名用户权限。

如果有多个共享目录配置,则使用多行,一行一个配置。保存好配置文件后,需要执行以下命令使配置立即生效:

exportfs -r

4.设置防火墙

如果你的系统没有开启防火墙,那么该步骤可以省略。

NFS的防火墙特别难搞,因为除了固定的port111、2049外,还有其他服务如rpc.mounted等开启的不固定的端口,这样对防火墙来说就比较麻烦了。为了解决这个问题,我们可以设置NFS服务的端口配置文件。

修改/etc/sysconfig/nfs文件,将下列内容的注释去掉,如果没有则添加:

RQUOTAD_PORT=1001
LOCKD_TCPPORT=30001
LOCKD_UDPPORT=30002
MOUNTD_PORT=1002

保存好后,将端口加入到防火墙允许策略中。

执行:

firewall-cmd --zone=public --add-port=111/tcp
firewall-cmd --add-port=111/udp --permanent 
firewall-cmd --add-port=2049/tcp --permanent 
firewall-cmd --zone=public --add-port=2049/udp --permanent 
firewall-cmd --add-port=1001/tcp --permanent 
firewall-cmd --add-port=1001/udp --permanent 
firewall-cmd --zone=public --add-port=1002/tcp --permanent 
firewall-cmd --add-port=1002/udp --permanent 
firewall-cmd --add-port=30001/tcp --permanent 
firewall-cmd --zone=public --add-port=30002/udp --permanent
firewall-cmd --reload

 

5.启动服务

按顺序启动rpcbind和nfs服务:

systemctl start rpcbind
systemctl start nfs

加入开机启动:

systemctl enable rpcbind 
systemctl enable nfs

nfs服务启动后,可以使用命令 rpcinfo -p 查看端口是否生效。

服务器的后,我们可以使用 showmount 命令来查看服务端(本机)是否可连接:

[root@localhost ~]# showmount -e localhost
Export list for localhost:
/data/share1 192.168.11.34
/data/share2 192.168.11.34

出现上面结果表明NFS服务端配置正常。

客户端配置

1.安装rpcbind服务

客户端只需要安装rpcbind服务即可,无需安装nfs或开启nfs服务。

yum -y install rpcbind

2.挂载远程nfs文件系统

查看服务端已共享的目录:

[root@localhost ~]# showmount -e 192.168.11.31
Export list for 192.168.11.31:
/data/share 192.168.11.34

建立挂载目录,执行挂载命令:

mkdir -p /mnt/share
mount -t nfs 192.168.11.34:/data/share /mnt/share/ -o nolock,nfsvers=3,vers=3

如果不加 -onolock,nfsvers=3 则在挂载目录下的文件属主和组都是nobody,如果指定nfsvers=3则显示root。

如果要解除挂载,可执行命令:

umount /mnt/share

3.开机自动挂载

如果按本文上面的部分配置好,NFS即部署好了,但是如果你重启客户端系统,发现不能随机器一起挂载,需要再次手动操作挂载,这样操作比较麻烦,因此我们需要设置开机自动挂载。我们不要把挂载项写到/etc/fstab文件中,因为开机时先挂载本机磁盘再启动网络,而NFS是需要网络启动后才能挂载的,所以我们把挂载命令写入到/etc/rc.d/rc.local文件中即可。

[root@localhost ~]# vim /etc/rc.d/rc.local
#在文件最后添加一行:
mount -t nfs 192.168.11.34:/data/share /mnt/share/ -o nolock,nfsvers=3,vers=3

或者

mount -t nfs 192.168.11.34:/share /mnt/share

 

保存并重启机器看看。

测试验证

查看挂载结果,在客户端输入 df -h

文件系统    容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root   18G 5.0G 13G 29% /
devtmpfs      904M  0 904M 0% /dev
tmpfs       916M  0 916M 0% /dev/shm
tmpfs       916M 9.3M 906M 2% /run
tmpfs       916M  0 916M 0% /sys/fs/cgroup
/dev/sda1      497M 164M 334M 33% /boot
tmpfs       184M  0 184M 0% /run/user/0
192.168.11.31:/data/share  18G 1.7G 16G 10% /mnt/share

看到最后一行了没,说明已经挂载成功了。

 

 

.

发表在 linux | nfs已关闭评论

JS Librarys

中国:

.

发表在 javascript | 标签为 | JS Librarys已关闭评论