MySQL数据库

MySQL数据库

MySQL数据库的搭建

mysqladmin -uroot passwd123 #初始化密码

mysql -uroot -p123 # 登陆mysql

create database beijing charset utf8; #创建并支持中文数据库

*create database if not exists beijing charset utf8 #假设不存在则创建数据库

show databases; #查看数据库

drop database beijing; #删除beijing数据库

*drop database if exists beijing # 假设存在数据库则删除
use beijing #进入数据库

create table ditu( #创建数据表与数据表名称

​ >地区 varchar(9), # varchar 最大限制的可变长度字符串,最多255个字节,如名字,密码;

​ >新增 int, # int 整数 字节4

​ >累计 int,

​ >治愈 int );

desc ditu; #查看建立的表单

insert into ditu values(“朝阳区”,5,1728,1543); #在表单中输入内容

insert into ditu values(“大兴区”,3,131,9);

insert into ditu values(“东城区”,1,652,522);

select * from ditu; #查看完整表单
select 地区,新增,累计 from ditu; # 查看部分表单内容

show tables; #查看表单

#>地区 varchar(9) permary key auto_increment,

#primary key:主键

#auto_increment:自增

删除张三的语文成绩

  • delete from 表名 where 字段名称=“字段1”
  • delete from student where 姓名=“张三” and 分数=80;

更改语文分数为80

  • update 表名 set 字段名称=“更改字段” where 字段名称=“字段1”;
  • update student set 科目=“语文” where 分数=“80”;

where 条件 = ><

like % 模糊匹配

between …and … 在。。。之间

limit 3 显示3条

order by 字段名
#排序

order by 字段 desc 倒序排列

更改:update 表名 set 字段=值 where 条件

删除:delete from 表名 where 条件

[忘记密码]

更改密码

修改配置文件:

vim /etc/my.cnf

​ skip_grant_table #跳过密码验证

数据库中:

update mysql.user set password=password(“123”) where user=“root”

[and host=“localhost”];

数据库备份

mysqldump -uroot -p123 -A > 备份所有的库

​ -B 库名>备份指定的库

mysqldump -uroot -p123 库 表 >备份指定库下的指定表
数据库还原

1 数据库里 source 备份路径

2 linux 系统 mysql -uroot -p123 <备份的路径

3 超过11位的数字用 bigint 来替代 int 类型

数据库备份

开启二进制

vim /etc/my.cnf

​ log-bin=mysql #开启二进制

systemctl restart mariadb #重启服务

cd /var/lib/mysql #查看二进制文件ls

mysql -uroot -p 123

use qiche

1.创建数据库,数据表

2.设置初始密码

mysqladmin -uroot password 123

3.备份数据库

mysqldump -uroot -p123 -A > /root/backup.sql

4.进入mysql

MySQL -uroot -p123

5.备份到/root/backup.sql中,并退出\q

source /root/backup.sql
6.启动二进制文件

vim /etc/my.cnf

​ log-bin=mysql

7.重启mariadb

systemctl restart mariadb

8.查看MySQL配置文件

cd /var/lib/mysql/
ls

9.再次登陆mysql,记录新数据,并退出\q

insert into che values(0,“迈巴赫1”,9999); #che:表单名

insert into che values(0,“迈巴赫2”,9999);

insert into che values(0,“迈巴赫3”,9999);

select * from che; #查看是否成功记录

10.再次进入mysql配置文件,查看mysql.000001

cd /var/lib/mysql

cat mysql.000001
[里面是新记录的数据,是乱码的状态]

11.将mysql.000001,复制到/root/下

cp mysql.000001 /root/
[cd 返回到root目录下,查看文件]

12.登陆mysql,将数据库删除,并退出\q

drop database qiche;

[ 将数据库返回到 m y s q l 中 ] [将数据库返回到mysql中] [将数据库返回到mysql]

13.在数据库中将数据备份回来

source /root/backup.sql
#backup.sql 是之前备份到root目录的文件

mysql -uroot -p123 </root/backup.sql

[检查是否成功
use qiche
select * from che ]

\q #退出

14.在root目录中将之前的mysql.000001备份回去

mysqlbinlog mysql.000001 | mysql -uroot -p123

15.在MySQL中查看是否成功

mysqlbinlog 二进制文件 |mysql -uroot -p123 还原二进制

mysqladmin -uroot -p123 flush-logs 刷新二进制节点

主从集群

主:

进入mysql中

*查看主二进制文件和位置节点

show master status;

建立主从通讯账户

grant all on . to lala@‘%’ identified by ‘123’;
#lala 为用户名
#123 为密码

*退出mysql,\q

编辑mysql配置文件

vim /etc/my.cnf

log-bin=mysql #开启二进制

server-id=20 #id唯一性,不可重复

systemctl restart mariadb #重启mysql

systemctl stop firewalld #关闭防火墙

从:

修改mysql配置文件

vim /etc/my.cnf

​ server-id=22 #id唯一

重启mariadb

*关闭防火墙
进入MySQL
#配置连接参数

[根据帮助文档 {help change master to}]

change master to

master_host=‘192.168.120.20’, #主的ip地址

master_user=‘lala’, #主建立通讯的用户

lala
master_password=‘123’, #主建立通讯的密码
master_log_file=‘mysql.000001’, #主二进制文件

master_log_pos=254; #主二进制节点

#开启备连接与关闭

start slave;

stop slave;

#查看备连接状态

show slave status\G;

​ #Slave_IO_Running: Yes

​ #Slave_SQL_Running: Yes
#双yes即可

出现非双yes问题

1 配置完配置文件后没重启服务 [重启主从mariadb,备的mysql中,重启slave]

2 主从server-id相同 [my.cnf配置文件中的server-id相同]

3 主上二进制未开启 [vim /etc/my.cnf log-bin=mysql #开启二进制]

4 防火墙 [关闭防火墙 systemctl stop firewalld]

5 change master to 配置错误 [关闭slave,并重新检查配置,更改错误位置,再次启动slave]

mysql忘记密码

vim /etc/my.cnf
	skip_grant_table   #跳过密码,修改完后注释掉
	max_connections=1024 #修改数据库最大连接数为1024
	max_allowed_packet=128M #允许数据包大小为128M
systemctl restart mariadb  #重启服务
mysql
	update mysql.user set password=password("999") where user="root";   #更改密码

redis

redis安装

1.yum安装gcc-c++

yum -y install gcc-c++

2.上传压缩包:

redis-5.0.13.tar.gz

3.解压安装包:

tar -zxf redis-5.0.13.tar.gz

4.进入已解压redis-5.0.13目录,进行编译安装

cd redis-5.0.13
make && make install

5.编译安装完成后,启动redis

redis-server redis.conf &

6.查看redis端口,端口号为:6379

ss -ntlp | grep redis

7.redis-cli 客户端登录到redis服务器

​ ----shutdown 关闭redis服务器

8.exit退出客户端登录

  • set 键 值 #设置键值

  • get 键 #取值

  • del 键 #删除

  • keys * #查看所有键

  • sadd 集合名称 集合元素1 元素2 元素2

  • smembers 集合名称 #查看集合元素

  • subscribe 频道名称 #创建一个订阅频道

  • publish 频道名称 “消息” #发布消息

    [subscribe 与 publish 是在同一台虚拟机ip的情况下,一个用来查看消息,一个用来发布消息]

redis配置文件

vim redis.conf

69 bind 0.0.0.0 允许远程所有主机登录

88 protected-mode no 去掉写保护

113 timeout 300 设置客户端登录闲置时间

136 daemonize yes 设置成守护进程 相当于 redis-server redis.conf &

507 requirepass hao123 设置客户端登录的密码

在行内shutdown关闭后退出exit
在行外重新打开redis
redis-server redis.conf
再进入行内登陆密码认证
auth

[配置文件507行设置的密码]
输出ok即是成功

redis 主从集群

[三台虚拟机]
主从安装redis

{
yum -y install gcc-c++
上传解压tar -zxf redis…tar.gz
make && make install
…}

redis主从集群

  • 主关闭防火墙
  • systemctl stop firewalld

配置文件:

vim redis.conf

相同部分

1 69 bind 0.0.0.0

2 88 protected-mode no

3 507 requirepass hao123 密码

从的不同部分

286 replicaof 192.168.80.128 6379

293 masterauth hao123

进入redis并登陆

auth hao123

info #查看主从关系

远程免密登陆

linux 密钥对

1、ssh-keygen #生成秘钥

2、ssh-copy-id 远程ip #拷贝秘钥到远程

3、scp 命令 :scp 本地文件或路径 远程ip:路径 #拷贝到远程

例:scp /backup/mysql/baidu.sql 192.168.120.20:/opt/

增量备份

tar -g 节点名 -cPf #切记不可和参数z同时使用 P:绝对路径

shell脚本

vim 1.sh #创建脚本文件以.sh结尾

#!/bin/sh #说明脚本文件

#!/bin/sh 
yum -y install httpd
systemctl start httpd
name="wahaha" 
#调用变量 $变量名
#输入函数 read -ep"提示信息 e 支持tab" 变量名称
read -ep"请输入你的年龄:"age
#输出函数 echo "输出内容 $变量"
echo "我的名字:$name"
echo "你的年龄:$age"

花括号用不用都可以,但推荐使用
echo $your_name
echo ${your_name}
echo "I am good at ${skill}Script"

echo "Shell 传递参数实例!";
echo "执行的文件名:$0";
echo "第一个参数为:$1";
echo "第二个参数为:$2";
echo "第三个参数为:$3";
输出结果:
chmod +x test.sh
./test.sh 1 2 3
执行的文件名:./test.sh
第一个参数为:1
第二个参数为:2
第三个参数为:3
cut功能:分割

从一行中切割部分内容

-d : 设置分割符

-f : 指定分割后的域

-c : 按字符分割

cut 参数 文件

显示/etc/passwd,以冒号分隔的第一列到第三列

cut -d “:” -f1-3 /etc/passwd

显示/etc/passwd,以冒号分隔的第一列和第三列

cut -d “:” -f1,3 /etc/passwd

awk切片

-F :指定域分割符(默认空格或tab键)

-f :指定从脚本文件中读取awk命令

语法:

awk [ -F 分割符  ] `/模式/{操作}` 文件名
常见的操作是:print printf

$0则表示所有域

$1表示第一个域

$n表示第n个域

操作print

cat /etc/passwd |awk -F ':' '{print $1}'

操作printf:格式化输出

awk -F: '{printf "%-15s %i\n",$1,$3}' /etc/passwd
awk -F: '{printf "%5d\n",$3}' /etc/passwd
sort功能:排序

-r:逆序h

-t:设置分割符

-n:使用数字排序

-u:重复行仅显示一次

-k:按照第几个域排序

+a:从分隔后的第a域开始

-b:到分隔后的第b个域结束

[注:分隔后的列是从0开始计数]

显示/etc/passwd, b

uniq功能:过滤重复行

[uniq命令可以去除排序过的文件中的重复行,因此uniq经常和sort合用。也就是说,为了使uniq起作用,所有的重复行必须是相邻的。]

-d:仅显示重复行

-u:仅显示非重复行

-c:显示行连续重复的次数

1、列出以前用户登陆的信息,以空格分隔的第一列,并且只显示不重复行

last | cut -d " " -f1 | uniq -u

2、列出以前用户登陆的信息,以空格分隔的第一列,并且只显示有重复数据行,每种重复只显示一行

last | cut -d " " -f1 | uniq -d

3、列出以前用户登陆的信息,以空格分隔的第一列,并且打印每一重复行出现次数

last | cut -d " " -f1 | uniq -c

wc功能:计数

-l:多少行

-m:多少字符

-w:多少字

查看/etc/passwd里面有多少行

cat /etc/passwd | wc -l

find命令的用法

语法格式:

find 目录 -选项 动作[-print -exec -ok…]

基本选项:

name :按照文件名查找文件

*:任意长度的字符串

?:任意一个字符

[]:取值范围内的一个字符

[0-9]数字

[a-zA-Z]字母

-type :查找某一类型文件:

​ d - 目录

​ l - 符号链接文件

​ f - 普通文件

。。。更多忽略

基本动作:

-print: 将匹配的文件输出到标准输出

-fprint 文件名:将匹配的文件输出到文件

-exec:对匹配的文件执行该参数所给出的命令。

[相应命令的形式为’command’ { } ;,注意{ }和\;之间的空格]

1、在/logs目录中查找更改时间在5日以前的文件并删除它们

find logs -type f -mtime +5 -exec rm {} ;

2、在当前目录中查找一分钟之前,以.sh后缀的文件,并将他复制到/opt下

find . -mtime -1 -name “*.sh” -exec cp {} /opt/ ;

循环语句

[ str1 opr str2 ] //注意方括号左右两边的空格

[ opr str ]

opr取值:

相等:= //判断两个字符串是否相等

不等:!= //判断两个字符串是否不等

空串:-z //判断字符串长度是否为0,即判断字符串是否为空,为空返回真,非空返回假

非空串:-n //判断字符串长度是否不为0,即判断字符串是否非空,为空返回假,非空返回真

关系运算符

运算符说明举例
-eq检测两个数是否相等(==),相等返回 true。[ $a -eq $b ] 返回 false。
-ne检测两个数是否不相等(!=),不相等返回 true。[ $a -ne $b ] 返回 true。
-gt检测左边的数是否大于(>)右边的,如果是,则返回 true。[ $a -gt $b ] 返回 false。
-lt检测左边的数是否小于(<)右边的,如果是,则返回 true。[ $a -lt $b ] 返回 true。
-ge检测左边的数是否大于等于(>=)右边的,如果是,则返回 true。[ $a -ge $b ] 返回 false。
-le检测左边的数是否小于等于(<=)右边的,如果是,则返回 true。[ $a -le $b ] 返回 true。

布尔运算符

运算符说明举例
!非运算,表达式为 true 则返回 false,否则返回 true。[ ! false ] 返回 true。
-o或运算,有一个表达式为 true 则返回 true。[ $a -lt 20 -o $b -gt 100 ] 返回 true。
-a与运算,两个表达式都为 true 才返回 true。[ $a -lt 20 -a $b -gt 100 ] 返回 false。

字符串运算符

假定变量 a 为 10,变量 b 为 20:

运算符说明举例
=检测两个字符串是否相等,相等返回 true。[ $a = $b ] 返回 false。
!=检测两个字符串是否不相等,不相等返回 true。[ $a != $b ] 返回 true。
-z检测字符串长度是否为0,为0返回 true。[ -z $a ] 返回 false。
-n检测字符串长度是否不为 0,不为 0 返回 true。[ -n “$a” ] 返回 true。
$检测字符串是否不为空,不为空返回 true。[ $a ] 返回 true。

if循环

安装httpd检查是否成功并启动成功

#!/bin/sh
yum -y install httpd
if [ $? -eq 0 ];then    # $?-以上命令
        echo "httpd,安装成功"
        systemctl start httpd
        if [ $? -eq 0 ];then
                echo "httpd,启动成功"
        else
                echo "httpd,启动失败"
        fi
        systemctl stop firewalld
else
        echo "httpd,安装失败"
fi

#!/bin/sh

read -ep"请输入你的名字:" name
if [ $name = "张三" ];then
        echo "输入正确"
else
        if [  $name != "张三" ];then
                echo "打脸"
        elif[ $name -ne " " ];
                echo "重新输入"
        fi
fi

#!/bin/sh 

yum -y install mariadb-server httpd php php-mysql >>/dev/null       #/dev/null 回收站 不显示弹窗
if [ $? -eq 0 ];then
        echo "lamp安装成功"
        systemctl start mariadb
        systemctl start httpd
        systemctl stop firewalld
else
        echo "安装失败"
fi

#mysql -e"命令"
mysql -uroot -p123 -e"create database if not exists wg"
if [ $? -eq 0 ];then
        echo "配置成功"
        mysql -uroot -p123 -e"grant all on *.* to china@'%' identified by '123'"
        if [ $? -eq 0 ];then
                echo "创建成功"
        else
                echo "创建时间"
        fi
else
        echo "配置失败"
fi

删除变量

使用 unset 命令可以删除变量。语法:

unset variable_name

case询问

#!/bin/sh

while true  #死循环
do
echo "
1.启动httpd
2.停止httpd
3.重启httpd
4.退出"
read -ep"请用户进行选择:" xuan   #输入的选项
case $xuan in              #case询问变量xuan
1)						
        systemctl start httpd
        if [ $? -eq 0 ];then
                echo "启动成功"
        else
                echo "启动失败"
        fi
;;
2)
        systemctl stop httpd
        if [ $? -eq 0 ];then
                echo "成功"
        else
                echo "失败"
        fi
;;
3)
        systemctl restart httpd
        if [ $? -eq 0 ];then
                echo "启动成功"
        else
                echo "启动失败"
        fi
;;
4)
        break
;;
*)
        echo "输入错误,请重新输入"
;;
esac
done

#while 死循环
while tre 
...
done
#break 退出死循环

特殊字符处理参数

$#传递到脚本的参数个数
$*以一个单字符串显示所有向脚本传递的参数。 如"$*“用「”」括起来的情况、以"$1 $2 … $n"的形式输出所有参数。
$$脚本运行的当前进程ID号
$!后台运行的最后一个进程的ID号
$@ ∗ 相同,但是使用时加引号,并在引号中返回每个参数。如 " *相同,但是使用时加引号,并在引号中返回每个参数。 如" 相同,但是使用时加引号,并在引号中返回每个参数。如"@“用「”」括起来的情况、以"$1" “ 2 " … " 2" … " 2""n” 的形式输出所有参数。
$-显示Shell使用的当前选项,与set命令功能相同。
$?显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。

$* 与 $@ 区别:

  • 相同点:都是引用所有参数。
  • 不同点:只有在双引号中体现出来。假设在脚本运行时写了三个参数 1、2、3,则 " * " 等价于 “1 2 3”(传递了一个参数),而 “@” 等价于 “1” “2” “3”(传递了三个参数)。
echo "-- \$* 演示 ---"
for i in "$*"; do
    echo $i
done
echo "-- \$@ 演示 ---"
for i in "$@"; do
    echo $i
done
输出效果:
$ chmod +x test.sh 
$ ./test.sh 1 2 3
-- $* 演示 ---
1 2 3
-- $@ 演示 ---
1
2
3

shell脚本案列

MySQL数据库备份压缩


#!/bin/sh

yum -y install mariadb-server >/var/null  #安装

#检查mariadb是什么状态,如果未启动则启动
systemctl status mariadb
if [ $? -eq 0 ];then      #使用上面的命令,查看状态
        echo "服务已启动"  #如果是0则输出已启动
else
        echo "未启动"      #不是则输出未启动,并启动
        systemctl restart mariadb
fi#结尾

#创建文件目录,判断是否存在,如果不存在则创建目录
dbs=(wg rg yd)       #数组
if [ -d /backup/mysql/`date +%F` ];then  #-d 判断目录是否存在  
        echo "目录存在"					#-!d 目录不存在
else
        echo "目录不存在,已创建"
        mkdir -p /backup/mysql/`date +%F`
fi

#判断mysql是否备份成功,若成功则打包压缩至文件目录下,并判断是否压缩成功
for db in ${dbs[*]} 
do
        mysqldump -uroot -p123 -B $db >/backup/mysql/`date +%F`/$db-`date +%Y%m%d`.sql
        if [ $? -eq 0 ];then
                echo "$db 备份成功"
                tar -zcPf /backup/mysql/`date +%F`/$db-`date +%Y%m%d`.sql.tar.gz /backup/mysql/`date +%F`/$db-`date +%Y%m%d`.sql
                if [ $? -eq 0 ];then
                        echo "$db 已压缩"
                else
                        echo "$db 压缩失败"
                fi
        else
                echo "备份失败"
        fi
done

#清除目录中以.sql结尾的文件,并判断
rm -rf /backup/mysql/`date +%F`/*.sql
if [ $? -eq 0 ];then
        echo "sql已清除" 
else
        echo "sql未清除"
fi

检验是否安装mysql

#!/bin/sh
#验证是否安装mariadb
mysql --version >>/var/null
if [ $? -eq 0 ];then
        echo "mariadb已安装"
else
        echo "正在进行安装mariadb"
        yum -y install mariadb-server >>/var/null
        echo "安装成功!"
fi

利用shell脚本设置mysql主从集群

主:

yum -y install mariadb-server 
if [ $? -eq 0 ];then
	systemctl start mariadb 
	systemctl stop firewalld
	echo "安装完毕"
fi
#配置编码
cat /etc/my.cnf |grep "server-id=20"
if [ $? -eq 0 ];then
        echo "编码已配置"
else
        echo "进行编码配置"
        sed -i 3a"server-id=20" /etc/my.cnf
fi

#配置二进制
cat /etc/my.cnf | grep "log-bin=mysql"
if [ $? -eq 0 ];then
        echo "二进制已配置"
else
        echo "进行二进制配置"   
        sed -i 3a"log-bin=mysql" /etc/my.cnf
fi
systemctl restart mariadb
#mysqladmin -uroot password 123
mysql -uroot -p123 -e"grant all on *.* to yeye@'%' identified by '123'"
if [ $? -eq 0 ];then
        echo "成功"
else
        echo "失败"
fi

mysql -uroot -p123 -e"show master status"
if [ $? -eq 0 ];then
        echo "成功1"
else
        echo "失败2" 
fi

从:

#!/bin/sh

#验证是否安装mariadb
mysql --version >>/var/null
if [ $? -eq 0 ];then
        echo "mariadb已安装"
else
        echo "正在进行安装mariadb"
        yum -y install mariadb-server >>/var/null
        
        echo "安装成功!"
fi

systemctl start mariadb
systemctl stop firewalld
mysqladmin -uroot password 123
cat /etc/my.cnf | grep "server-id=22"
if [ $? -eq 0 ];then
        echo "编码已配置"
else
        echo "正在配置"
        sed -i 3a"server-id=22" /etc/my.cnf
fi

systemctl restart mariadb
mysql -uroot -p123 -e"stop slave"
mysql -uroot -p123 -e"change master to master_host='192.168.120.20',master_user='yeye',master_password='123',master_log_file='mysql.000007',master_log_pos=368;"

mysql -uroot -p123 -e"start slave"
mysql -uroot -p123 -e"show slave status\G"

利用shell脚本配置httpd

#!/bin/sh
yum -y install httpd
if [ $? -eq 0 ];then
        echo "安装成功"
        systemctl start httpd
        systemctl stop firewalld
else
        echo "安装失败"
fi
#用户输入虚拟主机ip
read -ep"输入虚拟主机ip:" ip
ifconfig ens34:0 $ip/24
#用户输入网站目录
read -ep"输入网站目录:" lu
mkdir -p /var/www/html/$lu
#修改httpd.conf  164c:文件164行
sed -i 164c"DiretoryIndex index.php" /etc/httpd/conf/httpd.conf
#修改配置文件
cat >>/etc/httpd/conf/httpd.conf<<EOF
<virtualhost $ip:80>
documentroot /var/www/html/$lu
</virtualhost>
EOF
systemctl restart httpd

echo ">>>>>$ip<<<<<<" >/var/www/html/$lu/index.html
echo "测试页面 $ip
以上文件内容解释

向文件追加内容
cat >>文件路径<<EOF
文件内容 #顶格写
EOF  #以EOF结束
vim 加上文件  +行号  #直接定位某行

利用函数调用文件

函数模型
函数名(){
需要操作的内容
}

被调用的文件
a.sh 
yun(){
num=`mysql -uroot -p123 -e"show slave status\G;"|grep "Yes"|wc -l`  #判断主从是否正常,双yes
if [ $num -eq 2 ]
	echo "主从没问题"
else 
	echo "主从有问题"
fi
}
yun  # 函数名

调用函数
b.sh
source /root/a.sh  #调用函数文件
yun # 需要调用的函数名

执行b文件
sh b.sh

利用脚本批量远程部署脚本

核心文件lamp.sh
#!/bin/sh
ping -c 2 www.baidu.com
if [ $? -eq 0 ];then
	echo "网络正常"
else
	echo "网络异常"
fi
yum -y install httpd mariadb-server php
if [ $? -eq 0 ];then
	echo "lamp安装成功"
	systemctl start httpd mariadb
	systemctl stop firewalld
else
	echo "lamp失败"
fi
cat >>/var/www/html/index.php<<EOF
<?php
phpinfo();
?>
EOF
systemctl restart httpd
echo "请访问php页面"

存放IP地址txt文件ip.txt
192.168.120.22
192.168.120.23
192.168.120.24

循环部署IP文件所有地址c.sh
#!/bin/sh
#循环部署文件
for ip in `cat /root/ip.txt`
do 
	#远程拷贝文件
	scp /root/lamp.sh $ip:/root/
	#远程执行脚本
	ssh $ip sh /root/lamp.sh
	if [ $? -eq 0 ];then
		echo "部署成功"
	else 
		echo "部署失败"
	fi
done

ssh-keygen          #生成秘钥 
ssh-copy-id 远程ip  #拷贝密钥到远程

sh c.sh #执行脚本

其他:

判断输出是否是10个字

一个中文字占3个字符,10个字就30个

#!/bin/sh

read -ep"请输入10个字:" zi
if [ $(expr length "$zi") -le 30 ];then
        echo "$zi"
else
        echo "$zi #"
fi                    

日志分析

了解ip 、pv、uv概念

ip值: 一天内使用不同ip地址访问网站次数;同一个ip访问多次同一个网站页面记为一次,独立ip数均为1,两台机器使用同一个ip,也记为1个ip访问

PV值: 页面浏览量,或点击量;既网站24小时人均浏览网站页面次数;

如果你的网站到了23点,单纯IP有60万条的话,每个访问者平均访问了3个页面,那么PV表的记录就要有180(60×3)万条

UV值: IP地址访问某个网站或点击某条新闻的人数;

同一天内,同一个IP地址,第一次进入网站具有独立IP的访问者,

同一天内再次访问该网站则不计数

日志格式

58.61.164.141 – - [22/Feb/2010:09:51:46 +0800] "GET / HTTP/1.1" 206 6326 "http://www.google.cn/search?q=webdataanalysis" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)"

192.168.24.235 - - [17/Nov/2017:09:37:23 +0800] "GET /Centos7/base/Packages/perl-PlRPC-0.2020-14.el7.noarch.rpm HTTP/1.1" 200 36592 "-" "urlgrabber/3.10 yum/3.4.3" "-"

192.168.24.235

  • 访问主机:显示主机的ip地址或者已解析的域名

  • - 标识符:由identd或直接由浏览器返回浏览者的EMAIL或其他唯一标示,因为涉及用户邮箱等隐私信息,目前几乎所有 的浏览器就取消了这项功能

  • - 授权用户:用于记录浏览者进行身份验证时提供的名字,如果需要身份验证或者访问密码保护的信息则这项不为空,但 目前大多数网站的日志这项也都是为空的。

[22/Feb/2010:09:51:46 +0800]

  • 日期时间:格式[日期/月份/年份:小时:分钟:秒钟 时区],占用的字符位基本固定

  • 请求类型:常见的请求类型主要包括GET/POST/HEAD三种

  • 请求资源:显示相应资源的URL,可以是网站、图片、动画、css资源等

  • 协议版本号:显示协议以及版本信息,通常是HTTP/1.1 或 HTTP/1.0

  • 状态码:响应状态; 1xx表示继续消息、

​ 2xx表示请求成功、

​ 3xx表示请求重定向、

​ 4xx表示客户端错误、

​ 5xx表示服务器错误

  • 传输字节数: 请求中一共传输的字节数

    • 来源页面:用于表示浏览者在访问该页面之前所浏览的页面,只有从上一页面链接过来的请求才会有该项输出, 如果是新开的页面则该项为空
  • 用户代理:用于显示用户详细信息、包括IP、OS

cat access_log | awk '{print $1}'| sort | uniq -c |sort -n 
 查看日志文件的ip,切割 排序  过滤行 正序排序
  • 36
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值