MySQL | MySQL5.7.* 安装

Posted Frost Boy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL | MySQL5.7.* 安装相关的知识,希望对你有一定的参考价值。

清理系统环境

清理系统环境,保证安装时没有打扰。

    # 查看系统是否自带 mariadb-lib
    rpm -qa | grep mariadb
    # 如果有,输出:mariadb-libs-5.5.44-2.el7.centos.x86_64 ,没有,不输出
    # 卸载 mariadb-lib
    rpm -e --nodeps mariadb-libs-5.5.44-2.el7.centos.x86_64

rpm 方式安装

下载安装包

可以去MySQL官网去下载。

下载完成之后,出现这么多文件:

其中就四个有用的:

    mysql-community-client-5.7.25-1.el7.x86_64.rpm 
    mysql-community-libs-5.7.25-1.el7.x86_64.rpm
    mysql-community-common-5.7.25-1.el7.x86_64.rpm
    mysql-community-server-5.7.25-1.el7.x86_64.rpm

并且安装的时候也需要按照这个顺序进行安装。

上传到服务器

把解压出来的四个文件,重新压缩为 zip 格式的压缩文件,并上传到服务器。

使用 unzip 解压这个压缩文件。

使用 rpm 对mysql 进行安装

    # 顺序执行以下命令
    rpm -ivh mysql-community-common-5.7.25-1.el7.x86_64.rpm 
    rpm -ivh mysql-community-libs-5.7.25-1.el7.x86_64.rpm 
    rpm -ivh mysql-community-client-5.7.25-1.el7.x86_64.rpm 
    rpm -ivh mysql-community-server-5.7.25-1.el7.x86_64.rpm 
    # 安装 MySQL
    mysqld --initialize --user=mysql

启动并登录 MySQL

刚刚安装时,因为是安全模式,所以会生成一个随机密码,所以这时必须先要得到那个随机密码:

    # 获取随机密码
    grep \'root@localhost\' /var/log/mysqld.log | awk \'{print $NF}\'

启动 MySQL

    systemctl start mysqld.service

登录 MySQL

    mysql -uroot -p
    # 然后输入刚刚得到的随机密码

修改 root 密码

安装时,生成的root密码只是一个临时密码,所以说进入数据库的第一件事,必须是修改密码,不然无法进行别的操作。

    ALTER USER \'root\'@\'localhost\' IDENTIFIED BY \'root\';
    flush privileges;

修改密码时,可能会报错,那是因为密码设置的太简单了。

报错

如果使用 rpm 包安装的时候,遇到下面这种情况:

    libaio.so.1(LIBAIO_0.4)(64bit) is needed by mysql-community-server-5.7.16-1.el7.x86_64  
    net-tools is needed by mysql-community-server-5.7.16-1.el7.x86_64

表示的意思就是缺少依赖包了。
只需要使用:

    yum -y install libaio
    yum -y install net-tools

Win10 安装MySQL

下载安装包

官网
或者
百度网盘--> software

解压后创建文件夹

在解压后的文件夹中创建 /data & my.ini 两个文件。

初始化 my.ini 文件

    [mysqld]# 设置3306端口
    port=3306# 设置mysql的安装目录
    basedir=D:\\mysql-5.7.27-winx64
    # 设置mysql数据库的数据的存放目录
    datadir=D:\\mysql-5.7.27-winx64\\data
    # 允许最大连接数
    max_connections=200# 允许连接失败的次数。这是为了防止有人从该主机试图攻击数据库系统
    max_connect_errors=10# 服务端使用的字符集默认为UTF8
    character-set-server=utf8
    # 创建新表时将使用的默认存储引擎default-storage-engine=INNODB
    [mysql]# 设置mysql客户端默认字符集default-character-set=utf8
    [client]# 设置mysql客户端连接服务端时默认使用的端口
    port=3306default-character-set=utf8

初始化MySQL

在解压后的文件夹中,进入cmd

mysqld --initialize --user=mysql --console

初始化mysql后,可能出来初始密码。注意保存

添加服务

mysqld -install

启动服务

net start mysql # 启动服务
net stop mysql # 停止服务

进入MySQL修改密码

update mysql.user set authentication_string=password(\'kiwi\') where user=\'root\' and Host = \'localhost\';

flush privileges;

如果mysql 初始化密码登录不进去:

强制修改密码

停止MySQL服务

net stop mysql

使用文件启动 MySQL

mysqld --defaults-file="D:\\Program Files (x86)\\mysql-5.7.29-winx64\\my.ini" --skip-grant-tables

使用另外一个窗口进入命令行,直接进入:

mysql -uroot -p

然后修改密码。

二进制安装

使用脚本进行安装:

    #!/bin/bash
    echo "初始化安装脚本"
    <<COMMENT
      注:
       AUTHOR: Frost boy
       CREATED: 2021.06.1 
       MYSQL版本:5.7.25
       CentOS Linux release 7.* (Core)
       将此脚本和安装包上传到/opt/tmp/,执行脚本即可
    COMMENT
    ######################定义变量######################
    PORT=3306
    # 安装介质目录
    SOFT_DIR=/opt/tmp/
    # mysql 安装地址
    MYSQLDB_HOME=/opt/mysql
    # mysql 数据目录
    MYSQLDB_DATA_HOME=/opt/mysql/data/
    # mysql 临时文件
    TMP_DIR=/opt/mysql/tmp/
    # mysql 运行目录
    RUN_DIR=/opt/mysql/run/
    # mysql 日志
    LOG_DIR=/opt/mysql/log/
    # 运行binlog目录
    BINLOG_DIR=/opt/mysql/log/binlog/
    # mysql InnoDB 日志目录
    INNODB_DIR=/opt/mysql/log/innodblog/
    # mysql relay 日志目录
    RELAY_DIR=/opt/mysql/log/relaylog
    # mysql 错误日志
    ERROR_DIR=/opt/mysql/log/errorlog/
    # 用户组
    GROUP_NAME=mysql
    # 用户
    USER_NAME=mysql
    # mysql 安装包
    MYSQL_VERSION="mysql-5.7.23-linux-glibc2.12-x86_64"
    ###################################################
    #确认是root用户安装
    if [ $(id -u) != "0" ];then
       echo "Error: You must be root to run this script!"
       exit 1
    fi

    echo "========================================================================="
    echo " install MySQL 5.7.25 on Redhat/CentOS Linux "
    echo "========================================================================="

    #添加mysql用户组
    if [ -z $(cat /etc/group|awk -F: \'{print $1}\'| grep -w "$GROUP_NAME") ]
    then
      groupadd  $GROUP_NAME
        if(($? == 0 ))
          then
             echo "group $GROUP_NAME add sucessfully!"
             fi
     else
      echo "$GROUP_NAME is exsits"
    fi

    #添加用户
    if [ -z $(cat /etc/passwd|awk -F: \'{print $1}\'| grep -w "$USE_NAME") ]
    then
      adduser -g $GROUP_NAME $USER_NAME
         if (( $? == 0 ))
           then
           echo "user $USER_NAME add sucessfully!"
         fi
    else
      echo "$USER_NAME is exsits"
    fi
    # 判断mysql目录是否创建
    if [ -d $MYSQLDB_HOME ];then
        echo "$MYSQLDB_HOME目录已创建"
        else
        mkdir -p $MYSQLDB_HOME
    fi
    # 判断日志目录是否创建
    if [ -d $LOG_DIR ];then
        echo "$LOG_DIR目录已创建"
        else
        mkdir -p $LOG_DIR
    fi

    # 判断运行binlog目录是否创建
    if [ -d $BINLOG_DIR ];then
        echo "$BINLOG_DIR目录已创建"
        else
        mkdir -p $BINLOG_DIR
    fi
    # 判断错误日志目录是否创建
    if [ -d $ERROR_DIR ];then
        echo "$ERROR_DIR目录已创建"
        else
        mkdir -p $ERROR_DIR
    fi

    # 判断Innodb 日志目录是否创建
    if [ -d $INNODB_DIR ];then
        echo "$INNODB_DIR目录已创建"
        else
        mkdir -p $INNODB_DIR
    fi
    # 判断relay 日志目录是否创建
    if [ -d $RELAY_DIR ];then
        echo "$RELAY_DIR目录已创建"
        else
        mkdir -p $RELAY_DIR
    fi
    # 判断运行目录是否创建
    if [ -d $RUN_DIR ];then
        echo "$RUN_DIR目录已创建"
        else
        mkdir -p $RUN_DIR
    fi
    #downMySQL
    # 判断安装介质目录是否创建
    if [ -d $SOFT_DIR ];then
        echo "$SOFT_DIR目录已创建"
        else
        mkdir -p $SOFT_DIR
    fi
    #删除centos系统自带的mariadb数据库防止发生冲突
    rpm -qa|grep mariadb
    rpm -e mariadb-libs --nodeps

    # 安装libaio,如果已安装,则注释掉这一步
    #yum -y install libaio
    # 备份系统自带的my.cnf文件
    if [ -s /etc/my.cnf ]; then
            mv /etc/my.cnf /etc/my.cnf.`date +%Y%m%d%H%M%S`.bak
    fi

    echo "====================安装mysql5.7.25=========================="
    # 创建mysql配置文件:
    cat >>/etc/my.cnf<<EOF
    [mysql]
    no-auto-rehash
    prompt = \'\\\\u@\\\\h:\\\\p \\\\R:\\\\m:\\\\s [\\\\d]> \'

    [mysqld]
    # DO NOT MODIFY, Universe will generate this part
    port = 3306
    server_id = 123456
    datadir = /opt/mysql/data
    log_bin = /opt/mysql/log/binlog/mysql-bin
    tmpdir = /opt/mysql/tmp
    relay_log = /opt/mysql/log/relaylog
    innodb_log_group_home_dir = /opt/mysql/log/innodblog
    log_error = /opt/mysql/log/errorlog/mysql-error.log
    report_host = 127.0.0.1
    
    # BINLOG
    binlog_error_action = ABORT_SERVER
    binlog_format = row
    binlog_rows_query_log_events = 1
    log_slave_updates = 1
    master_info_repository = TABLE
    max_binlog_size = 250M
    relay_log_info_repository = TABLE
    relay_log_recovery = 1
    sync_binlog = 1
    
    [mysqld_safe]
    socket                         = /opt/mysql/run/mysqld.sock
    pid-file                       = /opt/mysql/run/mysqld.pid
    nice                           = 0
    
    [mysqldump]
    quick
    quote-names
    max-allowed-packet             = 16M
    socket                         = /opt/mysql/mysqld.sock

    EOF
    # 判断mysql软件包是否存在
    if [ -f /opt/tmp/${MYSQL_VERSION}.tar.gz ]
    then
    cd $SOFT_DIR
    tar -zxvf $SOFT_DIR/$MYSQL_VERSION.tar.gz
    #rm -rf $MYSQLDB_HOME
    mv  $SOFT_DIR/$MYSQL_VERSION/* $MYSQLDB_HOME
    rm -rf $SOFT_DIR/$MYSQL_VERSION
    else
    echo "没有发现mysql安装文件"
    echo "下载mysql安装文件放到和本脚本在同一目录中"
    wget https://downloads.mysql.com/archives/get/p/23/file/${MYSQL_VERSION}.tar.gz -P $SOFT_DIR
        if(( $? == 0 ))
          then
           echo "MySQL DownLoad sucessfully!"
           cd $SOFT_DIR
           tar -zxvf $SOFT_DIR/$MYSQL_VERSION.tar.gz
           rm -rf $MYSQLDB_HOME
           mv -Tf $SOFT_DIR/$MYSQL_VERSION $MYSQLDB_HOME
         else
          echo "MySQL DownLoad failed!"
          exit $ERROR_EXIT
        fi
    fi

    # 设置mysql目录权限
    if [ -d $MYSQLDB_DATA_HOME ];then
        echo "目录已存在"
        else
        mkdir -p $MYSQLDB_DATA_HOME
        chown -R mysql:mysql $MYSQLDB_DATA_HOME
        echo "目录和权限创建成功!"
    fi

    # 设置tmp目录权限
    if [ -d $TMP_DIR ];then
        echo "目录已存在"
        else
        mkdir -p $TMP_DIR
        chown -R mysql:mysql $TMP_DIR
        echo "tmp目录和权限创建成功!"
    fi

    # 目录授权
    chown -R mysql:mysql $MYSQLDB_HOME
    chown -R mysql:mysql $BINLOG_DIR

    # 配置开机启动
    function add_auto_start
    {
       sed -i \'46s#basedir=#basedir=/opt/mysql#\'  $MYSQLDB_HOME/support-files/mysql.server
       sed -i \'47s#datadir=#datadir=/opt/mysql/data#\' $MYSQLDB_HOME/support-files/mysql.server
       sed -i \'s/\\/usr\\/local\\/mysql/\\/opt\\/mysql/g\'  $MYSQLDB_HOME/support-files/mysql.server 
       cp $MYSQLDB_HOME/support-files/mysql.server /etc/rc.d/init.d/mysqld
       cp $MYSQLDB_HOME/support-files/mysql.server /etc/init.d/mysqld
       chmod +x /etc/rc.d/init.d/mysqld
       chkconfig --add mysqld
    }

    # 初始化数据库
    $MYSQLDB_HOME/bin/mysqld --initialize --user=mysql --basedir=$MYSQLDB_HOME/ --datadir=$MYSQLDB_DATA_HOME/ >> $TMP_DIR/mysqlpass.txt
    if [ $? == 0 ];then
        echo "初始化数据库成功"
        else
        exit 1
        echo "初始化数据库失败" 
    fi
    # 设置环境变量
    cat >> /etc/profile <<EOF
    export PATH=\\$PATH:$MYSQLDB_HOME/bin
    EOF

    source /etc/profile

    add_auto_start

    echo "启动MySQL实例..."
    systemctl start mysqld

    sleep 5
    #########################################################################################
    echo "mysql 5.7.25 安装完成,初始密码请查看$ERROR_DIR/mysql-error.log文件"
    INIT_PASSWD=`cat $ERROR_DIR/mysql-error.log  | grep password | awk \'{print $NF}\'`
    echo "root初始密码为$INIT_PASSWD"
    service mysql restart 
    sleep 5
    echo "配置服务器本地免密登录..."
    echo "请输入密码     $INIT_PASSWD     进行下一步"
    mysql_config_editor set -S $RUN_DIR/mysqld.sock -u root -p
    mysql_config_editor print --all
    echo "放开root用户客户端IP限制..."
    mysql  --connect-expired-password <<EOF
    alter user \'root\'@\'localhost\' identified by\'root\';
    use mysql;
    grant all privileges on *.* to \'root\'@\'%\' identified by \'root\' with grant option;
    flush privileges;
    quit
    EOF
    echo "root密码已修改为root"
    echo "安装完成DONE SUCCESSFULLY !"

推荐使用二进制方式进行安装,因为删除的时候,直接删除安装目录就可完成了删除
当安装完成使用 mysql 命令不生效时,执行一下:source /etc/profile



细节决定成败!
个人愚见,如有不对,恳请扶正!

以上是关于MySQL | MySQL5.7.* 安装的主要内容,如果未能解决你的问题,请参考以下文章

win10安装mysql5.7遇到的一个坑:由于找不到MSVCP120.dll,无法继续执行代码。重新安装程序可能会解决此问题

Mysql5.7安装

CentOS7服务器中apachephp7以及mysql5.7的安装配置代码

MySql之centos7.2安装mysql5.7.13

Mysql系列二:Centos7.4安装mysql5.7.28源码

MySql5.7安装及配置