• 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.杀死主库,检查主从状态,是否会切换
     
     
     
     
     
     
     
     
     
     
     
     
  • 相关阅读:
    【笔记】【dp模型】
    【刷题】【dp】【背包】金明的预算
    建模结束了——5.3
    HDU
    洛谷 P2734 [USACO3.3]游戏 A Game
    洛谷 P4095 [HEOI2013]Eden 的新背包问题
    洛谷 P1156 垃圾陷阱
    洛谷 P1833 樱花
    洛谷 P3966 [TJOI2013]单词
    洛谷 P5357 【模板】AC自动机(二次加强版)
  • 原文地址:https://www.cnblogs.com/xingkongzhizhu/p/11132746.html
Copyright © 2020-2023  润新知