Linux环境下,通过shell脚本实现一键部署MySQL,并支持多种类型

2023-11-05

Linux环境下一键部署MySQL脚本,支持多种类型


前言

  MySQL是目前最流行的关系型数据库管理系统之一,属于 Oracle 旗下产品,由于它是开源软件,因此很多企业在 WEB 应用搭建时,常常选择MySQL做为数据存储的软件。
  做为运维交付人员,在应用的搭建、迁移时往往需要手动安装部署MySQL软件,对于有一定Linux和MySQL基础的人来说,安装部署仅仅需要瞧瞧指令,但也得花费大量的时间,而对于初级运维人员,甚至是新手小白来说,安装部署MySQL可能会走很多弯路,还可能会遇到中途频频报错。
  鉴于此,本人通过编写shell脚本,实现MySQL一键式安装部署,并且支持多版本,多类型,全过程只需3分钟左右,可以帮助运维交付人员实现MySQL的快速部署,提高工作效率。


一、使用前须知

  1. 目前仅支持rhel或者centos7.0以上版本部署,MySQL安装类型可以是rpm包或者tar包编译安装。
  2. 此脚本与MySQL的安装包(名称必须是:rpm-bundle.tar或者.rpm或者*.tar.gz或者*.tar文件)放在同一个目录下,比如/opt目录下。

  Tips:目录下允许存放多种类型的MySQL安装包,但是版本只能有一个。

二、使用方法

  1. 将MySQL安装包和脚本放至同一目录下;
  2. 给脚本赋予可执行权限;
chmod +x mysql_install.sh
  1. 运行脚本,开始部署MySQL;
./mysql_install.sh

三、shell脚本内容

  复制脚本内容,粘贴进mysql_install.sh文件。

#!/bin/bash
# -------------------------------------------------------------------------------
# ScriptName: mysql_install.sh 
# Author: wenhui.Cheng
# Description: 一键部署MySQL
# Version: v1.3
# Date: 2022-07-24
# -------------------------------------------------------------------------------


echo  "
    ┌──────────────────────────────────────────────────────────────────────┐
    │                                                                      │
    │                ∙ Linux环境下一键部署MySQL v1.3 ∙                     │
    │        (One-click Mysql installation based on Linux environment)     │
    │                                                                      │
    │   ∙ Description :  基于Linux环境,实现MySQL一键式部署                │
    │   ∙ Author      :  wenhui.Cheng                                      │
    │   ∙ E-Mail      :  756942988@qq.com                                  │
    │   ∙ Version     :  v1.3                                              │
    │                                                                      │
    └──────────────────────────────────────────────────────────────────────┘
"

echo -e "\033[31m
 注意事项:
 1.目前仅支持rhel或者centos7.0以上版本部署,MySQL安装类型可以是rpm包或者tar包编译安装.
 2.此脚本与MySQL的安装包(名称必须是:*rpm-bundle.tar或者*.rpm或者*.tar.gz或者*.tar文件)放在同一个目录下,比如/opt目录下.
 3.目录下允许存放多种类型的MySQL安装包,版本只能有一个.
 4.赋予脚本可执行权限,运行脚本即可开始部署MySQL.
\033[0m"

curdir=$(cd `dirname $0`; pwd) 

# 是否开始
function isStart(){
    read -p "是否开始一键部署MySQL?(Y/N):" choose_isStart
    if [ "$choose_isStart" == 'Y' ] || [ "$choose_isStart" == 'y' ] ;then
        return 0  # 退出函数
    else
        exit 0  # 退出程序
    fi
}

# 检查用户
function use_check(){
    curuser=$USER
    if [ $curuser != 'root' ];then
        echo "当前用户非root,请切换至root后再操作!" 
        exit 0
    else
        return 0
    fi
}

# ******************************** rpmType ********************************

# 检查mariadb
function mariadb_check(){
    mariadb_rpm_list=`rpm -qa |grep mariadb`
    if [ -n "$mariadb_rpm_list" ];then
        echo "mariadb检查结果:系统已安装mariadb,需先卸载"
        read -p "是否卸载mariadb?(Y/N):" choose_Unmariadb
        if [ "$choose_Unmariadb" == 'Y' ] || [ "$choose_Unmariadb" == 'y' ] ;then
            echo "开始卸载mariadb..."
            rpm -qa |grep mariadb |xargs rpm -e --nodeps
            sleep 2
            echo "mariadb卸载完成!"
        else
            exit 0
        fi
    else
        echo "mariadb检查结果:系统未安装mariadb."
        return 0
    fi
}


# 检查MySQL
function mysql_check(){
    mysql_rpm_list=`rpm -qa |grep mysql`
    if [ -n "$mysql_rpm_list" ]; then
        echo "mysql检查结果:系统已安装mysql,需先卸载,已安装的MySQL如下:"
        rpm -qa | grep mysql | tee
        read -p "是否卸载已安装的MySQL?(Y/N):" choose_UnMySQL
        if [ "$choose_UnMySQL" == 'Y' ] || [ "$choose_UnMySQL" == 'y' ];then
            echo "开始卸载MySQL..."
            rpm -qa |grep mysql | xargs rpm -e --nodeps  > /dev/null 2>&1
            sleep 2
            echo "MySQL卸载完成!"
        else
            exit 0
        fi
    else
        echo "mysql检查结果:系统未安装MySQL."
    fi
}


# 检查可能的MySQL残留文件
function mysqlFile_check(){
    mysqlFile=`find / -name mysql`
    if [ -n "$mysqlFile" ]; then
        echo "检测到服务器可能存在MySQL残留文件,文件列表如下:"
        find / -name mysql |xargs du --max-depth=0 -h   # 打印可能的MySQL残留文件及大小
        read -p "您要对这些文件怎么处理?(0:正常文件,不处理;1:我要手动删除;del:全部删除):" choose_delmysqlFile
        if [ "$choose_delmysqlFile" == 0 ] ;then
            return 0
        elif [ "$choose_delmysqlFile" == 1 ] ;then
            exit 0
        elif [ "$choose_delmysqlFile" == 'del' ] ;then
            echo "开始清理MySQL残留文件..."
            #清理冗余文件
            find / -name mysql |xargs rm -rf
            sleep 3
            rm -f /var/log/mysqld.log
            echo "MySQL残留文件清理成功!"
        else
            echo "输入错误,请选择0、1、del."
            exit 0
        fi
    else
        rm -f /var/log/mysqld.log
        echo "mysql残留文件检查结果:不存在MySQL残留文件"
    fi
}


# 安装MySQL
function mysql_install_rpmType(){
    echo "关闭SELinux..."  
    setenforce 0   > /dev/null 
    echo "关闭防火墙..."
    systemctl stop firewalld.service  
    echo "开始安装MySQL..."
    rpm -ivh mysql-community-*.rpm --nodeps --force
    sleep 5
    echo "MySQL安装成功,开始启动MySQL..."
    systemctl start mysqld.service
    if [ $? -eq 0 ] ;then
        echo "MySQL启动成功!"
    else
        echo "MySQL启动失败,请检查日志/var/log/mysqld.log"
        exit 0
    fi
}


# 修改MySQL密码
function change_passwd_rpmType(){
    initpasswd=`cat /var/log/mysqld.log |grep root@localhost |awk '{print $NF}'`   # 初始密码
    echo "MySQL的初始密码是:$initpasswd"
    read -p "请输入您要设置MySQL的root用户密码:" passwd
    export MYSQL_PWD=$initpasswd  #解决mysql>5.6会提示密码安全问题
    mysqladmin -uroot password $passwd   > /dev/null
    echo $?
    echo "MySQL密码修改成功!"
}


# 修改MySQL权限
function change_access_rpmType(){
    export MYSQL_PWD=$passwd
    mysql -uroot  <<EOF
    use mysql;
    update user set Host="%" where User="root";
    FLUSH PRIVILEGES;
    quit
EOF
    echo "MySQL权限修改成功!"
}
  

# MySQL安装包类型检查(rpm或者rpm-bundle.tar) + 调取mysql_install
function mysql_PackageName_chech_rpmType(){
    PackageName_tar=`ls -l | grep rpm-bundle.tar | awk '{print $9}'`
    PackageName_rpm=`ls -l | grep mysql-community | awk '{print $9}'`
    if [ -n "$PackageName_tar" ];then
        echo "解压安装包$PackageName_tar ..."
        tar xf $PackageName_tar
        echo "解压成功!"
        mysql_install_rpmType
        return 0
    elif [ -n "$PackageName_rpm" ];then
        mysql_install_rpmType
        return 0
    else
        echo -e "\033[31m未找到安装包,请检查${curdir}路径下是否存在*rpm-bundle.tar或者*.rpm文件 \033[0m"
        exit 0
    fi
}


# 迁移目录
function Migration_dir(){
    read -p "是否需要迁移MySQL数据目录?(Y/N):" choose_isMigration
    if [ "$choose_isMigration" == 'Y' ] || [ "$choose_isMigration" == 'y' ] ;then 
        read -p "请输入您要迁移至的路径(如:/opt/data):" newPath
        echo "开始准备迁移目录..."
        systemctl stop mysqld.service
        mkdir -p $newPath   # 新建目录
        cp -r /var/lib/mysql $newPath
        chmod -R 755 $newPath
        chown -R mysql:mysql $newPath
        # 修改my.cnf
        # 将迁移的路径进行转义处理,方便使用sed进行替换修改
        newPathe=`echo $newPath |sed 's#\/#\\\/#g'`
        sed -i "s/\/var\/lib/$newPathe/g" /etc/my.cnf
        # 插入配置
        sed -i "1i\socket=$newPath/mysql/mysql.sock" /etc/my.cnf
        sed -i "1i\[client]" /etc/my.cnf
        systemctl start mysqld.service
        echo "MySQL目录迁移成功!"
    else
        return 0
    fi
}


# 检查安装结果
function mysql_successful_rpmType(){
    netstat -ntl | grep 3306
    if [ $? -eq 0 ] ;then
        echo "MySQL安装成功,现在可以开始正式使用啦!"
    else
        echo "MySQL安装或启动失败,请查看日志:/var/log/mysqld.log"
    fi
}


# ******************************** tarType ********************************

# MySQL端口设置
function mysql_port_check(){
    while true
    do
        read -p "请输入您要设置的MySQL端口(如:3306):" mysql_port
        netstat -ntlp |grep :$mysql_port
        if [ $? -eq 0 ] ; then
            echo "端口${mysql_port}已被占用,请更换端口!"
        else
            return 0
        fi
    done
}

# 检查mysql用户
function mysql_user_check(){
    if [ `grep "mysql" /etc/passwd | wc -l` -eq 0 ] ;then
        echo "创建MySQL用户和组"
        /usr/sbin/groupadd mysql
        /usr/sbin/useradd -g mysql mysql
    else
        echo "MySQL用户已经存在!"
        return 0
    fi
}

# 安装MySQL
function mysql_install_tarType(){
        read -p "您要将MySQL的程序和数据文件存放在哪个路径下?(如:/opt/data):" mysql_path
        mkdir -p $mysql_path
        mv $unzip_dir mysql_tar
        mv mysql_tar $mysql_path
        # 创建目录
        mkdir -p $mysql_path/mysql_tar/data   # 存放数据
        mkdir -p $mysql_path/mysql_tar/logs   # 存放日志

        echo "正在创建my.cnf文件..."
cat > $mysql_path/mysql_tar/my.cnf << EOF
[client]
socket=$mysql_path/mysql_tar/data/mysql.sock
[mysql]
default-character-set=utf8
socket=$mysql_path/mysql_tar/data/mysql.sock

[mysqld]
port=$mysql_port
socket=$mysql_path/mysql_tar/data/mysql.sock

# 多实例需要配置mysqlx
mysqlx_port=3${mysql_port}
mysqlx_socket=$mysql_path/mysql_tar/data/mysqlx.sock
basedir=$mysql_path/mysql_tar
datadir=$mysql_path/mysql_tar/data
max_connections=10000
max_connect_errors=10
character-set-server=UTF8MB4
default-storage-engine=INNODB
lower_case_table_names=1
max_allowed_packet=16M
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
log-error=$mysql_path/mysql_tar/logs/mysqld.log
EOF
        sleep 3
        cat $mysql_path/mysql_tar/my.cnf

        echo "开始初始化MySQL(设置表名不区分大小写)..."
        $mysql_path/mysql_tar/bin/mysqld --defaults-file=$mysql_path/mysql_tar/my.cnf --initialize --basedir=$mysql_path/mysql_tar --datadir=$mysql_path/mysql_tar/data --lower_case_table_names=1
        sleep 5
        cat $mysql_path/mysql_tar/logs/mysqld.log

        # 赋权限
        chown mysql:mysql -R $mysql_path/mysql_tar
        chmod 755 -R $mysql_path/mysql_tar/data
        chmod 644 $mysql_path/mysql_tar/my.cnf

        # 启动MySQL数据库实例
        echo "开始启动MySQL..."
        nohup $mysql_path/mysql_tar/bin/mysqld --defaults-file=$mysql_path/mysql_tar/my.cnf  --user=mysql & > /dev/null 2>&1
        sleep 5
        echo "MySQL启动成功!"
}


# 检查MySQL安装包类型是tar还是tar.gz
function mysql_PackageName_chech_tarType(){
    # 先判断安装包是否为tar.gz
    ls -l mysql-[0-9]*tar.gz > /dev/null 2>&1  # 表示stderr标准错误的输出重定向等同于标准输出1
    if [ $? -eq 0 ] ;then
        mysqlfile_targz=$(ls -l mysql-[0-9]*tar.gz | awk '{print $9}')
        echo "开始解压安装包$mysqlfile_targz ..."
        tar xf $mysqlfile_targz
        # 获取解压后的目录名称
        unzip_dir=`ls -l mysql-[0-9]*tar.gz|awk '{print $9}'|cut -d. -f-3`
        # 安装MySQL
        mysql_install_tarType
    elif [ $? -ne 0 ] ;then
        ls -l mysql-*.tar > /dev/null 2>&1 
        if [ $? -eq 0 ] ;then
            mysqlfile_tar=$(ls -l mysql-*.tar | awk '{print $9}')
            echo "开始解压安装包$mysqlfile_tar ..."
            tar xf $mysqlfile_tar
            # 获取解压后的tar.gz文件名称,使用正则匹配文件名
            mysqlfile_targz=$(ls -l mysql-[0-9]*tar.gz |awk '{print $9}')
            echo "开始解压安装包$mysqlfile_targz ..."
            tar xf $mysqlfile_targz
            # 获取解压后的目录名称
            unzip_dir=$(ls -l mysql-[0-9]*tar.gz |awk '{print $9}'|cut -d. -f-3)
            # 安装MySQL
            mysql_install_tarType
        else
            echo -e "\033[31m未找到安装包,请检查${curdir}路径下是否存在*.tar.gz或者*.tar文件 \033[0m"
            exit 0
        fi
    else 
        exit 0
    fi
}

# 修改MySQL密码
function change_passwd_tarType(){
    initpasswd=`cat $mysql_path/mysql_tar/logs/mysqld.log |grep root@localhost |awk '{print $NF}'`  # 初始密码
    echo "初始密码是:"$initpasswd
    read -p "请输入您要设置MySQL的root用户密码:" passwd
    export MYSQL_PWD=$initpasswd
    # MySQL多实例登录时需要指定sock路径(-S选项)
    $mysql_path/mysql_tar/bin/mysqladmin -uroot -S $mysql_path/mysql_tar/data/mysql.sock password $passwd > /dev/null 2>&1
    echo "MySQL密码修改成功!"
}

# 修改MySQL访问权限
function change_access_tarType(){
    echo "开始修改MySQL访问权限..."
    export MYSQL_PWD=$passwd
    $mysql_path/mysql_tar/bin/mysql -uroot -h127.0.0.1 -P$mysql_port -S $mysql_path/mysql_tar/data/mysql.sock  <<EOF
    use mysql;
    update user set Host="%" where User="root";
    FLUSH PRIVILEGES;
    quit
EOF
    echo "MySQL权限修改成功!"
}


# 检查安装结果
function mysql_successful_tarType(){
    netstat -ntl | grep $mysql_port
    if [ $? -eq 0 ];then
        echo "MySQL安装成功,现在可以开始正式使用啦!"
    else
        echo "MySQL安装或启动失败,请查看日志:$mysql_path/mysql_tar/logs/mysqld.log"
    fi
}


# 停止MySQL
function mysqld_stop(){
    ps -ef | grep $mysql_path/mysql_tar | grep -v grep |awk '{print $2}' |xargs kill -9  > /dev/null 2>&1
    sleep 2
}

# 启动MySQL
function mysqld_start(){
    echo "启动MySQL"
    nohup $mysql_path/mysql_tar/bin/mysqld --defaults-file=$mysql_path/mysql_tar/my.cnf  --user=mysql & > /dev/null 2>&1
    sleep 5
}


# 重启MySQL
function mysqld_restart(){
    mysqld_stop
    mysqld_start
    sleep 5
}

# ******************************** 函数调用 ********************************

# rpm类型安装
function rpmType(){
    isStart  # 是否开始
    use_check  # 检查用户
    mariadb_check  # 检查mariadb  
    mysql_check  # 检查MySQL
    mysqlFile_check  # 检查残留文件
    mysql_PackageName_chech_rpmType  # 检查安装包名称 + 安装MySQL
    change_passwd_rpmType  # 修改密码
    change_access_rpmType  # 修改权限
    Migration_dir  # 迁移目录
    mysql_successful_rpmType  # 安装结果检查
}


# tar类型安装
function tarType(){
    isStart  # 是否开始
    use_check  # 检查用户
    mysql_port_check  # 设置端口
    mysql_user_check  # 检查mysql用户
    mysql_PackageName_chech_tarType  # 检查安装包名称 + 安装MySQL
    change_passwd_tarType  # 修改MySQL密码
    change_access_tarType  # 修改MySQL访问权限
    mysqld_restart  # 重启MySQL
    mysql_successful_tarType  # 成功
}


echo "
MySQL安装类型:
(1)rpm类型:rpm包自动安装
(2)tar类型:tar包编译安装
"
read -p "请选择你要安装MySQL的类型(输入1或者2):" chooseType
if [ "$chooseType" == 1 ] ;then
	rpmType
elif [ "$chooseType" == 2 ] ;then
	tarType
else
	echo "输入编号错误!"
fi


总结

  以上就是通过shell脚本一键部署MySQL的全部内容,欢迎各位读者给予建议,后续本人还会在该版本的基础上进一步优化,增加新的方法,尽可能的覆盖更多的使用场景。

  

如果对你有帮助,还请记得收藏点赞加关注,谢谢!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux环境下,通过shell脚本实现一键部署MySQL,并支持多种类型 的相关文章

  • PHP 和 MySql 检查表是否为空

    我有点菜鸟 而且我很难过 我需要一些代码来搜索数据库表以查找与 id 变量匹配的行 我需要抓取该表 描述 中的一个字段 如果它为空 我需要显示一条消息 如果不是另一条消息 这是我的代码 我知道我需要添加 mysqli 转义字符串 只需从内存
  • 删除 ibdata1 后 MySQL 表消失了

    几天前 经过一番谷歌搜索后 我发现了这篇文章 我无法再让 mysql 运行了 xampp XAMPP MySQL 意外关闭 https stackoverflow com questions 18022809 xampp mysql shu
  • 将我的本地数据库(Mysql)复制到远程数据库(phpmyadmin)

    My MySQL database local server is connected to a weather station The data are updated continuously on my local server My
  • Java 日期和 MySQL 时间戳时区

    我正在编辑一段代码 其基本功能是 timestamp new Date 然后坚持下去timestamp中的变量TIMESTAMPMySQL 表列 然而 通过调试我看到Date显示在正确时区的对象 GMT 1 当持久化在数据库上时 它是GMT
  • tcmalloc/jemalloc 和内存池之间有什么区别(以及选择的理由)?

    tcmalloc jemalloc是改进的内存分配器 还引入了内存池以更好地分配内存 那么它们之间有什么区别以及在我的应用中如何选择它们呢 这取决于您的程序的要求 如果您的程序有更多的动态内存分配 那么您 需要从可用的分配器中选择一个内存分
  • 如何查找列表/集合是否包含在另一个列表中

    我有一个产品 ID 列表 我想找出哪些订单包含所有这些产品 订单表的结构如下 order id product id 1 222 1 555 2 333 显然我可以通过 PHP 中的一些循环来做到这一点 但我想知道是否有一种优雅的方法可以纯
  • mysql 中的 max(长度(字段))

    如果我说 select max length Name from my table 我得到的结果是 18 但我也想要相关数据 所以如果我说 select max length Name Name from my table 这是行不通的 我
  • python 的 fcntl.flock 函数是否提供文件访问的线程级锁定?

    Python 的 fcnt 模块提供了一种名为 flock 1 的方法来证明文件锁定 其描述如下 对文件执行锁定操作op 描述符 fd 文件对象提供 fileno 方法被接受为 出色地 请参阅 Unix 手册集群 2 了解详情 在某些系统上
  • 在 Bash 中使用“$RANDOM”生成随机字符串

    我正在尝试使用 Bash 变量 RANDOM创建一个由包含整数和字母数字的变量中的 8 个字符组成的随机字符串 例如 var abcd1234ABCD 我怎样才能做到这一点 使用参数扩展 chars 是可能的字符数 是模运算符 chars
  • bash 脚本中的变量值不会改变[重复]

    这个问题在这里已经有答案了 运行以下代码 a one echo a a two echo a a three echo a gt a 结果是 one one 以及创建的文件名称为 one 内容为 one 为什么变量没有更改为two在第 2
  • 仅为我自己禁用和重新启用地址空间布局随机化

    我想在我的系统 Ubuntu Gnu Linux 2 6 32 41 server 上禁用地址空间布局随机化 ASLR 但是 如果我使用 sysctl w kernel randomize va space 0 我认为这一更改将影响系统上的
  • /proc/kmsg 和 dmsg 有什么区别?

    我们通常这样做cat proc kmsg or dmesg从用户空间查看内核日志 我明白了dmesg是一个循环缓冲区 它从kmsg 但是kmsg也不是循环缓冲区 它们之间有什么区别和联系呢 宽松地说 dmesg 是一个转储 proc kms
  • 如何编写bash脚本来设置全局环境变量?

    最近写了一个设置环境变量的脚本 看一下 bin bash echo Pass a path read path echo path defaultPath home whoami Desktop if n path then export
  • 超立方体错误。非法的最小或最大规格

    尝试从这里运行示例代码http tess4j sourceforge net codesample html http tess4j sourceforge net codesample html我收到一条错误消息 Error Illega
  • 检查 jar 是否从 shell 运行

    我有一个 java jar 程序 我试图在我的机器启动时运行它 理想情况下 shell 脚本将每 60 秒检查一次以确保 jar 正在运行 我如何检查 jar 是否在 centos 上运行 这似乎不起作用 我当前的 sh 文件 bin ba
  • MySQL 连接最新行

    我有两张桌子agents and calls 座席将始终处于一个活动呼叫中 可能有另一个待处理的呼叫分配给某个座席 而该座席尚未应答 我想编写一个查询来测试最新的调用是否按排序dateCreated与代理表中当前活动的呼叫匹配 以下是当前呼
  • 未找到 DEADLINE 调度策略

    我想在 C 中实现 DEADLINE 调度策略 我知道该功能已实现Linux 3 14 10我正在使用 Ubuntu 14 04Linux 3 17 0 031700 lowlatency 201410060605 SMP PREEMPT这
  • 当我在 PHP 中将 print_r() 应用于数组时,为什么会得到“Resource id #4”? [复制]

    这个问题在这里已经有答案了 可能的重复 我如何从 PHP 中的 MySql 响应中 回显 资源 id 6 https stackoverflow com questions 4290108 how do i echo a resource
  • golang sql 驱动程序的准备语句

    关于golang的sql driver 下面两条语句有什么区别 store DB is sql DB type rows err store DB Query SQL args err nil defer rows Close and st
  • Centos/Linux 将 logrotate 设置为所有日志的最大文件大小

    我们使用 logrotate 并且它每天运行 现在我们遇到了一些情况 日志显着增长 阅读 gigabaytes 并杀死我们的服务器 所以现在我们想为日志设置最大文件大小 我可以将其添加到 logrotate conf 中吗 size 50M

随机推荐

  • 重写介绍。

    1 方法重写的作用和使用 方法重写子类继承了父类的方法后 如果发现在需求下 父类的某些方法不太强大 我们就可以在子类中进行重写 宠物自白 Override 注解不报错 说明你写的就是方法重写 规范 必须要加 public void show
  • 拷贝函数访问本类的私有变量的问题

    chap 5 h ifndef CHAP 5 H define CHAP 5 H include string include iostream using namespace std class B public B int a int
  • 数据库命令行导入方式及部分问题的解决办法

    0 写在前面 以下内容仅为个人的经验谈 没有任何学术性 可能存在一些翻译不准确的情况 仅作为一些问题的解决办法参考 1 基本步骤 用管理员模式打开cmd 登录数据库 mysql u
  • qt的QLabel中的字体越界

    今天使用文泉驿的中文库wqy zenhei ttc 发现QLabel中的汉字上面切顶了 但是如果一个QLabel和一个QLineEdit并排就不会出现这种现象 最后对QLabel使用样式解决了这个问题 MyLabel gt setStyle
  • 增量式PID是什么?不知道你就落伍了

    目录 1 什么是增量式PID 2 举个例子 2 1 位置式PID 2 2 增量式PID 3 伪算法 4 C语言实现 5 总结 在之前一篇博客中 简易PID算法的快速扫盲 简单介绍了PID算法的基本原理和位置式算法的实现过程 由于部分推导过程
  • WinNas之seafile server私人云盘搭建

    目录 部署方法 其他说明 部署方法 避免重复造车轮 直接附别人写的链接 https www kingsonho com install seafile on windows 其他说明 安装后如果需要修改web登录端口号 只在web页面上修改
  • JVM中一次完整的GC流程中是怎样的,对象如何晋升到老年代,说说你知道的几种主要的JVM参数

    对象诞生即新生代 gt eden 在进行minor gc过程中 如果依旧存活 移动到from 变成Survivor 进行标记 当一个对象存活默认超过15次都没有被回收掉 就会进入老年代 主要的JVM参数 http ifeve com use
  • 直流减速电机通过编码器计算车轮转速、车轮速度、路程计算。

    第一步 计算Nms间隔的计数变化量 变化量var 当前读数 前次读数 第二步 计算1s间隔的计数变化量 设N 200 变化量var 5 第三步 计算1min间隔编码器的输出脉冲个数 变化量var 5 4 倍频数 第四步 计算1min间隔编码
  • 基于Unity3D的黄金矿工

    1 游戏背景 黄金矿工小游戏 是一款敏捷 经典小游戏 怀揣梦想的黄金矿工为了寻找更多金子开始了他的挖金之旅 游戏目标 使用钩子放入地下 开拓你的智慧寻找宝物 达到目标金额过关吧 2 开发工具的基本使用 本游戏开发工具选择Unity3D 20
  • Matlab yolov2 深度学习物体检测 超级简单代码

    在深度学习的物体检测方面 相比其他平台 MATLAB打包好了很多模块方法和网络 对于简单的应用 已经足够应付 大家跟着调用 稍微修改一下适应的参数就可以啦 下面我手把手教学 1 需要读取提前制作的csv文件 里面有training data
  • [A3C]:算法原理详解

    强化学习 A3C算法原理 深度强化学习框架使用异步梯度下降来优化深度神经网络控制器 提出了四种标准强化学习算法的异步变体 并证明并行actor learners在训练中具有稳定作用 使得四种方法都能成功地训练神经网络控制器 首先明确什么是A
  • 笔试,橘子称重题

    题目 甲有m个橘子分别为n克 每次找到平均数 要么丢弃比它大的 要么丢弃比它小的 将剩下的和记为s 不断循环 要求输入一些数字 其与s比较 有则输出YES 无则输出NO 第一行输入橘子个数与要比较的数字的个数 第二行输入橘子重量 第三行到结
  • 小儿机器人编程基础课

    小儿机器人编程基础课 小孩子的学习从古至今都是家长们十分关心和重视的一件事情 很多的家长在培养孩子的学习方面也可以说是相当的耐心的 就拿现在很多的家长想要孩子去学习机器人编程的课程来说 有的家长对于小儿机器人编程基础课并不是很清楚 今天我们
  • 【测验1 编程题】: Python基本语法元素 (第1周)

    第一题 Hello World的条件输出 描述 获得用户输入的一个整数 参考该整数值 打印输出 Hello World 要求 如果输入值是0 直接输出 Hello World 如果输入值大于0 以两个字符一行方式输出 Hello World
  • sql server中bit类型在数据库和C#中的表示

    select count 1 from select ROW NUMBER over order by MinuteID as RowId from OA Minutes WHERE 1 1 and DelFlag false as tem
  • BLE 和 Zigbee 肉眼读数(更新ing)

    BLE1M 画相位图 可以读出preamble 01010101 同步码 01101011 通过向下向上的轨迹来肉眼读 原理是需要看如何进行调制的 toolbox中是GMSK调制 所以反着推回去 就知道画相位图能直接肉眼读数了 同理Zigb
  • JTest

    jtest解释 第一章 简介 jtest是parasoft公司推出的一款针对java语言的自动化白盒测试工具 它通过自动实现java的单元测试和代码标准校验 来提高代码的可靠性 Jtest先分析每个java类 然后自动生成junit测试用例
  • 论文精读:FairMOT: On the Fairness of Detection and Re-Identification in MultipleObject Tracking

    1 提出背景 以往的工作通常将re ID视为次要任务 其准确性受到主要检测任务的严重影响 因此 网络偏向于主检测任务 这对re ID任务不公平 2 核心思想 将MOT表示为单个网络中目标检测和reid的多任务学习 因为它允许两个任务的联合优
  • Ubuntu18.04 搭建Hadoop完全分布式环境--踩坑局

    安装Ubuntu18 04 暂时无坑 跟着CSDN教程 坑一 su root 无法切换root用户 提示 Authentication failure 填坑 sudo psswrd 然后当前用户密码 然后输入 root密码 确认 root
  • Linux环境下,通过shell脚本实现一键部署MySQL,并支持多种类型

    Linux环境下一键部署MySQL脚本 支持多种类型 前言 一 使用前须知 二 使用方法 三 shell脚本内容 总结 前言 MySQL是目前最流行的关系型数据库管理系统之一 属于 Oracle 旗下产品 由于它是开源软件 因此很多企业在