叶测试 发布的文章

线上服务器硬盘安装LVM

LVM安装及使用:https://www.r1989.com/linux-1222.html

线上服务器硬盘由标准分区转为LVM

  1. 使用宝塔备份数据库
  2. 停止nginx mysql php
  3. mkdir /{web_bak,mysql_bak,backup_bak}
  4. 转移/web目录文件到/web_bak;转移/mysql目录到/mysql_bak;转移/backup目录到/backup_bak
  5. 执行转移命令:

    rsync -avzh /mysql/* /mysql_bak/
    rsync -avzh /backup/* /backup_bak/

    rsync -avzh /web/shell /web_bak/
    rsync -avzh /web/source /web_bak/
    rsync -avzh /web/upgrade /web_bak/
    rsync -avzh /web/www /web_bak/

    建议同时进行4个拷贝:
    rsync -avzh /web/oa/t0* /web_bak/oa/
    ......

LVM安装流程:

  1. 安装lvm并将vdc转为逻辑分区

    yum install lvm2
    lsblk
    vim /etc/fstab 注释vdc硬盘挂载

  2. 检查三个分区数据是否均已转换完成
  3. 卸载

    umount /backup
    umount /mysql
    umount /web

  4. 转lvm

    fdisk /dev/vdc
    [n -> p -> ...] t -> {1,2,3} -> 8e ->w
    fdisk -lu

    pvcreate /dev/vdc{1,2,3}

    vgcreate lv /dev/vdc1 默认PE为4M( -s 32M lvm1默认lv最多只能包含65536个PE,最大支持256G;lvm2不再限制PE数量)
    vgextend lv /dev/vdc2
    vgextend lv /dev/vdc3

    lvcreate -L 80G -n mysql lv
    lvcreate -L 20G -n backup lv
    vgdisplay
    lvcreate -l 100%FREE -n web lv

    mkfs -t ext4 /dev/lv/backup
    mkfs -t ext4 /dev/lv/mysql
    mkfs -t ext4 /dev/lv/web

    ;resize2fs /dev/lv/backup
    ;resize2fs /dev/lv/mysql
    ;resize2fs /dev/lv/web

    ;mount /dev/lv/backup /backup
    ;mount /dev/lv/mysql /mysql
    ;mount /dev/lv/web /web

    vim /etc/fstab
    /dev/lv/mysql /mysql ext4 defaults 0 0
    /dev/lv/backup /backup ext4 defaults 0 0
    /dev/lv/web /web ext4 defaults 0 0

    mount -a

  5. 数据还原

    rsync -avzh /backup_bak/* /backup/
    rsync -avzh /mysql_bak/* /mysql/

    rsync -avzh /web_bak/shell /web/
    rsync -avzh /web_bak/source /web/
    rsync -avzh /web_bak/upgrade /web/
    rsync -avzh /web_bak/www /web/

    具体依据实际情况转移:
    rsync -avzh /web_bak/oa/t0* /web/oa/
    ......


转移100个系统用时:约40分钟

测试backup分区
`lvreduce -L -4G -r /dev/lv/backup`
`lvextend -L +4G -r /dev/lv/backup`

  1. 检查数据是否完整转移
  2. reboot
  3. 启动各服务

LVM安装及使用

解决服务器数据盘随使用时间容量不足问题,故需搭建服务器时安装lvm以便后期新增硬盘可随时调整网站系统所在分区容量等。

【安装】

  1. yum install lvm2
  2. 格式化硬盘或分区格式为8e
    fdisk /dev/vdb
    n -> p -> 1 -> t -> 8e -> w
  3. 使用pvcreate创建物理卷PV
    pvcreate /dev/vdb{1,2,3,...}

- 阅读剩余部分 -

云锁安装 及 自编译nginx防护模块

【安装云锁】

  1. cd /usr/local/src
  2. 下载安装包:wget http://download.yunsuo.qianxin.com/v3/yunsuo_agent_64bit.tar.gz
  3. 解压:tar zxvf yunsuo_agent_64bit.tar.gz
  4. 添加可执行权限:chmod +x yunsuo_install/install
  5. 安装:yunsuo_install/install
  6. 添加到云中心:/usr/local/yunsuo_agent/agent_smart_tool.sh -u cloud_user -p cloud_passwd
  7. 查看是否运行:ps -ef | grep yunsuo_agent
  8. 操作指令:service yunsuo start/stop/restart/status
  9. 卸载:/usr/local/yunsuo_agent/uninstall

- 阅读剩余部分 -

批量获取或更新数据库中的业务数据脚本

mysql_bat.php 用于获取线上数据库中的数据或批量更新数据库中的数据。

    <?php
    
    //演示脚本 用于查询线上系统数据库问题
    $dbs = ['x001', 'x002', 'x003'];
    
    file_put_contents('mysql_bat.txt', '');
    
    foreach ($dbs as $v) {
        $mysql_conf = array('host' => 'localhost', 'db' => $v, 'db_user' => 'xxx', 'db_pwd'  => 'xxx');
        
        $mysqli = new mysqli($mysql_conf['host'], $mysql_conf['db_user'], $mysql_conf['db_pwd']);
        $mysqli->query("set names 'utf8';");//编码转化
        $select_db = mysqli_select_db($mysqli, $mysql_conf['db']);
        if ($select_db) {
            //查询律所部门名称
            $deptName = $configName = '';
            $sql1 = "select name from {$v}.lawfirm_dept where id=1;";
            $res1 = $mysqli->query($sql1);
        
            while ($row = $res1->fetch_assoc()) {
                $deptName = $row['name'];
            }
        
            file_put_contents('mysql_bat.txt', '[new] '.$deptName.PHP_EOL, FILE_APPEND);
        
            $res1->free();
            $mysqli->close();
        }else{
            file_put_contents('mysql_bat.txt', '[connect error] '.$v.PHP_EOL, FILE_APPEND);
            continue;
        }
        
        // sleep(1);
    }

清空系统日志、文件脚本

clear_log.sh 批量清空系统日志文件

    #!/bin/bash
    
    #---------------------------------------
    # 清空访问日志及错误日志(清理前务必保存6个月以上数据)
    # author: SenSen 1050575278
    # date: 2022/04/14
    # 注意:所有脚本需测试后方可使用!!!
    #---------------------------------------
    
    #所在目录
    cd /www/wwwlogs/
    sysDir=`ls /web/oa`
    
    for f in ${sysDir}
      do
        echo > ${f}".speaklaw.cn.log"
        echo > ${f}".speaklaw.cn.error.log"
        echo "${f} done"
      done


`clear_file.sh` 批量删除系统中的垃圾文件

    #!/bin/bash
    
    #---------------------------------------
    # 清理指定文件
    # author: SenSen 1050575278
    # date: 2021/11/30
    # 注意:所有脚本需测试后方可使用!!!
    #---------------------------------------
    
    read -p "Warning! Enter 'y' to continue : " input
    
    #判断是否存在参数,不存在则取消
    if [ "$input" == 'y' ] || [ "$input" == 'Y' ]; then
      #所在目录
      dir='/web/oa/'
    
      #自动获取系统目录文件 仅可包含oa系统文件
      sysDir=`ls /web/oa`
    
      #排除目录
      excluded=()
    
      for f in ${sysDir}
        do
          #获取当前时间
          curtime=`date +"%Y/%m/%d %H:%M:%S"`
    
          #排除指定目录
          if [[ ${excluded[@]/${f}/} != ${excluded[@]} ]]; then
            echo "jump"
            continue
          fi
    
          #进入目录
         cd ${dir}${f}
         #执行对应操作 务必将要删除的文件路径填写准确
         rm -rf public/tmp/*
         rm -rf runtime/*
    
          echo "${curtime} ${f} done"
        done
    else
      echo "Error: invalid input"
    fi

复制创建一份新系统脚本

create.sh
通过已有的系统文件,排除当前系统的附件等目录,创建为一份新的系统。$1为被复制的老系统,$2为新系统目录名称,create.exclude为排除复制的目录。

#!/bin/bash

#---------------------------------------
# 创建新的OA系统
# author: SenSen 1050575278
# date: 2021/11/29
# 注意:所有脚本需测试后方可使用!!!
#---------------------------------------

if [ "$1" ] && [ "$2" ]; then

  #获取当前时间
  curtime=`date +"%Y/%m/%d %H:%M:%S"`

  #所在目录
  cd /web/oa

  rsync -av --exclude-from="/web/shell/create.exclude" ${1}/ ${2}/

  #拷贝原env配置
  cd ${2}
  cp -r public/install/.env ./.env

  #todo 暂不考虑自动创建网站+配置
else
    echo "Error: param1 is source ('like a001') && param2 is target ('like a999')"
fi

create.exlude

runtime/*
public/install/install.lock
public/phpExcel/*
public/uploads/attach/*
public/uploads/doc/*