linux

第  一  天

后端开发(python,java)  python+mysql+js+css+django(crm项目)+flask+linux
前端小姐姐
UI小姐姐
嵌入式软件开发工程师
测试工程师
运维工程师(背锅侠)   linux系统维护
自动化运维
运维开发岗
机房运维工程师(IDC)
nginx + django 

DBA(数据库管理员)
网络工程师
架构师(PPT架构师)
项目经理
产品经理(容易被打的那个人)
SEO(网页排名搜索)
笔记本的外观
内置键盘
触摸板
屏幕
摄像头
usb
typec
电源接口
耳机接口
喇叭

笔记本内部:
主板
内存条
cpu 中央处理器
网卡
声卡
显卡
磁盘
散热风扇
硅脂
纽扣电池

redhat  红帽子操作系统 
rhcsa  rhce rhca 

零度
无尘
无湿度
常见服务器有
云服务器,阿里云,腾讯云,华为云..等等...初创型公司选择云服务器,省钱,省人力
路飞学城 有8台阿里云,运行nginx,vue,django,mysql,redis
物理服务器
dell poweredge r720型号
26台实体服务器,托管在`世纪互联`机房
通过vmware虚拟化技术,虚拟出260多个linux操作系统
有钱的公司,自建机房,,中等公司,选择机房托管,世纪互联

linux发行版
centos 免费的redhat,是企业常用的服务端操作系统,
ubuntu 乌班图
 
suse  德国的蜥蜴系统

安装操作系统的方式
1.用u盘光盘刻录 操作系统,进行安装
vmware虚拟化软件,
vmware workstation  个人工作版,性能较低,最多支持几十个虚拟机,根据机器硬件分配
vmware esxi vsphere ,性能强悍,企业版虚拟化

linux 查看ip地址
ip addr show 
ifconfig
linux的ip地址有哪些
127.0.0.1  本机回环地址  127.0.0.1:8000  只能自己跟自己玩

0.0.0.0   绑定机器所有的网卡,所有地址    0.0.0.0:8000 可以对外提供访问
192.168.16.142    192.168.16.142:8000   

linux远程连接,连接本地的虚拟机
连接远程的云服务器,等等
连接命令如下:
ssh   root@192.168.16.142  
windows默认是没有ssh命令的,可以通过安装xshell 获取ssh命令

学习linux的文件目录管理
linux的目录分隔符是 正斜杠
/etc/maven
windows是反斜杠
C:Userslucky>
linux只有一个顶点目录 叫做 根 目录,如同一个倒过来的树状图
/root  根底下的root文件
/mydjango   根目录底下的mydjango文件夹

学习linux文件目录的 增删改查命令
背景: 此时待在 /tmp 目录下,这是一个临时临时文件夹,数据都不重要
linux  切换目录的命令是

cd     /tmp
我是谁  whoami 
我在哪  pwd   print work  directory

创建文件夹
mkdir directory  (mkdir 命令)
创建文件夹 抖音
创建文本文件来了老弟.txt
touch  来了老弟.txt
touch  .来了老弟.txt

rm  -rf   你想删除的内容
 -r  递归删除文件和文件夹
 -f  强制删除不提示
删除文件
rm   文件名 
删除文件夹
rm  
 


修改文件名
mv 旧的文件名    新的文件名
mv  好嗨哦.txt   大碗宽面.txt
mv还有移动文件的功能,语法如下
mv 你想移动的文件   你要移动到的目录
 
 

cat 查看文本内容
cat -n 文件 
查看文件内容且显示行号
list(ls 列出目录的内容)
ls .   查看当前目录的内容,这个点 可以省略
ls  ..  查看上一级的内容 
ls -a  .  显示当前目录 所有的内容和隐藏文件
 -a 参数是 显示 all的意思
 
 
 
.   当前目录
..   上一级目录
linux  蓝色的是文件夹,白色的是普通文本
以及通过权限查看   d 是文件夹  - 是文本

clear 清屏

绝对路径 :只要从根目录开始的路径写法,都是绝对路径
ls  /opt  

相对路径:  只要不是根目录开头,那就是个相对路径
ls ../etc 

以下linux特殊符号的作用 
/root
/home/yu
~   当前登录用户的家目录
-   返回上一次的工作目录
.
..
#   超级用户的身份提示符
$  普通用户的身份提示符
 
linux查看命令的帮助文档
man手册
man  mkdir    #查看mkdir命令所有用法
mkdir --help 
http://linux.51yip.com/   linux命令在线查询
#递归创建文件夹
-p 参数用法
mkdir -p  ./20期/{爱打瞌睡的黑哥,20期的郭大哥,一脸懵逼的赵大宝}

linux的文本编辑器
vi  记事本,很垃圾
vim  notepad++  很牛皮
1.打开文件,此时进入命令模式vim  first.py
2.需要输入编辑的命令,输入  i ,进入插入模式
3.进入编辑模式,开始写代码
4.退出编辑模式,需要按下esc  ,回到命令模式
5.输入 冒号,进入底线编辑模式   :wq!  write  quit  ! 强制性
:w!   强制写入 不退出
:q!   不保存强制退出
#!coding:utf8
print("我问王思聪,钱是万能的吗?  对不起,钱是万达的")
 

>  重定向输出覆盖符
>> 重定向输出追加写入符
<<  数据追加写入符
<   数据写入
EOF  end of file  文件的头尾符号
cat >>李白.py<<EOF
作业提交方式:
码云提交ximd思维导图,以及作业完成情况
 
 
 

echo 相当于print命令,打印内容
 

ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.26.129  netmask 255.255.255.0  broadcast 192.168.26.255
        inet6 fe80::4559:9c21:f3f2:446c  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:ae:e0:3a  txqueuelen 1000  (Ethernet)
        RX packets 102  bytes 11630 (11.3 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 75  bytes 8882 (8.6 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 84  bytes 9492 (9.2 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 84  bytes 9492 (9.2 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
virbr0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 192.168.122.1  netmask 255.255.255.0  broadcast 192.168.122.255
        ether 52:54:00:77:a4:ae  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

[root@bogon home]# cd /root
[root@bogon ~]# ls -a .
[root@bogon home]# cd /
[root@bogon /]# ls -a .
 

第   二   天

day02 linux笔记
服务器是什么
就是网络中对外提供访问的一台性能超强的计算机
真实存在的实体服务器
通过虚拟化技术,生成的云服务器

我们在服务器上安装 centos7操作系统
获取服务器的ip地址,即可远程连接
企业级服务器,仅仅是安装纯黑屏的服务器界面,并且
linux提供 f1~f7 7个终端,使用 ctrl + alt + f1~f7切换
 
linux命令学习

查看文本内容的命令
cat 文件名 

复制粘贴
用于文件的备份,或者安全性考虑
语法:
cp   你想拷贝的文件  拷贝后的文件名
cp -r  递归拷贝文件夹

alias别名命令
给命令添加别名
直接输入alias是显示所有的别名
添加别名的语法:

#让用户输入rm的时候,就提示他,"你这个笨蛋,求你别用rm了,用mv把"

alias  rm="echo 你这个笨蛋,求你别用rm了,用mv把"
取消rm别名
unalias  rm

linux的查找功能,找到服务器上的文件,或文件夹
语法是:
find   从哪个路径找   你要找的文件是什么名字 
# 全局搜索,机器上所有的txt文本
find  /    -name  '*.txt'
#局部搜索
find  /opt    -name  '*.txt'
#指定查找的文件类型
find / -type f  -name "文件名"
find / -type d -name "文件名"
#linux的管道符,  | 
常用在  过滤机器上的进程信息
过滤机器上的端口信息
案例:
ls  /tmp |  grep ".py"
#文本过滤命令 grep
语法是
grep  参数  想要过滤的内容  操作的文件
#过滤出文件的有益信息,出去空白行,注释行,并且显示出行号
grep  -v '^#'  settings.py  |  grep "^$"  -v  -n 
 
#从文件头部看内容,从文件尾巴看内容
head  文件名  #默认看前十行
head -5  filename 
tail  filename  #倒数看十行

#查看指定的一个区间范围
head -20 mypwd.txt   |  tail -11

#实时监测文件内容,常用于日志文件的内容监测
tail -f  filename

#linux和linux之间互传文件
用的是 scp  命令
#语法
#把自己的文件,发送给别人
scp  你想发送的文件   你想要发送到的地方
#偷走别人机器的东西
scp  你想要的内容  你想存储到的地方
#传输本地文件到远程地址
scp 本地文件  远程用户名@远程ip:远程文件夹/
scp 本地文件  远程用户名@远程ip:远程文件夹/远程文件名
scp /tmp/chaoge.py root@192.168.1.155:/home/
scp /tmp/chaoge.py root@192.168.1.155:/home/chaoge_python.py
scp -r  本地文件夹  远程用户名@远程ip:远程文件夹/
scp -r /tmp/oldboy root@192.168.1.155:/home/oldboy
#复制远程文件到本地
scp root@192.168.1.155:/home/oldboy.txt /tmp/oldboy.txt
scp -r root@192.168.1.155:/home/oldboy /home/

#linux和windows互传文件的方式
1. lrzsz 这是一个工具包,需要安装,linux通过yum工具软件包管理
 
yum install   lrzsz
#使用如下两条命令
rz (接受文件)
sz  (发送文件)
2.xftp 需要单独下载这个软件
 
#在线获取资源的命令
#语法是 wget  加上url的地址 
wget    http://hcdn1.luffycity.com/static/frontend/degreecourse/1/PCbanner_1561112419.1568582.png
 
#linux文件压缩解压
tar 命令用于压缩解压
可用参数是
-c  打包
-x 解包
-v 显示打包解包 过程
-z  调用gzip压缩指令,节省磁盘
-f  指定压缩文件的名字  [这个-f必须写在参数最后面]
 
#打包 仅仅是包装在一起
#压缩 ,节省磁盘空间
#对文件打包的命令
#语法
tar 参数  你的打包文件的名字     你要打包的内容 
#压缩命令
tar -cvf  文件名  ./*  #打包所有内容
tar -zcvf  文件名  ./*
#解压缩命令
tar -xvf  文件名.tar 
tar -zxvf  文件名.tar.gz

#编译安装python3 ,源代码编译安装
1.解决软件编译所需要的程序依赖
yum install gcc  patch  libffi-devel python-devel  zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel -y
2.下载python3的源代码
wget https://www.python.org/ftp/python/3.6.2/Python-3.6.2.tgz
3.解压缩python源代码包
tar -xvf Python-3.6.2.tgz
 
#进入解压缩之后的源代码包目录
cd Python-3.6.2/

4.编译三部曲
 1.指定python安装路径,释放makefile编译文件
 ./configure --prefix=/opt/python36/ 
 
 2.编译
 直接执行make指令,会调用gcc编译工具,开始编译python的c语言代码
 
 make
 
 3.编译且安装,走到这一步,才是真正的生成/opt/python36/这个文件夹,以及python3解释器
 make install
 
 4.备注,以上2,3步骤,可以合为一个
 make && make install 
 
 
5.linux的环境变量知识点
#查看PATH变量的值
取出变量的值
echo $变量名
#取出PATH的值
echo $PATH
输出如下:

linux的path分隔符是冒号 ,并且加载顺序是自上而下,从前往后
/usr/local/sbin:
/usr/local/bin:
/usr/sbin:
/usr/bin:
/root/bin
windows的path变量
windows以分号区分目录,也是自上而下加载顺序
D:python3;
d:Gitcmd;
D:python3Scripts;
D:mysqlmysql-5.6.43-winx64in;

PATH的作用是,可以让你快捷输入相对路径的命令 ,操作系统会去path指定的目录中去寻找,
是否有这个命令
可以用which命令验证
#添加python3的解释器目录,加入path,修改path变量的值
PATH="/opt/python36/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin"
#linux的变量赋值,只是临时生效,需要写入一个全局变量配置文件,每次开机都生效
/etc/profile  
 
ctrl + d  快速退出会话
ctrl + shift + r  快速登录
 
#安装一个django
1.安装django模块,使用豆瓣源下载
 pip3  install -i https://pypi.douban.com/simple django==1.11.9 
2.创建django项目
django-admin startproject  mycrm
创建django应用
django-admin startapp app01
3.注意修改django的settings.py文件
ALLOW_HOSTS=[]
4.运行django
 

#查看系统状态的命令
#统计文件大小的方式
ls -lh
二个是
du 命令
du -sh  ./*
-s 统计文件夹大小合计
-h 显示kb mb单位
 
#查看磁盘目录大小
df -h
#查看内存大小
free -m
#linux的任务管理器  命令
top

#查看当前linux的发行版是什么
cat /etc/os-release  #这个文件存放了系统信息
 

#linux文件的作用
/etc/profile 这个文件每次linux开机都会进行读取,因此把PATH写入进入,就能永久生效了
vim /etc/profile 
 
 
#linux的变量赋值过程,不得有空格
例如
name="你好"
 

vim 讲解

#linux时间同步命令
ntpdate -u ntp.aliyun.com
#  -u 更新时间

#linux的爬虫命令,递归获取网站资源
wget -r -p http://www.luffycity.com

#vim快捷命令
 

第   三   天

linux的用户管理:
1,系统默认有一个超级用户root
root可以创建普通用户
useradd  命令创建用户,用户信息存放在 /etc/passwd 
passwd 可以更改用户的密码
用法是
passwd  用户名

#linux系统默认创建的UID是从 0~999开始
#root创建的普通用户id是从1000开始的
#可以通过id命令,查看用户的信息
#用户切换
su 命令 中间必须加上 横杠,代表完全的用户环境变量切换

语法
su  -  用户名
#root可以随意的切换普通用户
#普通用户切换root  输入root的密码
#普通用户之间切换 也要输入对方密码

su -  root
su -  sange

#用户提权的命令之-sudo   黄马褂

配置方式
1.用root打开/etc/sudoers文件
2.找到如下行配置,修改配置如下
## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL
sange   ALL=(ALL)       ALL
3.此时sange就可以使用sudo命令了

visudo命令,也是打开/etc/sudoers文件,并且提供语法检测功能

#用户删除命令
userdel -rf 用户名
#文件与文件夹权限

#linux的软链接,快捷方式
语法:
ln  -s  目标文件绝对路径  快捷方式绝对路径
-rw-r--r--. 1 root root       10 Jun 28 09:14 徐增福的电话.txt

-  普通文件
d  文件夹
l   软链接
- rw-  r--   r--   #解读它

- rw-(属主的权限)   r--(属组的权限)   r--(其他人,第三者的权限)
r   可读 对应数字  4
w  可写  对应数字  2
x  可执行 (文件绿色代表可执行 )  对应数字1

#修改文件的权限命令
change mode(chmod)
语法
chmod 权限  操作的对象
chmod u+r  file   chmod u-r file 
 
chmod u+w  file
chmod u+x  file

chmod g+r/w/x
chmod  o+r/w/x  

#读写执行的权限,是有顺序的
必须是 
rwx #可读可写可执行
r--    #只读
-w-  #只写
--x  #只能执行
r  4   cat   more less
w  2   echo  vim 
x 1    直接执行 或者用 sh解释器执行
6  6  6 
4+2+0   4+2+0  4+2+0
 
 
chmod 数字权限  文件对象
chmod  666  文件权限
-rw-rw-rw-  

chmod 555 文件权限  
5 5 5 
user  group  others
4+0+1  4+0+1  4+0+1
r-x  r-x  r-x
chmod  755  file
-rwx   r-x  r-x

chmod  077  file

----rwxrwx  file
#更改文件的属主
chown  用户名   file 
#更改文件的属组
chgrp  用户组名  file 

#文件夹的读写执行
r   ls 
w    进入文件夹创建文件 touch
x   cd 可以进入文件夹

#linux的命令提示符
通过PS1变量所控制
[u@h w ]$
[u@h w ]$

#修改主机名
hostnamectl set-hostname  s20
#linux的网络端口管理命令
netstat [选项]
-t或--tcp:显示TCP传输协议的连线状况;
-u或--udp:显示UDP传输协议的连线状况;
-n或--numeric:直接使用ip地址,而不通过域名服务器;
-l或--listening:显示监控中的服务器的Socket;
-p或--programs:显示正在使用Socket的程序识别码和程序名称;
-a或--all:显示所有连线中的Socket;
 
iptables是软件防火墙 ,公司可能会用,可能不用
还有硬件防火墙的存在,保证服务器安全
学习阶段直接关掉防火墙,为了试验方便
export 读取shell变量的命令

#关闭防火墙的命令
#清空防火墙规则
iptables -F
#关闭防火墙服务
systemctl stop firewalld
 

#linux进程管理
ps 命令
ps -ef  #显示所有进程情况
通过进程id号管理
#杀死进程的命令
kill  进程id
kill还有一个参数 -9 参数
 
 kill -9  用于杀死不重要的僵尸进程 ,强制杀死进程
 
#批量杀死进程的命令
pkill 进程的名字
 
 
#tree工具,以树状图显示目录结构
#dns域名解析系统
作用:把域名解析为ip地址,网络中的一个超大电话簿
公网中,存在dns服务器,进行解析
在linux中的dns服务器配置文件是
/etc/resolv.conf 里面定义了网络中的dns
dns  :
阿里巴巴: 223.5.5.5   223.6.6.6
腾讯的dns:119.29.29.29
谷歌的dns:8.8.8.8
114的dns:114.114.114.114

#hosts文件,强制解析了,也可能更换了你的dns记录,用于测试本地的假域名

#dns解析流程
1.浏览器输入域名的时候,浏览器优先去hosts文件中寻找是否有对应记录
2.没有记录就去dns本地缓存中寻找,是否有记录
3.寻找是否配置了dns服务器,然后去公网中寻找记录
4.找到了就缓存到本地dns记录中,
5.解析结束

#linux的定时任务
crontab  -e  #编辑定时任务的文件
crontab -l  #列出定时任务的规则

分  时   日  月  周   你要执行的命令的绝对路径
*   *    *   *   *   
 
#每分钟执行一次命令
*  *  *  *  *   命令绝对路径

#每小时的3,15分组执行命令
分   时   日  月  周   你要执行的命令的绝对路径
*      *    *   *   * 
 
 
#每小时的整点执行命令
0   *    *   *   *
 

#在上午8-11点的第3和第15分钟执行
分   时   日  月  周   你要执行的命令的绝对路径
*      *    *   *   *
3,15  8-11  *  *  *  
 
 
 

#每晚21:30执行命令
分   时   日  月  周   你要执行的命令的绝对路径
*      *    *   *   *
30   21   *  *  * 
 
 
 

#每周六、日的下午1:30执行命令
分   时     日  月  周   你要执行的命令的绝对路径
*      *    *   *   *
30   13   *   *  6,0  
 
 
 
#每周一到周五的凌晨1点,清空/tmp目录的所有文件
分   时     日  月  周   你要执行的命令的绝对路径
*      *    *   *   *

0   1   *  *  1-5   /usr/bin/rm -rf /tmp/*
 
 
 
 
#每晚的21:30重启nginx
30 21 *  *  *  /usr/bin/systemctl restart nginx
 
#每月的1,10,22日的4:45重启nginx
分   时     日  月  周   你要执行的命令的绝对路径
*      *    *   *   *
45   4    1,10,22  *  *  /usr/bin/systemctl restart nginx
 
#每个星期一的上午8点到11点的第3和15分钟执行命令
3,15  8-11  *  *  1 

linux的软件包格式就是
mysql-5.5.rpm

以及rpm也是一个软件包管理命令

rpm -ivh mysql-5.5.rpm
软件包管理器,yum工具,自动解决依赖关系,自动下载软件包

rpm管理软件,得手动处理依赖关系,不使用!!!
yum install  #推荐使用!!!<自动处理依赖关系
源代码编译安装,获取软件源代码,手动编译安装(可以只有扩展软件功能,选择最新的软件)
 

yum工具是红帽子才有的软件管理工具,例如suse乌班图等系统,没有yum,apt-get apt-install
 
#linux的yum仓库目录是:
cd /etc/yum.repos.d/   这个目录下,第一层中,所有以.repo结尾的文件,都会识别为一个yum仓库
(这个仓库就是一个url),url中提供了各种rpm包的下载,yum工具回去查找

配置阿里云的yum源的步骤
1.地址如下:https://opsx.alibaba.com/mirror
2.备份原本的yum仓库文件
cd /etc/yum.repos.d 
#新建文件夹
mkdir  allrepo
#移动所有的repo文件到这个目录下,咱不用它了
mv *  ./allrepo
3.下载新的阿里云的yum仓库文件
wget -O /etc/yum.repos.d/CentOS-Base.repo   http://mirrors.aliyun.com/repo/Centos-7.repo
#-O  代表把Centos-7.repo  下载到指定目录,且改名
 
4.配置额外的第三方仓库
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
 
5.可以测试yum工具安装一个nginx
yum install nginx  -y 
6.启动nginx测试访问
systemctl start nginx
 
yum还提供了哪些用法
1.
yum repolist all        列出所有仓库
yum list all            列出仓库所有软件包
yum info 软件包名            查看软件包信息
yum install 软件包名        安装软件包
yum reinstall 软件包名    重新安装软件包
yum update    软件包名        升级软件包
yum remove    软件包名        移除软件包
yum clean all            清楚所有仓库缓存
yum check-update        检查可以更新的软件包
yum grouplist            查看系统中已安装的软件包
yum groupinstall 软件包组    安装软件包组

centos7用systemctl 管理服务
例如:
systemctl start/stop/reload/restart/  nginx
systemctl enable  nginx #设置nginx开机自启
systemctl disable nginx  #禁止nginx开机自启
systemctl stop firewalld  #临时关闭防火墙服务
systemctl disable firewalld #永久关闭开机自启
 
centos6/5/4
service  nginx start/stop/restart
 

#python的虚拟环境工具安装
(注意,你的PATH变量,编译安装的python3一定要放在最前面)
1.下载虚拟环境工具(这里是在物理环境下安装的)
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple virtualenv
2.使用命令,创建虚拟环境,分别运行一个django1和django2
#进入一个统一管理的目录,管理虚拟环境例如/opt/allenv
mkdir  /opt/allenv
cd /opt/allenv

virtualenv --no-site-packages --python=python3   venv1
 
 

#参数解释  --no-site-packages  不要任何的第三方包
--python 是指定一个解释器 我们选的是python3
venv1是虚拟环境文件夹的名字,自定义
3.进入虚拟环境目录,激活虚拟环境
source是linux的读取命令,读取一个脚本文件,激活虚拟环境
source /opt/allenv/venv1/bin/activate
4.虚拟环境使用原理是,修改了PATH变量,根据pATH的优先级,使用解释器
5.激活虚拟环境,在venv1下创建django1.11.9项目
6.再开一个窗口,创建venv2,用于创建django2的项目
7.退出虚拟环境的命令 deactivate
 
#解决python的环境一致性问题,(将windows中解释器的模块,导出到一个文件,然后发送给linux一个新的虚拟环境安装即可)
1.在windows中导出所有的模块信息
pip3 freeze >  requirements.txt
2.将次文件,发送给linux服务器,可选lrzsz 或scp
3.在linux中安装即可
pip3 install -i https://pypi.douban.com/simple -r requirements.txt
#window中也创建了虚拟环境,并且模块都在虚拟环境下
想要导出这个虚拟环境中的模块,给linxu
步骤:
1.第一步,在windows中激活虚拟环境,在虚拟环境下
pip3 freeze >  requirements.txt
2.将次文件,发送给linux服务器,可选lrzsz 或scp
3.在linux中安装即可
pip3 install -i https://pypi.douban.com/simple -r requirements.txt
 
 
virtualenvwrapper工具
1.安装工具
(注意要退出虚拟环境)
pip3 install -i https://pypi.douban.com/simple  virtualenvwrapper
2.配置用户个人变量配置文件,每次开机都加载这个virtualevnwrapper工具
#系统变量配置文件
/etc/profile 
#个人用户变量配置文件,在用户家目录下找到这个~/.bash_profile文件,写入如下配置
vim  ~/.bash_profile #打开文件,写入如下变量
export WORKON_HOME=~/Envs   #设置virtualenv的统一管理目录
export VIRTUALENVWRAPPER_VIRTUALENV_ARGS='--no-site-packages'   #添加virtualenvwrapper的参数,生成干净隔绝的环境
export VIRTUALENVWRAPPER_PYTHON=/opt/python36/bin/python     #指定python解释器
source /opt/python36/bin/virtualenvwrapper.sh #只有这一步,才是让这个工具生效的!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
3.退出会话,重新登录,查看是否加载了virtualenvwrapper工具

4.工具创建后,使用命令管理
创建虚拟环境
mkvirtualenv  django1
mkvirtualenv  django2
workon  虚拟环境的名字(支持tab补全)   #激活虚拟环境
lsvirtualenv   #列出所有虚拟环境的目录
cdvirtualenv   #进入已激活的虚拟环境的目录
cdsitepackages  #进入虚拟环境下的第三方模块目录
 
 

安装能使验证码显示的模块
 pip3 install -i https://pypi.douban.com/simple django-multiselectfield
 
 
 
 
 
 

第四天

nginx web服务器学习  web server
web应用是指 flask  django  tornado这些python模块
#可能遇见的一个坑是
no application found  这个报错
解决方法就是
uwsgi没找到 django项目第二层的wsgi.py文件中application这个变量
#nginx的安装使用
rpm安装,手动解决依赖,不使用
yum install nginx  配置阿里云yum源,版本可能很低
源码编译安装,功能扩展,开启https功能,指定安装路径等等
 
# 注意一下,机器是否同时存在了yum安装和编译安装
# 注意一下,机器是否同时存在了yum安装和编译安装
# 注意一下,机器是否同时存在了yum安装和编译安装
# 注意一下,机器是否同时存在了yum安装和编译安装
# 注意一下,机器是否同时存在了yum安装和编译安装
#卸载yum安装的软件
#卸载yum安装的软件
#卸载yum安装的软件
yum remove nginx -y
yum remove nginx -y
yum remove nginx -y

编译安装nginx的步骤
1.解决软件依赖
yum install gcc patch libffi-devel python-devel  zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel openssl openssl-devel -y
 
2.下载nginx的源代码包
wget http://tengine.taobao.org/download/tengine-2.3.1.tar.gz

3.解压缩tnginx包
tar -zxvf tengine-2.3.1.tar.gz
4.进入源码目录,开始编译三部曲
进入tengine-2.3.1 目录里面
执行   ./configure --prefix=/opt/tngx231/ 命令
最后执行   make && make install
5.可以使用了
发现缺少sqllite这个一个软件依赖包,就得直接删除编译好的软件,重新编译即可
6.进入安装好的tngx321目录,查看有哪些东西
conf  存放nginx的配置文件
html  存放前端文件的
logs   存放nginx的日志文件
sbin  存放了nginx的可执行命令
7.配置path变量,可以快捷使用nginx命令
8.查看nginx的首页文件 index.html
 软链接  ln -s 被指向路径   指向路径(指向被指向路径的路径)
#nginx的功能性学习,所有的功能都是通过nginx.conf配置文件定义的
修改配置参数,就实现了不同的功能
1.使用nginx配置一个站点,进行访问,例如index.html
2.学习nginx.conf中的配置
 -nginx的配置参数讲解,虚拟主机站点功能如下
  server {
    listen       85;
    server_name  localhost;
    #charset koi8-r;
    #access_log  logs/host.access.log  main;
    #access_log  "pipe:rollback logs/host.access_log interval=1d baknum=7 maxsize=2G"  main;
    #网站的路径匹配,如同django的urls匹配,对用户的访问url进行路径分配
    #当请求url长这样时:
    # 192.168.16.142:85/  就走如下location配置       
    location / {
     #deny  192.168.16.0/24;
     #root参数是定义网页根目录的,可以修改
     root   /opt/html;
     #index 定义网页首页名字的
     index  index.html index.htm;
    }
    #当用户请求url是 192.168.16.142:85/pic/monkeyKing.jpg
    location /pic  {
     #通过alias别名参数,去这个路径下找
     alias   /opt/pic/;
    }
    error_page  404              /404.html;
    # redirect server error pages to the static page /50x.html
   }
  
 
 
 
 -nginx的访问日志功能,参数如下
  找到nginx.conf中的http{}代码块,然后,找到里面的如下配置
  log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
  access_log  logs/access.log  main;
 -nginx的禁止访问功能
  在nginx.conf中,找到如下参数,修改
   location / {
       #决绝访问,192.168.16.0网段的同学都无法访问  /24是子网掩码的意思
            deny  192.168.16.0/24;
            root   html;
            index  index.html index.htm;
        }
 -nginx的指定网页根目录的功能,修改虚拟主机的家目录
 虚拟主机就是nginx.conf中 server{}标签定义的代码
 #网站的路径匹配,如同django的urls匹配,对用户的访问url进行路径分配
  #当请求url长这样时:
  # 192.168.16.142:85/  就走如下location配置       
  location / {
     #deny  192.168.16.0/24;
     #root参数是定义网页根目录的,可以修改
     root   /opt/html;
     #index 定义网页首页名字的
     index  index.html index.htm;
    }
  #当用户请求url是 192.168.16.142:85/pic/monkeyKing.jpg
  location /pic  {
    #通过alias别名参数,去这个路径下找
    alias   /opt/pic/;
  }
 
  location /media {
    alias  /opt/media;
  }
 
 
  
 -nginx的错误日志功能
  error_log  logs/error.log
 
 -nginx的404页面,在nginx.conf中,找到一个error_page 参数
  #当请求错误码是404 时,就返回一个404.html给用户查看,并且这个文件在网页根目录下
  error_page  404              /404.html;
 
 -nginx的虚拟主机功能,一个nginx下运行多个网址
  找到nginx安装目录下的conf文件夹,找到nginx.conf
  通过编写多个server标签实现多虚拟主机
  nginx.conf配置如下:
   虚拟主机1:
   server {
    # 监听的端口
    listen       80;
    #这里进行域名匹配
    server_name  www.s20hanju.tv;
    #这里进行路径匹配
    location / {
     #root定义网页根目录
     root   /opt/s20/hanju;
     #index 定义网站首页文件名
     index  index.html;
    }
   }
   server {
    listen  81;
    server_name www.s20lol.tv;
    location / {
      root /opt/s20/lol;
      index index.html;
    }
   }
  改完nginx.conf的配置,需要重启nginx -s reload
  分别准备hanju和lol的数据文件夹
  
  然后再去windows中准备hosts文件,进行域名解析
  #文件绝对路径
  C:WindowsSystem32driversetchosts
  内容如下:
   192.168.16.142  www.s20hanju.tv
   192.168.16.142  www.s20lol.tv
  最后在windows中进行访问,分别访问lol和hanju的网址内容
 
 
 
3.nginx的启停命令
直接输入 nginx  是启动
nginx -s stop  停止
nginx -s reload  平滑加载,不重启nginx,重新读取配置文件,生效 

4.linux的压测命令
 1.安装ab命令
 yum -y install httpd-tools
 2.使用ab压测命令
  -n requests #执行的请求数,即一共发起多少请求。
  -c concurrency #请求并发数。
  -k #启用HTTP KeepAlive功能,即在一个HTTP会话中执行多个请求。
  ab -kc 1000 -n 100000 http://192.168.16.142/
 
 
 
5.nginx的状态模块功能,检查请求连接数
找到nginx.conf然后再找到一个虚拟主机server标签,添加如下配置即可
location /status {
        #开启nginx状态功能
             stub_status on;

进行压测命令,统计网站请求数
ab -kc 1000 -n 1000000 http://192.168.16.142/

查看防火墙状态
systemctl status firewalld
关闭防火墙
systemctl stop firewalld
清空防火墙规则
iptables -F

第一步:打开ens33网卡的配置: vi /etc/sysconfig/network-scripts/ifcfg-ens33
 
第二步:把ONBOOT=no改成ONBOOT=yes,如下:
第三部:然后重启网络服务: sudo service network restart
禁止firewall开机启动
systemctl disable firewalld.service
停止网络管理服务:systemctl stop NetworkManager.service
CentOS 7
linux修改自己的密码:passwd
root用户修改普通用户的密码:passwd   用户名
 
 

 

第   五   天

 
 
linux学习笔记第五天,nginx代理,项目部署
后端开发,业务线  
crm系统,客户管理系统
电商平台,卖产品,提供给人类去使用
 
 
运维开发(面对机器的业务)
堡垒机开发 
跳板机 (检测登录服务器人员信息的,保证生产服务器安全)
监控平台开发
运维资产管理平台(cmdb)
代码发布平台
 
外企,
闭源的技术栈
java + orlace + red hat  + mencached + apache + jquery  + svn  + tom cat
开源的技术栈
python + php + mysql + centos + ubuntu + redis + nginx + vue + git
 
#nginx代理学习
生活中见过什么代理?
美国代购包包
车票的黄牛
微商

租房的中介代理
nginx 可以起到web服务器的功能,也能实现代理的功能,通过不同的参数定义
nginx的反向代理(请求转发,请求来了之后,直接转发给后端的机器)
实验环境准备:
中介(nginx 1 起到 反向代理的作用 )  192.168.16.49
房东(nginx 2 提供web服务器资源返回 ) 192.168.16.142
1.分别在两台机器安装nginx(安装方式自由选择)
 (讲师机环境):
 nginx1是通过yum安装的,配置文件在/etc/nginx/nginx.conf 
  修改配置如下
 
 nginx2的机器,提供页面展示,有韩剧页面的数据
 
 
 
 
nginx负载均衡池

实验环境准备
三台机器,一个是负载均衡器,其他两个是资源服务器
机器1 ,负载均衡器 192.168.16.49 (安装的是nginx,提供负载均衡转发功能)
nginx.conf配置如下

 upstream  s20crm {
 server   192.168.16.142;
 server  192.168.16.47;
 }
  server {
   listen       80;
   server_name  localhost;
   #当请求是 192.168.16.49:80/
   location / {
   proxy_pass http://s20crm;
   }
  }
 }
 
nginx  -t 进行nginx语法检测

nginx -s reload 
机器2  资源服务器,我们为了方便,直接使用nginx提供页面   192.168.16.142 
 

机器3   资源服务器,我们为了方便,直接使用nginx提供页面 192.168.16.47
 
nginx的负载均衡算法有如下
调度算法      概述
轮询        按时间顺序逐一分配到不同的后端服务器(默认)
 upstream  s20crm {
 server   192.168.16.142;
 server  192.168.16.47;
 }
weight       加权轮询,weight值越大,分配到的访问几率越高
  upstream  s20crm {
 server   192.168.16.142 weight=4;
 server  192.168.16.47   weight=1;
 }
 
ip_hash     每个请求按访问IP的hash结果分配,这样来自同一IP的固定访问一个后端服务器
url_hash      按照访问URL的hash结果来分配请求,是每个URL定向到同一个后端服务器
least_conn    最少链接数,那个机器链接数少就分发

django如果通过python3 manage.py runserver形式运行,内部调用的是wsgiref模块,运行的socket服务端
性能低下,单进程,单线程
使用nginx+ uwsgi进行项目部署

1.准备django项目 NB_crm 

2.安装虚拟环境,在虚拟环境下,安装uwsgi,进行部署
workon nbcrm
pip3 install -i https://pypi.douban.com/simple uwsgi
3.利用uwsgi运行一个python web脚本文件
 新建一个py脚本文件,写入如下内容
 def application(env, start_response):
  start_response('200 OK', [('Content-Type','text/html')])
  return [b"Hello World"] # python3
 启动命令如下
 uwsgi --http :8000 --wsgi-file test.py
  --http参数意思是,基于http协议运行 在 8000端口
  --socket 
  --wsgi-file  找到wsgi.py文件
  
4.利用uwsgi运行django项目
(以参数形式运行项目),(还有以配置文件形式运行,把运行的参数写入到一个文件里面,基于这个文件运行)
(以参数形式运行项目)
(以参数形式运行项目)
命令如下
uwsgi --http :8088 --module mysite.wsgi
 --module  找到django项目的第二层里面的wsgi.py文件
 
uwsgi默认不支持静态文件解析,使用nginx去解析静态文件
 
5.热加载django项目,uwsig自动重启django
uwsgi --http :9000 --module NBcrm.wsgi   --py-autoreload=1
6.基于配置文件的形式,运行nbcrm
 # uwsgi的配置文件
 
[uwsgi]
# Django-related settings
# the base directory (full path)
#项目的绝对路径,定位到nbcrm的第一层
chdir           = /opt/NBcrm
# Django's wsgi file
# 找到项目第二层的wsgi文件
module          = NBcrm.wsgi
# the virtualenv (full path)
# 找到虚拟环境的绝对路径
home            = /root/Envs/nbcrm
# process-related settings
# master
# 主进程
master          = true
# maximum number of worker processes
# 开启uwsgi的多进程数,根据cpu核数来定义
processes       = 16
# the socket (use the full path to be safe
# 基于socket链接运行crm,只有与nginx结合的时候,才使用socket形式
socket          = 0.0.0.0:8000
# 当你没用nginx,调试项目的时候,使用http形式
#http     =  0.0.0.0:8000
# ... with appropriate permissions - may be needed
# chmod-socket    = 664
# clear environment on exit
vacuum          = true
#指定一个参数,日志放在哪
 
#如果你使用了supervisor,请注释掉这个参数
#守护进程在后台运行,且将日志信息,输出到uwsgi.log日志中
#daemonize = uwsgi.log
 

启动配置文件的命令
/root/Envs/nbcrm/bin/uwsgi   --ini uwsgi.ini  
7.配置nginx,结合uwsgi,以及处理静态文件的配置
nginx.conf请求转发配置如下
    server {
        listen       80;
        server_name  localhost;
   location / {
   include uwsgi_params;
   uwsgi_pass 0.0.0.0:8000;
        }
    }
nginx处理crm的静态文件方式
 1.修改django的settings.py静态文件
 添加如下参数
  # Static files (CSS, JavaScript, Images)
  # https://docs.djangoproject.com/en/1.11/howto/static-files/
  STATIC_ROOT='/opt/s20static'
  STATIC_URL = '/static/'
  STATICFILES_DIRS = [
   os.path.join(BASE_DIR,'statics'),
  ]
  
 2.执行命令,收集crm的静态文件
  python3  /opt/NBcrm/manage.py collectstatic
 
               加一步: 在项目的第一级目录里新建一个  static
  3.配置nginx的location路径匹配,找到crm这些静态文件
  在nginx.conf中找到server{}标签,添加如下参数
  #当我的请求url是 192.168.16.142:80/static/xxxxxxxx
  location /static {
   alias  /opt/s20static/;
  }
 4.启动nginx,访问nginx的80,是否可以转发到crm
 
 

8.使用supervisor进程管理工具,管理你的项目
其实,supervisor就是在帮你执行命令而已
使用supervisor管理进程,这个进程不得在后台运行,
 
退出虚拟环境,在物理环境下安装supervisor
1.安装命令
 pip3 install -i https://pypi.douban.com/simple supervisor
2.创建supervisor的配置文件
 echo_supervisord_conf > /etc/supervisor.conf
3.编辑配置文件,写入管理nbcrm的任务参数
 [program:s20nbcrm]
 command=/root/Envs/nbcrm/bin/uwsgi --ini uwsgi.ini
 stopasgroup=true     ;默认为false,进程被杀死时,是否向这个进程组发送stop信号,包括子进程
 killasgroup=true     ;默认为false,向进程组发送kill信号,包括子进程
4.启动supervisor,去管理uwsgi
supervisord -c /etc/supervisor.conf   #指定配置文件,启动这个服务
5.通过supervisorctl管理命令,管理uwsgi
supervisorctl -c /etc/supervisor.conf
命令如下
status all
start s20nbcrm
stop s20nbcrm
stop all
 
 
 
 

linux出现swp交换文件,是因为vim异常退出,或者有人同时在操作一个文件,linux系统保护机制,会生成swp文件,删除即可

配置文件形式
nginx.conf
my.cnf
my.ini
uwsgi.ini
*.xml
*.json
 
 
 
 

第   六  天

 
linux第六天
部署前后端分离的项目
vue 前端  - >  向后端发起请求   uwsgi + django

服务器的端口规划
80是nginx的入口端口
9000是nginx的反向代理端口
9999是django的 运行端口
准备前端的vue代码,目的就是为了
 
 
得到一个dist静态文件文件夹
网络问题
本地硬件问题

无法 执行 npm install
npm build 
 
出现如上问题,怎么解决?
1.换一台机器
2.在其他人的机器上,修改api.js数据发送地址的文件
3.在其他人机器上 进行
npm install
npm run build
4.最终得到dist,发送给自己 ,通过nginx去访问,就行了 
 
 
 
 
第一步:部署前端代码,就是一些静态文件,丢给nginx去解析
前端node js +  vue的部署 + nginx的部署
部署过程:
1.下载vue的代码
wget https://files.cnblogs.com/files/pyyu/07-luffy_project_01.zip
2.编译vue的代码,生成dist静态文件夹,需要用到node js解释器环境
下载nodejs的源代码包
wget https://nodejs.org/download/release/v8.6.0/node-v8.6.0-linux-x64.tar.gz
3.解压缩node的源码包
tar -zxvf node-v8.6.0-linux-x64.tar.gz
4.进入源码包目录,直接配置环境变量即可,人家已经编译好了
node -v
npm -v
5.修改vue的请求发送路径,vue得像服务器发起请求,修改127.0.0.1为linux的ip地址
sed -i "s/127.0.0.1:8000/192.168.16.142:9000/g"  api.js

6.开始编译vue的代码
由于网速问题,下载包可能超级慢
#修改npm的下载源,如同pip 更改豆瓣源一样
npm config set registry https://registry.npm.taobao.org
npm install  #找到package.json然后安装模块,如同pip install

npm run build   #这一步会生成dist静态文件夹,路飞首页在这index.html

7.配置nginx.conf,内容如下
  #只需要找到第一个虚拟主机,配置dist的静态文件夹即可
  #第一个虚拟主机的配置
         location / {
            root   /opt/s20luffy/07-luffy_project_01/dist;
            index  index.html index.htm;
   #确保刷新不出现404
   try_files $uri $uri/ /index.html;
        }

  #第二个虚拟主机的配置,用作反向代理
  server {
   listen 9000;
   server_name localhost;
   location / {
   include uwsgi_params;
   uwsgi_pass 127.0.0.1:9999;
  }
  }

  
  
后端uwsgi+django的部署
1.激活虚拟环境
mkvirtualenv  s20luffy
workon  s20luffy
2.解决运行路飞所需的依赖环境
方式二选一
 方式1:
 requirements.txt
  certifi==2018.11.29
  chardet==3.0.4
  crypto==1.4.1
  Django==2.1.4
  django-redis==4.10.0
  django-rest-framework==0.1.0
  djangorestframework==3.9.0
  idna==2.8
  Naked==0.1.31
  pycrypto==2.6.1
  pytz==2018.7
  PyYAML==3.13
  redis==3.0.1
  requests==2.21.0
  shellescape==3.4.1
  urllib3==1.24.1
  uWSGI==2.0.17.1
  
 方式2:手动解决依赖关系
 1089  pip3 install -i https://pypi.douban.com/simple django==2.0
 1091  pip3 install -i https://pypi.douban.com/simple django-rest-framework
 1093  pip3 install -i https://pypi.douban.com/simple requests
 1095  pip3 install -i https://pypi.douban.com/simple django-redis
 1097  pip3 install -i https://pypi.douban.com/simple crypto==1.4.1
 1099  pip3 install -i https://pypi.douban.com/simple pycrypto==2.6.1

 3.下载uwsgi,编写uwsgi.ini配置文件,去运行路飞学城后端
  pip3 install -i https://pypi.douban.com/simple  uwsgi
 
 
 uwsgi.ini内容如下
 [uwsgi]
 # Django-related settings
 # the base directory (full path)
 chdir           = /opt/s20luffy/luffy_boy/
 # Django's wsgi file
 module          = luffy_boy.wsgi
 # the virtualenv (full path)
 home            = /root/Envs/s20luffy
 # process-related settings
 # master
 master          = true
 # maximum number of worker processes
 processes       = 4
 # the socket (use the full path to be safe
 socket          = 0.0.0.0:9999
 # clear environment on exit
 vacuum          = true
 
4.启动uwsgi后端
uwsgi --ini uwsgi.ini
5.还得启动redis,才能添加购物车
最省事的安装
yum install redis -y
systemctl start redis
 
6.将商品添加到购物车,查看redis中的数据
登录账户密码
alex
alex3714
7.演示添加商品到购物车,让我看购物车结果即可
 
 
 
tornado  异步非阻塞的模块 性能很强
django
flask
sanic  python最快的框架  路飞的开发

golang的自带框架 net/http是 sanci的16倍
 

centos7上的mysql学习(改名了,叫做mariadb)
1.安装方式
yum安装(配置yum源)
 -centos官方的yum源
 
 
 #不同的yum源,软件包的名字也可能不一样,区分大小写 !!!!
 #不同的yum源,软件包的名字也可能不一样,区分大小写 !!!!
 #不同的yum源,软件包的名字也可能不一样,区分大小写 !!!!
      两种二选一
 第一种:-阿里云的yum源(下载速度快,但是版本较低)
  安装命令如下:
  (由于网速问题,我选择用阿里云的精简版)
  yum install mariadb-server  mariadb
  
 第二种:-mysql官方的yum源 (版本你自由去选择,下载较慢,文件完整性最好)
 配置如下方式
  1.找到yum仓库目录,创建repo文件
   touch /etc/yum.repos.d/mariadb.repo
  2.写入如下内容,指定mysql官方的yum源
   [mariadb]
   name = MariaDB
   baseurl = http://yum.mariadb.org/10.1/centos7-amd64
   gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
   gpgcheck=1
  3.此时yum会自动的加载这个repo文件,读取内容
  4.下载mariadb数据库,服务端和客户端
  yum install MariaDB-server MariaDB-client
  
  
 
 
 yum源就是配置在/etc/yum.repos.d/底下的*.repo文件而已
 
 
2.启动mariadb数据库
systemctl start mariadb

检测数据库是否开启,检查3306端口
netstat -tunlp   |   grep 3306
查看有几个用户:
select User, host from mysql.user;
通过客户端连接数据库
mysql有哪些种类的客户端?
mysql -uroot -p
pymysql
navicat(可视化工具)

3.初始化数据库,清除匿名用户,以及test数据库,保证数据库安全,允许mysql远程登录
输入mysql_secure_installation命令后会出现yes和no的选择,第二个是选择是否关闭远程连接
选择no是允许远程连接
4.修改mariadb数据库的的中文支持
s  查看数据库编码
修改mysql的配置文件,让它支持中文
通过yum安装的配置文件在/etc/my.cnf
配置内容如下:
#服务端的编码添加如下内容
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci

#客户端的编码如下
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
#重启mariadb生效编码
systemctl restart mariadb

5.mysql远程登录的设置
grant all privileges on *.* to root@'%' identified by '111111';

6.mysql的备份与恢复命令如下
备份命令:需要退出数据库再敲下面命令
mysqldump  -uroot -p --all-databases >  /opt/alldb.sql
#恢复数据的命令
方式1:
进入数据库后,用source命令读取sql文件
[mysql] >  source /opt/alldb.sql
方式2:
用登录命令导入数据
mysql -uroot -p < /opt/alldb.sql
方式3:
当数据量特别大的时候,以上方式不推荐,使用第三方工具进行导入
navicat以及其他更强的工具,,未完待续...
 

7.mysql的主从复制技术
环境准备,两台机器分别安装好mariadb数据库
机器1:192.168.16.142 (master机器)
1.修改mysql的配置文件,开启binlog日志功能
vim /etc/my.cnf,写入如下信息
[mysqld]
server-id=1
log-bin=s20mysql-bin
2.重启数据库生效binlog日志文件
3.在主库上,创建一个用户,用于主从复制
create user 'lihua'@'%' identified by 'lihua666';
4.给这个lihua账号,授予slave的身份
grant replication slave on *.* to 'lihua'@'%';
5.进行锁表,防止数据写入
flush table with read lock;
6.导出此时的主库数据,发送给从库,保证起点一致性
mysqldump -uroot -p --all-databases > /tmp/alldb.sql
scp  /tmp/alldb.sql root@192.168.16.49:/tmp/
7.当从库配置好复制之后,回到这里解锁,写入数据,查看从库数据是否写入
 
 
 

机器2:192.168.16.49  (slave主机)
1.修改从库机器的配置文件,开启id,以及只读模式
vim /etc/my.cnf 如下
[mysqld]
server-id=1000
read-only=true

2.重启从库
systemctl restart mariadb

3.一条命令,建立主从之间的复制关系
change master to master_host='192.168.16.142',
master_user='lihua',
master_password='lihua666',
master_log_file='s20mysql-bin.000001',
master_log_pos=652;

4.开启从库的slave功能
start salve;
5.查看从库的状态,检测是否复制成功
show slave statusG
查看如下两个参数是否是yes,主从复制即为正确
   Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
 
 
 

 

第   七   天

 
 
 
 
redis学习

mysql 关系型数据库
非关系型数据库 redis    mongodb
nosql  不仅仅是sql
数据持久化,可以将数据存储到磁盘上,以文件形式存储
redis是内存性的数据库,读写是非常快的
缺点是:断电释放内存数据,redis数据丢失,redis进程挂掉,数据丢失,redis提供了持久化机制
redis的安装方式
1.yum  install  redis -y
rpm
源码编译(在选择编译的时候,注意删掉之前的yum安装的)
1.yum remove redis -y
2.下载redis的源代码包
wget http://download.redis.io/releases/redis-4.0.10.tar.gz
3.解压缩源码包
编译三部曲:
#(此redis压缩包,已经提供好了makefile,只需要执行,编译的第二,第三曲)
2.执行gcc的make指令,执行makefile文件
make
3.开始安装
make install 
4.会安装在当前的源码包中的src目录,且帮你配置好了PATH变量
通过redis-加上tab补全查看所有命令
redis-benchmark  redis-check-rdb  redis-sentinel  
redis-check-aof  redis-cli        redis-server 
5.制定一个安装可靠的redis数据库,如下功能通过配置文件定义
1.更改端口
2.设置密码
3.开启redis的安全启动模式
默认直接输入redis-server可以启动服务端,默认端口6379,且没有密码
redis-cli登录

redis.conf 内容如下,有多少参数,就有多少功能,
bind 192.168.16.142    #绑定redis启动的地址
protected-mode yes  #开启redis的安全模式,必须输入密码才可以远程登录
port 6380    #指定redis的端口 
daemonize no   #让redis以守护进程方式在后台运行,不占用窗口
pidfile /var/run/redis_6379.pid   #记录redis的进程id号的文件
loglevel notice      #日志运行等级 .严重级别,警告级别,debug调试界别.....logging
requirepass haohaio     #设置redis的密码,是 haohaio

指定配置文件的启动方式
redis-server  s20redis.conf 
#此时登录redis必须加上参数了,并且登录了之后,必须输入密码才可以使用
redis-cli -p 6380 -h 192.168.16.142

学习redis的数据类型使用
1.常用redis的公共命令
keys *         查看所有key
type key      查看key类型
expire key seconds    过期时间
ttl key     查看key过期剩余时间        -2表示key已经不存在了
persist     取消key的过期时间   -1表示key存在,没有过期时间
exists key     判断key存在    存在返回1    否则0
del keys     删除key    可以删除多个
dbsize         计算key的数量
 

2.学习string类型的操作
#通过set设置的就是string类型的key -value
set   设置key
get   获取key
append  追加string
mset   设置多个键值对
mget   获取多个键值对
del  删除key
incr  递增+1
decr  递减-1
list类型,双向队列
 
 
dic1={
 'k1':{"k2":"v2"}
}
 
dic1[k1][k2]
#redis的发布订阅
#QQ群 
详细命令看博客

#redis的持久化机制
分为aof和rdb两种,具体看博客
 
#在不重启redis的情况下,切换rdb中的数据,到aof中的操作
环境准备
1.配置一个rdb的redis服务端
 s20rdb.conf内容如下
  daemonize yes
  port 6379
  logfile /data/6379/redis.log
  dir /data/6379
  dbfilename  dbmp.rdb
  bind  127.0.0.1
  save 900 1      
  save 300 10
  save 60  10000
2.基于这个文件启动redis,支持rdb的数据库
redis-server s20rdb.conf
3.登录redis设置key,然后手动触发save,生成rdb数据文件
4.通过登录redis,两条命令,切换为aof持久化方式
127.0.0.1:6379>
127.0.0.1:6379> CONFIG set appendonly yes
OK
127.0.0.1:6379> CONFIG SET save ""
OK
5.第四部的操作,仅仅是临时生效,还得修改配置文件,保证下次重启,也得用aof进行持久化

save 900 1:表示900 秒内如果至少有 1 个 key 的值变化,则保存
save 300 10:表示300 秒内如果至少有 10 个 key 的值变化,则保存
save 60 10000:表示60 秒内如果至少有 10000 个 key 的值变化,则保存
redis是单线程的,由c编写
      
#redis的主从复制
1.redis和mysql都是支持多实例功能,基于配置文件区分,就是一个数据库单独的实例
环境准备,一个6379的redis(master),和一个6380的redis(slave)
分别准备2个配置文件,内容如下
redis-6379.conf
port 6379
daemonize yes
pidfile /data/6379/redis.pid
loglevel notice
logfile "/data/6379/redis.log"
dbfilename dump.rdb
dir /data/6379
protected-mode no

redis-6380.conf (从)
port 6380
daemonize yes
pidfile /data/6380/redis.pid
loglevel notice
logfile "/data/6380/redis.log"
dbfilename dump.rdb
dir /data/6380
protected-mode no
slaveof   127.0.0.1  6379
2.分别启动2个redis实例
 1061  redis-server redis-6379.conf
 1062  redis-server redis-6380.conf
3.登录数据库,查看两人之间的关系
登录6379数据库,输入如下命令
127.0.0.1:6379> info  replication

6380数据库查看如下关系
[root@s20 smredis]# redis-cli -p 6380  info replication
4.数据读写查看
在6379中是可以读写的
redis-cli -p 6379  set name5  haoxiangxiake
 
redis-cli -p 6380 get name5

5.主从复制故障恢复
从库挂了无所谓
主库挂了得立即恢复主库,或者将从库切换为主库,继续工作
 -.实验步骤
 1.分别启动 6379  6380 6381 三个数据库实例,建立好主从关系
 
 2.杀死6379主库,此时6380 6381 群龙无首
 
 3.选择让6381为新的主库,就要去除6381的从的身份
 redis-cli -p 6381 slaveof  no one
 #查看此时6381的身份
 redis-cli -p 6381 info replication
 4.此时将6380的主人改为6381
 redis-cli -p 6380 slaveof 127.0.0.1 6381
 
6.redis的哨兵,自动的主从故障切换
配置步骤
1.环境准备,准备3个redis数据库实例,分别是 6379  6380  6381 
redis-6379.conf
port 6379
daemonize yes
logfile "6379.log"
dbfilename "dump-6379.rdb"
dir "/var/redis/data/6379"
 
 
redis-6380.conf
port 6380
daemonize yes
logfile "6380.log"
dbfilename "dump-6380.rdb"
dir "/var/redis/data/6380"
slaveof 127.0.0.1 6379   
redis-6381.conf
port 6381
daemonize yes
logfile "6380.log"
dbfilename "dump-6380.rdb"
dir "/var/redis/data/6381"
slaveof 127.0.0.1 6379   
 
2.分别启动三个redis数据库实例
 1106  redis-server redis-6379.conf
 1107  redis-server redis-6380.conf
 1108  redis-server redis-6381.conf
3.准备三个redis-sentinel哨兵的配置文件
redis-sentinel-26379.conf
port 26379 
dir /var/redis/data/26379
logfile "26379.log"
// 当前Sentinel节点监控 127.0.0.1:6379 这个主节点
// 2代表判断主节点失败至少需要2个Sentinel节点节点同意
// mymaster是主节点的别名
sentinel monitor s20master 127.0.0.1   6379  2
//每个Sentinel节点都要定期PING命令来判断Redis数据节点和其余Sentinel节点是否可达,如果超过30000毫秒30s且没有回复,则判定不可达
sentinel down-after-milliseconds s20master 30000
//当Sentinel节点集合对主节点故障判定达成一致时,Sentinel领导者节点会做故障转移操作,选出新的主节点,
原来的从节点会向新的主节点发起复制操作,限制每次向新的主节点发起复制操作的从节点个数为1
sentinel parallel-syncs s20master 1
//故障转移超时时间为180000毫秒
sentinel failover-timeout s20master 180000
//让哨兵在后台运行
daemonize yes
 
#如下26380和26381的配置文件,仅仅是端口的不同,可以快速生成 
redis-sentinel-26380.conf
redis-sentinel-26381.conf
#生成命令如下
 1119  sed "s/26379/26380/g"  redis-26379.conf > redis-26380.conf
 1121  sed "s/26379/26381/g"  redis-26379.conf > redis-26381.conf
 
4.分别运行三个哨兵进程
(保证sentinel的配置正确,否则,你在启动报错后,配置文件的内容发发生变化,这是个坑!!!!)
#创建哨兵的数据文件夹
 1126  mkdir -p /var/redis/data/26380
 1127  mkdir -p /var/redis/data/26379
 1128  mkdir -p /var/redis/data/26381
 #分别启动三个哨兵
 
 1134  redis-sentinel redis-26379.conf
 1137  redis-sentinel redis-26380.conf
 1138  redis-sentinel redis-26381.conf

 
 5.检查redis的哨兵状态
redis-cli -p 26379 info sentinel
#查看到如下参数,哨兵就正确了
master0:name=s20master,status=ok,address=127.0.0.1:6379,slaves=2,sentinels=3
 
6.杀死主库,检查主从状态,是否会切换
 
 
 
 
 
 
 
 
 
 
 
 
原文地址:https://www.cnblogs.com/xingkongzhizhu/p/11132746.html