最新文章

文章排行

  • centos安装mariadb

    由于数据库有一下比较新的东西,所以要安装一下新版本的数据库 原计划是安装mysql的,由于各种原因就决定安装mysql的另一个分支mariadb了首先新增/修改这个文件""  '' /etc/yum.repos.d/MariaDB.repo往里面写入内容[mariadb]name = MariaDBbaseurl = http://mirrors.aliyun.com/mariadb/yum/10.3/centos7-amd64/gpgkey = http://mirrors.aliyun.com/mariadb/yum/RPM-GPG-KEY-MariaDBgpgcheck = 1由于我比较想省事吧,就用工具直接打开这个文件,复制保存就行了然后运行安装命令yum -y install MariaDB-server MariaDB-client等一会安装完后再启动systemctl start mariadb开机启动systemctl enable mariadb然后是初始化设置mysql_secure_installation接下来是初始化设置了,复制粘贴一下网上的首先是设置密码,会提示先输入密码Enter current password for root (enter for none):<–初次运行直接回车设置密码Set root password? [Y/n] <– 是否设置root用户密码,输入y并回车或直接回车New password: <– 设置root用户的密码Re-enter new password: <– 再输入一次你设置的密码其他配置Remove anonymous users? [Y/n] <– 是否删除匿名用户,回车Disallow root login remotely? [Y/n] <–是否禁止root远程登录,回车,Remove test database and access to it? [Y/n] <– 是否删除test数据库,回车Reload privilege tables now? [Y/n] <– 是否重新加载权限表,回车初始化MariaDB完成,接下来测试登录mysql -uroot -ppassword完成。附上一些用户配置创建用户命令mysql>create user username@localhost identified by 'password';直接创建用户并授权的命令mysql>grant all on *.* to username@localhost indentified by 'password';授予外网登陆权限 mysql>grant all privileges on *.* to username@'%' identified by 'password';授予权限并且可以授权mysql>grant all privileges on *.* to username@'hostname' identified by 'password' with grant option;后记:其实大部分设置都可以用Navicat去完成。

  • 基于Linux的zookeeper客户端命令

    前言       之前我们已经通过“初探zookeeper“一文,对它有了初步的了解,这一节让我们更深入了解一下。      注:作者运行环境是centos,其实跟linux命令差别也没多大。基本操作首先我们进入zookeeper目录 cd /usr/local/zookeeper进入bin目录 cd bin重新启动zookeeper zkServer.sh restart打开zookeeper客户端 zkCli.shls+节点,可以看到该节点下有哪些节点stat+节点,可以看到节点的基本信息ls2+节点,就可以看到该节点下的节点和节点的一些基本信息,可以说ls2是ls和stat的合成体get+节点,可以看到该节点下存储的数据(当前为空)接下来我们解释一下这些基本信息的含义:cZxid 是创建之后分配的idctime 节点创建时间mZxid 修改时分配的idmtime 修改时的时间pZxid 子节点的idcversion 节点的版本号dataversion 当前节点数据的版本号aclVersion 权限版本号ephemeralOwner 判断是节点类型 0x0是永久节点dataLength 数据长度numChildren 下面子节点数量create创建临时节点只需要加参数 -e重启后发现temp消失了创建有序节点 -sset命令用来设置值通过get命令可以看到/lin下的数据参数如果我们执行就会报版本不一致的错误,这时我们只要输入正确的version才会执行成功,相应的version也会累加一通过get就可以看到设置值已经成功delete命令,不用说大家也都知道了,就是删除节点需要注意的是,如果节点有子节点会删除失败watcher机制针对每一个节点的操作都会有一个监督者->watcher当监控的某个对象(znode)发生变化时,则触发watcher事件zk中的watcher是一次性的,触发后就销毁父节点子节点增删改都能触发其watcher事件不同类型的操作,触发watcher事件也不同通过help命令,我们看到部分命令都有watch命令watch事件类型创建父节点触发:nodeCreated  修改父节点数据触发:nodeDataChanged删除父节点触发:nodeDeletedls为父节点设置watcher,创建删除子节点都触发nodeChildrenChanded事件,修改子节点不会触发事件说明:因为触发后就会销毁,所以每次触发完后都必须再设置watch事件watcher使用场景:统一资源配置(不同服务器统一配置)

  • 多选框全选实现

    页面代码,列表多选框  <c:forEach items="${list}" var="obj"> <tr id="tr${obj.id}"> <td><input name="searchId" type="checkbox" value="${obj.id}"></td> <td>${obj.product_code}</td> <td style=" word-wrap:break-word;word-break:break-all;white-space: normal">${obj.product_name}</td> <td style=" word-wrap:break-word;word-break:break-all;white-space: normal">${obj.category_name}</td> <td >${obj.old_cost_price}</td> <td >${obj.cost_price}</td> <td >${obj.old_price}</td> <td >${obj.price}</td> <td>${obj.nowPrice}</td> <td >${obj.rebate}</td> <td>${obj.num}</td> </tr> </c:forEach>多选按钮<input type="checkbox" name="checkAll">全选js代码$(function () { //全选按钮实现 $("input[name=checkAll]").click(function () { if (this.checked) { $("input[name=searchId]").prop("checked", true); } else { $("input[name=searchId]").prop("checked", false); } }); //反选实现 $("input[name=searchId]").click(function () { var allCheckBox=$("input[name=searchId]"); var same=true; var temp=allCheckBox[0].checked; for (var i=0;i<allCheckBox.length;i++){ if (allCheckBox[i].checked!==temp){ same=false; break; } } if (same){ $("input[name=checkAll]").prop("checked", temp); } else { $("input[name=checkAll]").prop("checked", false); } });});

  • zookeeper acl命令

    前言 acl(access control lists)权限控制针对节点可以设置相关读写等权限,从而保障数据的安全性权限permission可以指定不同的权限范围以及角色acl命令行通过客户端help命令,我们可以看到关于acl的一些命令getAcl获取某个节点的acl权限信息setAcl设置某个节点的acl权限信息addauth:输入认证授权信息,注册时输入明文账号密码,但是在zookeeper系统里,密码都是以加密形式存在的acl的构成zookeeper的acl通过[scheme:id:permissions]来构成权限列表(scheme:代表某种权限机制,id:代表允许访问的用户,permissions:权限组合字符串)world:world下只有一个id,即只有一个用户,也就是anyone,那么组合的写法就是world:anyone[permissions]auth:代表认证登录,需要注册用户有权限即可,形式为auth:user:password:[permissions]digest:需要对密码加密才能访问,形式为:digest:username:BASE64(SHA1(password)):[permissions]简而言之,auth和digest的区别就在于,前者明文,后者密文 setAcl /path auth:lee:lee:cdrwa与setAcl /path digest:lee:BASE64(SHA1(password))cdrwa是等价的,在通过addauth digest lee:lee 后都能操作指定节点的权限ip:当设置为ip指定的ip地址,此时显示ip进行访问,比如ip:192.169.1.1[permissions]super:代表超级管理员,拥有所有权限权限字符串缩写crdwacreate 创建子节点read 获取节点/子节点write设置节点数据delete删除子节点admin设置权限命令world:anyone:cdrwa图中我们把/lin的delete权限去掉,创建子节点,尝试删除它,可以看到删除失败,值得注意的是,但是我们是可以删除/lin的,只能控制子节点auth:user:pwd:cdrwa第一次添加失败是因为我们没有加上用户,所以我们要把用户添加才能进行该设置权限的操作(备注合理)虽然我们再次进行设置,但是我们发现用户密码还是没有变,还是按照第一个来digest:user:BASE64(SHA1(pwa)):cdrwa我们通过设置密文的权限我们发现退出后无法访问,通过明文密码登录才能进行操作addauth digest user:pwaip:192.168.1.1:cdrwa接下来我们讲最后一种:super,步骤如下1.修改zkServer.sh增加super管理员2.重启zkServer.sh通过操作我们可以发现,/lin是没有访问权限的,但是用管理员账号登录后就可以操作了ACL的常用使用场景开发/测试环境分离,开发者无权操作测试库的节点,只能查看生产环境上控制指定ip的服务可以访问相关节点,防止混乱

  • 初探zookeeper

    前言         由于公司项目每次运行前都要启动zookeeper,之前并不太深入了解这个东西,所以就学习了一下,并记录下来。zookeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。来源于百度介绍,想了解更多可以自行搜索。下面进入正题。安装配置首先登陆官网 http://zookeeper.apache.org/点击调到下载页面我是下载历史版本-3.4.11版本然后把zookeeper-3.4.11.tar.gz上传至/home目录下进入该路径 cd /home解压  tar -zxvf  zookeeper-3.4.11.tar.gz重命名 mv zookeeper-3.4.11 zookeeper移动到/usr/local目录 mv zookeeper /usr/local配置zookeeper环境,修改/etc/profile文件添加内容备注:需要安装配置jdk目录介绍首先我们进入zookeeper目录cd /usr/local/zookeeper查看目录ll1.bin目录主要是一些运行命令进入bin目录cd bin.cmd主要是windows下的可执行命令,.sh是Linux下的命令2.conf存放配置文件具体设置内容tickTime 用于计算时间的单元,比如session超时:H*tickTimeinitLimit 用于集群,允许从节点链接并同步到master节点的初始化链接时间,以tickTime的倍数来表示syncLimit 用于集群,master主节点与从节点之间发送消息,请求和应答时间长度(心跳机制)dataDir 存放数据目录(必须配置);dataLogDri 日志目录。如果不配置就会与dataDir共用clientPort 链接服务器的端口3.contrib附加的一些功能4.dist-maven mvn编译后的目录5.doc 文档打开index文件就可以看到详细文档6.lib需要依赖的jar包7.recipes案例demo代码8.src源码zoo.cfg配置详细tickTime 用于计算时间的单元,比如session超时:H*tickTimeinitLimit 用于集群,允许从节点链接并同步到master节点的初始化链接时间,以tickTime的倍数来表示syncLimit 用于集群,master主节点与从节点之间发送消息,请求和应答时间长度(心跳机制)dataDir 存放数据目录(必须配置);dataLogDri 日志目录。如果不配置就会与dataDir共用clientPort 链接服务器的端口zookeeper基本数据模型1.树形结构2.每一个节点都成为znode,可以有子节点,也可以有数据3.每个节点分为临时节点和永久节点,临时节点在客户端断开后消失4.每一个zk节点都有各自的版本号,可以通过命令行来显示节点信息5.每当节点数据发生变化,那么该节点的版本号会累加(乐观锁)6.删除/修改过时节点,版本号不匹配会报错7.每个zk节点存储的数据不宜过大,几k即可8.节点可以设置权限ACL,可以通过权限来限制用户的访问zookeeper作用体现1.master节点选举,主节点挂了以后,从节点就会接受工作,并且保证这个节点是唯一的,这就是所谓的首脑模式,从而保证我们的集群是搞可用的2.统一的配置文件管理,即只需要部署一台服务器,则可以把相同配置文件同步到其他的服务器,此操作在云计算中用的比较多(比如统一修改redis配置)3.发布与订阅,类似消息队列MQ,dubbo发布者把数据存在node上,订阅者会读取这些信息4.提供分布式锁,分布式环境中不同进程之间争夺资源,类似多线程的锁5.集群管理,集群中保证数据的强一致性zookeeper特性-session基本原理客户端与服务端之间存在会话每个回话都可以设置超时时间心跳介绍,session过期session过期,临时节点node会被抛弃心跳机制,客户端会向服务端发送ping包请求单机版进入配置文件cd /usr/local/zookeeper/conf复制一份配置文件cp zoo_samle.cfg zoo.cfg修改zoo.cfgdataDir=/usr/local/zookeeper/dataDirdataLogDir=/usr/local/zookeeper/dataDirLog在该目录下创建这两个目录mkdir dataDirmkdir dataLogDir进入bin目录执行./zkServer.sh start启动其他命令:status可查看状态restart重启stop停止这个时候我们已经启动了让我们来连接客户端,看看里面的内容输入help,我们就可以看到相关的指令我们可以输入ls+节点名就可以看到相关节点下的内容如果我们需要退出客户端,只需要按ctrl+c就可以退出,输入pwd就可以看到当前所在的文件下(持续优化更新)

文章推荐

  • spring cloud feign的使用

    新建一个client应用,引入依赖  <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency>在application类添加注解写一个接口@FeignClient(name = "centerBlog") name对应eureka的对应client实例名称,并对应起@GetMapping注解方法新建实现类在对应的client项目中,实现对应的方法运行项目即可查看相关内容

  • spring boot整合druid

           Spring Boot默认的数据源是:org.apache.tomcat.jdbc.pool.DataSource,虽然这个性能比较高,但是druid 有多维度的统计和分析功能,所以很多人都在用它。 配置使用    首先,我们添加maven依赖 <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.10</version> </dependency>修改application.ymlspring: # 下面为连接池的补充设置,应用到上面所有数据源中 # 初始化大小,最小,最大 datasource: initialSize: 5 minIdle: 5 maxActive: 20 # 配置获取连接等待超时的时间 maxWait: 60000 # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 timeBetweenEvictionRunsMillis: 60000 # 配置一个连接在池中最小生存的时间,单位是毫秒 minEvictableIdleTimeMillis: 300000 validationQuery: SELECT 1 testWhileIdle: true testOnBorrow: false testOnReturn: false # 打开PSCache,并且指定每个连接上PSCache的大小 poolPreparedStatements: true maxPoolPreparedStatementPerConnectionSize: 20 # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙 filters: stat,wall,log4j # 通过connectProperties属性来打开mergeSql功能;慢SQL记录 connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000 type: com.alibaba.druid.pool.DruidDataSource # 合并多个DruidDataSource的监控数据 #useGlobalDataSourceStat: true driver-class-name: com.mysql.jdbc.Driver username: root password: 123456 url: jdbc:mysql://localhost:3306/blog? useUnicode=true&characterEncoding=utf-8&useSSL=false启动查看日志看到这句说明成功了。配置监控统计功能  import com.alibaba.druid.support.http.StatViewServlet;import com.alibaba.druid.support.http.WebStatFilter;import org.springframework.boot.web.servlet.FilterRegistrationBean;import org.springframework.boot.web.servlet.ServletRegistrationBean;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;/** * Created by MYQ on 2018/9/28. */@Configurationpublic class DruidConfiguration { /** * 注册一个StatViewServlet * @return */ @Bean public ServletRegistrationBean DruidStatViewServlet(){ //org.springframework.boot.context.embedded.ServletRegistrationBean提供类的进行注册. ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new StatViewServlet(),"/druid/*"); //添加初始化参数:initParams //白名单: servletRegistrationBean.addInitParameter("allow","127.0.0.1"); //IP黑名单 (存在共同时,deny优先于allow) : 如果满足deny的话提示:Sorry, you are not permitted to view this page. servletRegistrationBean.addInitParameter("deny","192.168.1.73"); //登录查看信息的账号密码. servletRegistrationBean.addInitParameter("loginUsername","admin"); servletRegistrationBean.addInitParameter("loginPassword","ak2671290"); //是否能够重置数据. servletRegistrationBean.addInitParameter("resetEnable","false"); return servletRegistrationBean; } /** * 注册一个:filterRegistrationBean * @return */ @Bean public FilterRegistrationBean druidStatFilter(){ FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(new WebStatFilter()); //添加过滤规则. filterRegistrationBean.addUrlPatterns("/*"); //添加不需要忽略的格式信息. filterRegistrationBean.addInitParameter("exclusions","*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid2/*"); return filterRegistrationBean; }}运行输入 http://localhost:8084/druid/输入账号密码admin ak2671290 ,就可以看到druid的界面了

  • redis学习笔记(中级篇)

    发布订阅subscribe abc dbd #订阅abd,dbd psubscribe abd* #批量订阅 发布publish abd duck #向adb发布duck内容备份方式RDB备份1. 什么是RDB RDB:每隔一段时间,把内存中的数据写入磁盘的临时文件,作为快照,恢复的时候把快照文件读进内存。如果宕机重启,那么内存里的数据肯定会没有的,那 dis后,则会恢复。 2. 备份与恢复 内存备份 --> 磁盘临时文件 临时文件 --> 恢复到内存 3. RDB优劣势 优势 1. 每隔一段时间备份,全量备份 2. 灾备简单,可以远程传输 3. 子进程备份的时候,主进程不会有任何io操作(不会有写入修改或删除),保证备份数据的的完整性 4. 相对AOF来说,当有更大文件的时候可以快速重启恢复 劣势 1. 发生故障是,有可能会丢失最后一次的备份数据 2. 子进程所占用的内存比会和父进程一模一样,如会造成CPU负担 3. 由于定时全量备份是重量级操作,所以对于实时备份,就无法处理了。 save 900 1 900秒内至少发生一次的更新触发备份stop-writes-on-bgsave-error yes 保存时候发生错误停止操作AOF备份# AOF 默认关闭,yes可以开启 appendonly no # AOF 的文件名 appendfilename