190122-python计算md5的几种方式

计算String/文件的md5属于比较常见的需求;特别是web项目,为了验证客户端上传的东西,通过校验md5来判断参数是否串改,属于常见的手段,下面简单记录下python可以如何计算md5

190117-Rabbitmq启动失败的问题

rabbitmq启动,死活起不来,一直报错,记录下解决方式

1
2
Redirecting to /bin/systemctl start rabbitmq-server.service
Job for rabbitmq-server.service failed because the control process exited with error code. See "systemctl status rabbitmq-server.service" and "journalctl -xe" for details.

190115-Shell目录下文件统计

文件夹下文件的统计,通常用的是wc来做,下面简单小结一下各种case

190114-beautifulsoup4版本不一致导致解析问题

beautifulsoup4 这个用于解析html的包,不同版本的使用姿势问题,导致解析数据异常

190109-mysql 新增多列写法

记录下同时新增多列的sql写法

1
alter table table_name add (amount decimal(20,8) NOT NULL DEFAULT '0.00000000' COMMENT '数量' , price decimal(20,8) NOT NULL DEFAULT '0.00000000' COMMENT '价格');

用圆括号包含起来即可

190108-Quick-Fix 如何优雅的实现应用内外交互之接口设计篇

如何实现应用内外交互,是Quick-Fix框架的核心之一,我们常见的应用有提供web服务的(如Spring应用),有进行大数据计算的(如Storm应用),有提供rpc的后台服务(如通过dubbo提供rpc的数据服务),有纯jar服务等;基本上我们可以划分为两类

  • 应用本身,有一套健全的与外界交互的机制(这里不包括db/redis等数据的读写)
  • 应用只关注自己的服务功能(接收数据,产生数据,保存数据),本身不与第三方的应用进行交互

针对上面这两种case,我们应该怎么来设计一套应用内外交互的方案,来实现接收外部请求,执行应用内部方法或访问应用内部数据,并返回结果的目的?

190105-Python 搭建私服教程

在python项目中,需要引入第三方的包,可以通过pip很简单的引入;但是有个问题,公司内部的包,也不能发布到pypi仓库吧,所以搭建自己的私服就很有必要了,下面介绍一下基于PypiServer搭建私服的教程

190104-Quick-Fix 纯Jar应用及扩展手册

目前Quick-Fix框架提供了两种类型,三中不同场景下的Fixer,一种是以Jar方式启动的,一个是基于Spring生态体系玩法的,下面主要介绍这jar方式,如何使用QuickFix来实现应用内服务调用和数据订正

190102-Quick-Fix 从0到1构建一个应用内服务/数据访问订正工具包

I. 背景说明

Builder

case1: 程序出bug了

在我们的实际工作中,当我们遇到别人反馈代码出问题了吧,怎么返回的数据不对?

当应用持续跑了一段时间之后,这个时候我们的第一个反应基本是确认能复现么?如果能复现,那么调用的姿势是不是对的?如果确认姿势没问题,那么就是请求参数不对了!!! 如果请求参数还没有问题,卧槽,这下完了,真可能有bug了,这下怎么办?

接下来,一般的讨论是在测试环境复现一下,如果能复现,那么开启debug(或者远程debug),一行行调试,相信很快就能搞定了;

但是,最怕的就是但是,测试环境没法复现,至于线上环境才有问题,这下怎么搞?

case2: 缓存数据有问题

另外一个场景就是为了提升服务性能,缓存基本上会被大量的使用在各个系统之间;有缓存,那么就会有缓存不一致的问题,如果缓存用的是外部的如(redis/memcache)之类的,那么缓存数据的查询和订正,就相对简单了;但是,如果我们使用了内存作为数据的缓存,比如(hashmap, guava),这种时候,我想知道这个内存中的数据怎么办?我想修改这个内存的中的数据怎么办?

3. 小结

上面两个场景,归纳一下主要是两个问题

  • 如何知道线上应用中,某个服务的方法的执行结果;
  • 如何知道线上应用中,某些内存数据的结果

181230-使用Java Socket实现一个http服务器

作为一个java后端,提供http服务可以说是基本技能之一了,但是你真的了解http协议么?你知道知道如何手撸一个http服务器么?tomcat的底层是怎么支持http服务的呢?大名鼎鼎的Servlet又是什么东西呢,该怎么使用呢?

在初学java时,socket编程是逃不掉的一章;虽然在实际业务项目中,使用这个的可能性基本为0,本篇博文将主要介绍如何使用socket来实现一个简单的http服务器功能,提供常见的get/post请求支持,并再此过程中了解下http协议

181222-Centos SSH免密登录配置不生效问题fix

centos添加ssh免密配置,结果发现登录时,依然要求设置密码,记录一下解决过程与最终的方案

181220-Shell-目录遍历获取指定的文件

遍历目录,获取需要的文件

直接贴对应的实现脚本

1
2
3
4
5
6
cd /home
for dir in $(ls)
do
# 如果是目录,则打印目录名
[[ -d ${dir} ]] && echo ${dir}
done

181219-centos配置开机后启动脚本

配置开机后执行脚本

配置相对简单,添加一个执行命令即可

1
2
3
4
vim /etc/rc.d/rc.local

# 在文件最后添加
sh /home/yihui/xxx.sh

执行脚本,添加上可执行的权限即可

181208-mysql之给现有表新增自增字段

I. 问题描述

一张现有的表,没有自增主键,拿的是一串字符串作为的表的主键,实际使用来,并没有什么问题,但是在扫表的时候就不是特别的方便了,

因此希望给这张表新增一个自增的id

181207-Centos使用docker构建ecs环境

I. java环境搭建

首先是jdk的安装,可以安装open-jdk,也可以从jdk官网下载jdk包进行配置,简单说明下两种使用方式

1. open-jdk安装

基本安装过程如下

1
2
3
4
5
# 切换root
su
# 首先查看当前支持的jdk版本
yum list | grep jdk
yum install java-11-openjdk-devel.x86_64 java-11-openjdk.x86_64 -y

2. jdk包安装

a. 获取包

官网下载

1
2
3
4
5
6
7
8
## 到官网找到对应的版本,获取下载地址
wget http://download.oracle.com/otn-pub/java/jdk/8u171-b11/512cd62ec5174c3487ac17c61aaa89e8/jdk-8u171-linux-x64.tar.gz?AuthParam=1529400028_058a3f3fdf9c78aa6502a6e91edfb1d2

## 解压
tar -zxvf jdk-8u171-linux-x64.tar.gz?AuthParam=1529400028_058a3f3fdf9c78aa6502a6e91edfb1d2

## 目录指定
mv jdk-8u171-linux-x64 /usr/local/java/

宿主机拷贝

1
2
3
4
# 拷贝
docker cp jdk1.8.0_131.tar.gz 0e118346222c:/home/soft
# 进入容器
docker exec -it 0e118346222c /bin/bash

b. 安装

1
2
3
4
5
cd /usr
mkdir java
cp /home/soft
tar -zxvf jdk1.8.0_131.tar.gz
rm jdk1.8.0_131.tar.gz

c. 配置

进入配置文件 vi /etc/profile

1
2
3
4
5
## 文件末尾添加
export JAVA_HOME=/home/soft/jdk1.8.0_131
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH

应用并查看是否配置ok

1
2
3
source /etc/profile
java
javac

3. 删除自带的openjdk

如果希望删除自带的jdk,可以执行下面的命令查看安装的版本

1
rpm -qa | grep java

然后执行

1
2
3
yum remove java-11-openjdk-headless-debug
# 或者执行
rpm -e --nodeps java-11-openjdk-headless-debug-11.0.1.13-3.el7_6.x86_64

II. Maven配置

maven的配置相对简单,下载好包之后,设置mvn的配置即可

1. 获取包

下载maven包,推荐到官网下载,我这里是从宿主机拷贝

1
docker cp maven-3.5.3.tar.gz 0e118346222c:/home/soft

2. 解压

到docker中,解压并配置

1
2
cd /home/soft
tar -zxvf maven-3.5.3.tar.gz

3. 配置

设置配置文件 vi /etc/profile

1
2
M2_HOME=/home/soft/maven-3.5.3
export PATH=${M2_HOME}/bin:${PATH}

配置生效 source /etc/profile 并查看

1
2
3
4
5
6
7
[root@0e118346222c maven-3.5.3]# mvn --version
Apache Maven 3.5.3 (3383c37e1f9e9b3bc3df5050c29c8aff9f295297; 2018-02-24T19:49:05Z)
Maven home: /home/soft/maven-3.5.3
Java version: 1.8.0_131, vendor: Oracle Corporation
Java home: /usr/java/jdk1.8.0_131/jre
Default locale: en_US, platform encoding: ANSI_X3.4-1968
OS name: "linux", version: "3.10.0-693.2.2.el7.x86_64", arch: "amd64", family: "unix"

III. tomcat安装

tomcat的安装基本上就是解压个包的事情了

1
2
3
4
docker cp tomcat.tar.gz 0e118346222c:/home/soft
docker exec -it 0e118346222c /bin/bash
cd /home/soft
tar -zxvf tomcat.tar.gz

IV. nginx安装

1. 直接使用 yum 安装

后面一个参数表示指定安装的位置

1
yum install nginx  --prefix=/home/soft/nginx

上面这种安装,在配置https时,会有问题,提示要安装ssl模块啥的,因此可以这么添加一下参数

1
yum install nginx --prefix=/home/soft/nginx --with-http_stub_status_module --with-http_ssl_module

如果你是先执行了上面的步骤,后面发现需要安装ssl模块,要怎么办 ?

操作如下:

1
2
3
4
5
6
7
1. 获取安装的nginx版本 `nginx -V`
2. 获取对应的源码包 `wget http://nginx.org/download/nginx-1.12.0.tar.gz`
3. 解压源码包 `tar -zxvf nginx-1.12.0.tar.gz`, 进入解压的目录
4. 编译 `./configure --prefix=/app/soft/nginx --with-http_stub_status_module --with-http_ssl_module`
5. `make`
6. 备份老的nginx `cp /app/soft/nginx/sbin/nginx cp /app/soft/nginx/sbin/nginx.bk`
7. 拷贝新的nginx `cp sbin/nginx /app/soft/nginx/sbin/nginx`

2. 源码安装

上面其实已经包含了源码安装的步骤,下面简单的列一下

1
2
3
4
5
6
7
8
9
10
安装之前,先安装依赖
- yum install -y zlib zlib-devel gcc
- yum install -y pcre pcre-devel
- yum install -y openssl openssl-devel

wget http://nginx.org/download/nginx-1.12.0.tar.gz
tar -zxvf nginx-1.12.0.tar.gz; cd nginx-1.12.0
./configure --prefix=/home/soft/nginx --with-http_stub_status_module --with-http_ssl_module
make
make install

3. 命令

nginx 命令

1
2
3
4
5
# 启动
/app/soft/nginx/sbin/nginx

# 停止
/app/soft/nginx/sbin/nginx -s stop

验证是否启动成功

1
curl 'http://locahost'

V. Redis安装

redis的安装,可以直接根据yum简单的进行安装,也可以下载安装包

1. yum安装方式

1
yum install redis

后台启动redis方式:

1
2
3
4
5
6
7
8
9
10
11
12
13

# 设置redis.conf文件,开启后台启动

vim /etc/redis.conf


## 找到 daemonize no 这一行
## 修改成yes,并保存
daemonize yes


## 启动redis
redis-server /etc/redis.conf

查看redis启动是否正常

1
2
# 查看进程号
ps -ef | grep redis

客户端连接测试

1
2
3
4
5
redis-cli

> set test 123
> get test
> expire test

关闭redis

1
redis-cli shutdown

2. 源码安装方式

下载源码并编译

1
2
3
4
wget http://download.redis.io/releases/redis-5.0.2.tar.gz
tar -zxvf redis-5.0.2.tar.gz
cd redis-5.0.2
make

设置下redis的相关配置文件,假设我们约定将数据文件存放在 /home/data/redis 目录下,则配置需要如下修改

进入配置文件 redis.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 修改默认的端口号
port 6868

# 修改密码
requirepass newPwd!

# 设置进程文件
pidfile /home/data/redis-6868/redis.pid

# 设置日志文件
logfile "/home/data/redis-6868/log/redis.log"

# 设置数据文件
dir /home/data/redis-6868/data

在启动redis之前,首先需要创建对应的目录

1
2
3
4
cd /home/data
mkdir redis-6868
cd redis-6868
mkdir data log

开始启动redis并测试

1
2
3
4
5
6
cd /home/soft/redis-5.0.2/
src/redis-server redis.conf

# 测试连接
src/redis-cli -p 6868
auth newPwd!

VI. Mysql环境安装

这里采用最简单的方式进行安装mysql,需要关注的是后面的默认配置的修改

1. 安装

1
2
3
4
5
# 添加源
rpm -Uvh http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm

# 安装
yum install mysql mysql-server mysql-libs mysql-server

上面安装完毕之后,可以开始启动服务

1
systemctl start mysqld

上面的命令在docker中执行时,会报错

1
Failed to get D-Bus connection: Operation not permitted

可以如下操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 首先设置下密码
passwd
> 输入密码 (yihui)

# 退出容器
exit

# 保存docker镜像
docker commit 0e118346222c yihui/centos

# 再次启动镜像
docker run --privileged -e "container=docker" -v /sys/fs/cgroup:/sys/fs/cgroup -ti yihui/centos /usr/sbin/init

# 输入账号和密码
4af0575c5181 login: root
Password: (yihui)

上面搞定之后,就可以继续启动mysql了

如果登录需要密码时,如下确定

1
2
3
4
grep "temporary password" /var/log/mysqld.log

## 输出如下
# A temporary password is generated for root@localhost: WClOFXUqF4&4

2. 配置修改

a. 端口号修改

默认的端口号为3306,如果需要修改端口号,则找到my.cnf文件,新加一个配置即可:

1
2
3
4
5
6
7
vim /etc/my.cnf

## 找到指定的位置,修改端口号
[mysqld]
port=3305
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock

服务重启

1
service mysqld restart

2. 密码修改

使用set password

格式:

1
mysql> set password for 用户名@localhost = password('新密码');

例子:

1
mysql> set password for root@localhost = password('123');

update 方式

1
2
3
4
5
mysql> use mysql;  

mysql> update user set password=password('123') where user='root' and host='localhost';

mysql> flush privileges;

添加用户

1
2
alter user 'root'@'localhost' identified by 'test';
create user 'test'@'%' IDENTIFIED BY 'test';

授予权限

1
2
3
# root 方式登录
grant all PRIVILEGES on test.* to 'yihui'@'%' IDENTIFIED by 'test';
flush privileges;

VIII. 其他

1. 一灰灰Bloghttps://liuyueyi.github.io/hexblog

一灰灰的个人博客,记录所有学习和工作中的博文,欢迎大家前去逛逛

2. 声明

尽信书则不如,已上内容,纯属一家之言,因个人能力有限,难免有疏漏和错误之处,如发现bug或者有更好的建议,欢迎批评指正,不吝感激

3. 扫描关注

一灰灰blog

QrCode

知识星球

goals

181129-mysql表锁死解决办法

MySQL表修改频繁,导致表被锁死,悲催的表现时这个表完全没法继续使用了,查询,修改,删除都不能使用,这种场景下除了重启mysql服务之外还可以怎么处理?

181120-Python之Mysql异步使用篇aiomysql使用小结

db的读写操作可以算是io型,对于简单的sql,获取数据的数据可能远小于传输的时间,针对这种操作,异步的访问方式就比较占优势了。本篇主要介绍在python中如何借助aiomysql来实现db的异步读写

181119-Redis性能监控之Redis-Stat

redis性能监控工具

使用 redis-stat 进行redis的性能监控数据收集

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×