0%

单例模式,也叫单子模式,是一种常用的软件设计模式。在应用这个模式时,单例对象的类必须保证只有一个实例存在。许多时候整个系统只需要拥有一个的全局对象,这样有利于我们协调系统整体的行为。

阅读全文 »

定义

二叉查找树,也称二叉搜索树、有序二叉树(英语:ordered binary tree),排序二叉树(英语:sorted binary tree),是指一棵空树或者具有下列性质的二叉树:

  1. 若任意节点的左子树不空,则左子树上所有结点的值均小于它的根结点的值;
  • 若任意节点的右子树不空,则右子树上所有结点的值均大于它的根结点的值;
  • 任意节点的左、右子树也分别为二叉查找树;
  • 没有键值相等的节点。
    阅读全文 »

SpringCloud启动脚本

启动脚本有六个参数
依次是:启动命令、环境、App的Name、运行时端口、eureka的地址、对应的服务器外网地址

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
# 服务器外网地址,
有的服务器会有多个IP地址
,但是注册到eureka上面的实例一般都是使用的内网地址,
所以需要排除外网地址

inpp=$6
server=`/sbin/ifconfig -a | grep inet | grep -v 127.0.0.1 | grep -v inet6 | awk '{print $2}' | tr -d "addrs"|grep -v $inpp`

if [ -z "$server" ];then
server=$inpp
fi
echo 服务器地址 $server

# 实例的名字
APP=$3
# 环境
ENV=$2
# 打包出来的jar包的名字,可以直接从外面传
APP_NAME=$APP-1.0.0-SNAPSHOT
# 运行时端口
PORT=$4
# eureka地址
EUREKA_HOST=$5

HEAP_MEMORY=512M
PERM_MEMORY=0M
DIRECT_MEMORY=64M

APP_HOME=`pwd`

# 组装启动时的JVM参数

JVM_OPTS="-server -XX:+HeapDumpOnOutOfMemoryError"
JVM_OPTS="${JVM_OPTS} -Xms${HEAP_MEMORY} -Xmx${HEAP_MEMORY} -XX:PermSize=${PERM_MEMORY} -XX:MaxPermSize=${PERM_MEMORY} "
JVM_OPTS="${JVM_OPTS} -XX:MaxDirectMemorySize=${DIRECT_MEMORY}"
JVM_OPTS="${JVM_OPTS} -XX:+AlwaysPreTouch"
JVM_OPTS="${JVM_OPTS} -Duser.dir=${APP_HOME} -Dapp.name=$APP_NAME"

SPRING_OPTS="--myhost=$EUREKA_HOST --spring.profiles.active=$ENV --server.port=$PORT"
JAR_FILE=$APP_NAME.jar
LOG_PATH=$APP_HOME/logs/log


start(){
checkpid
if [ ! -n "$pid" ]; then
echo "启动命令"
echo "nohup java -jar $JVM_OPTS $JAR_FILE $SPRING_OPTS >/dev/null 2>&1 &"
nohup java -jar $JVM_OPTS $JAR_FILE $SPRING_OPTS >/dev/null 2>&1 &
echo "---------------------------------"
echo "启动完成,按CTRL+C退出日志界面即可>>>>>"
echo "---------------------------------"
sleep 5s
# 到日志文件夹中寻找最新的一个日志文件
LOG_FILE=`ls -t $LOG_PATH/*.log | head -1`
# 打印启动日志,如果发现日志中包含Tomcat started这个字符说明启动成功,结束打印进程
tail -f $LOG_FILE|while read line
do
kw=`echo $line|grep "Tomcat started"|wc -l`
if [ $kw -lt 1 ];then
echo $line
else
tail_pid=`ps -ef |grep $LOG_FILE |grep -v grep |awk '{print $2}'`
kill -9 $tail_pid
fi
done
echo "执行成功"
else
echo "$APP_NAME is runing PID: $pid"
fi
}

checkpid(){
pid=`ps -ef |grep $JAR_FILE |grep -v grep |awk '{print $2}'`
}
stop(){
# 停止前直接到对应的eureka服务中删除对应的实例,URL规则可以根据注册时的不同规则自行制定
curl -X "DELETE" "http://$EUREKA_HOST/eureka/apps/$APP/$server:$PORT"
checkpid
if [ ! -n "$pid" ]; then
echo "$APP_NAME not runing"
else
echo "$APP_NAME stop..."
kill $pid
sleep 2s
kill -9 $pid
fi
}

restart(){
stop
sleep 1s
start
}

status(){
checkpid
if [ ! -n "$pid" ]; then
echo "$APP_NAME not runing"
else
echo "$APP_NAME runing PID: $pid"
fi
}
case $1 in
start) start;;
stop) stop;;
restart) restart;;
status) status;;
*) echo "require start|stop|restart|status" ;;
esac

阿里云Mysql备份恢复

安装Percona数据库

使用官网给出的安装方式

1
2
3
4
yum install http://www.percona.com/downloads/percona-release/redhat/0.1-6/percona-release-0.1-6.noarch.rpm
http://www.percona.com/downloads/percona-release/redhat/0.1-6/percona-release-0.1-6.noarch.rpm

yum install Percona-Server-server-56

恢复软件

1
2
3
4
wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.12/binary/redhat/7/x86_64/Percona-XtraBackup-2.4.12-r170eb8c-el7-x86_64-bundle.tar
tar xvf Percona-XtraBackup-2.4.12-r170eb8c-el7-x86_64-bundle.tar

yum install percona-xtrabackup-24-2.4.12-1.el7.x86_64.rpm

数据文件

从阿里上下载解压脚本和数据文件

1
2
3
4
5
6
7
wget -c 'http://oss.aliyuncs.com/aliyunecs/rds_backup_extract.sh?spm=a2c4g.11186623.2.6.JS88k1&file=rds_backup_extract.sh' -O rds_backup_extract.sh

mkdir -p /home/mysql/data

bash rds_backup_extract.sh -f copy.tar.gz -C /home/mysql/data

innobackupex --defaults-file=/home/mysql/data/backup-my.cnf --apply-log /home/mysql/data

编辑backup-my.cnf文件

vi /home/mysql/data/backup-my.cnf

注释掉下面的参数

1
2
3
4
5
#innodb_fast_checksum
#innodb_page_size
#innodb_log_block_size
#rds_encrypt_data=false
#innodb_encrypt_algorithm=aes_128_ecb

执行

1
chown -R mysql:mysql /home/mysql/data

启动

1
2
3
4
5
6
7
8
9
10
11
12
 mysqld_safe --defaults-file=/home/mysql/data/backup-my.cnf --user=mysql --datadir=/home/mysql/data
~~~
如果报这个错
Can't find file: './mysql/plugin.frm'

执行
setenforce 0

然后执行mysql_upgrade --force -uroot -p

使用mysql -uroot 登录到数据库
执行命令

delete from mysql.db where user<>’root’ and char_length(user)>0;
delete from mysql.tables_priv where user<>’root’ and char_length(user)>0;
flush privileges;
~~~