暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

小白学习MySQL - 数据库软件和初始化安装

1113

作为个人学习环境来说,搭建一套VMWare的环境,算是性价比最高的一种选择,当然你可以购买一些公有云服务器(有些则是免费的,例如Oracle Cloud,可参考《Oracle Cloud云端账号的注册过程》)。

Linux的安装就不在这赘述了,重点说说MySQL数据库的安装。

首先,就是下载介质,MySQL官网就可以下,这两个链接都可以的,

https://www.mysql.com/downloads/

https://dev.mysql.com/downloads/mysql/

区别就是前者是商业版,后者是社区版,从软件自身来说,两者都是相同的,不同的是商业版可以购买享受官方的技术服务,社区版只能从社区获得技术支持。

从下载选项中,我们看到支持很多的操作系统,例如Windows、各种Linux、Solaris、macOS等等,

对企业来说,一般会选择非Windows平台安装MySQL,我们的测试环境选择在Linux下安装MySQL,其中操作系统版本是Red Hat Enterprise Linux Server release 7.5 (Maipo),数据库是MySQL 5.7和MySQL 8.0。

P.S. Windows下的安装可参考《Windows环境安装MySQL ZIP Archive

MySQL其实和Oracle在某些地方很相像,在这我们说的“安装数据库“,算是个广义概念,可以拆成俩步骤,一是安装数据库软件,二是初始化数据库,首先我们说数据库软件的安装。

Linux下的安装可以分成几类,rpm安装、源码安装、二进制安装,

1. rpm安装,可能很简单,直接执行rpm指令,即可完成安装,但是这种安装,不是很灵活,例如不能改动安装路径。

2. 源码安装,顾名思义,下载的是MySQL的源码,通过执行cmake进行编译来安装,用时较长,能根据自己的需要进行自定义配置。

3. 二进制安装,官方提供的二进制安装包,都是针对特定平台专门优化过的,无需考虑过多的环境因素,直接解压即可,还可以根据实际需求做一些个性化的配置。

一、rpm安装

可参考文末链接,通过rpm安装MySQL 5.6,不在此赘述。

二、源码安装

这种安装操作,简单尝试一下,5.7和8.0基本相同,以5.7为例。

介质通常是.tar.gz文件,mysql-VERSION.tar.gz格式压缩包,例如,

mysql-5.7.32.tar.gz

mysql-8.0.23.tar.gz

1. 卸载Linux自带的MariaDB,

    rpm -e mariadb-libs-5.5.56-2.el7.x86_64 --nodeps
    rpm -e mariadb-5.5.56-2.el7.x86_64 --nodeps
    rpm -e mariadb-server-5.5.56-2.el7.x86_64 --nodeps

    2. 创建用户、用户组,(可能已存在,继续使用,或者删除重建)

      groupadd mysql
      useradd -g mysql mysql

      3. 设置操作系统的资源限制,

        vi /etc/security/limits.conf 
        mysql soft nproc 2047
        mysql hard nproc 16347
        mysql soft nofile 1024
        mysql hard nofile 65536

        4. 安装依赖包,(可能有些包已经存在)

          yum install bison libaio-devel* perl gcc gcc-c++ ncurses ncurses-devel openssl openssl-devel

          5. 源码安装需要cmake,一种方式是通过yum安装,但是这种操作,并未生成CMakeCache.txt,会导致安装数据库失败,可能还是配置问题或者有其他workaround,没太深究,

            yum install cmake

            选择了另一种方式即通过wget下载安装,

              wget https://cmake.org/files/v3.9/cmake-3.9.0.tar.gz
              cd cmake-3.9.0
              ./configure --prefix=/opt/software/cmake
              gmake
              make install

              从5.7开始,安装数据库时,需要使用boost,下载boost_1_59_0.tar.gz,

                http://sourceforge.net/projects/boost/files/boost/1.59.0/boost_1_59_0.tar.gz

                6. 安装数据库,cmake安装,基础配置如下(可根据实际需求,调整配置参数),DWITH_BOOST是刚才下载解压的路径,

                  /opt/software/cmake/bin/cmake . -DCMAKE_INSTALL_PREFIX=/opt/mysql/mysql7 \
                  -DDEFAULT_CHARSET=utf-8 \
                  -DDEFAULT_COLLATION=utf8_general_ci \
                  -DENABLED_LOCAL_INFILE=ON \
                  -DWITH_INNOBASE_STORAGE_ENGINE=1 \
                  -DWITH_FEDERATED_STORAGE_ENGINE=1 \
                  -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
                  -DWITHOUT_EXAMPLE_STORAGE_ENGINE=1 \
                  -DWITH_PARTITION_STORAGE_ENGINE=1 \
                  -DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
                  -DCOMPILATION_COMMENT="MySQL Server(GPL)" \
                  -DSYSCONFDIR=/opt/mysql/data/3306 \
                  -DMYSQL_UNIX_ADDR=/opt/mysql/data/3306/mysql.sock \
                  -DWITH_BOOST=/opt/software/boost_1_59_0

                  执行make和make install,

                    make && make install

                    整个过程,将近1小时。

                    三、二进制安装

                    介质下载,MySQL 5.7,我们选择当前最高的5.7.32,指定RHEL7平台,下载gz文件,文件名为mysql-5.7.32-el7-x86_64.tar.gz,

                    MySQL 8.0,我们选择当前最高的8.0.23,指定RHEL7平台,下载gz文件,文件名为mysql-8.0.23-el7-x86_64.tar.gz,

                    具体安装步骤上,1-4和上述安装相同。

                    1. 卸载Linux自带的MariaDB,

                      rpm -e mariadb-libs-5.5.56-2.el7.x86_64 --nodeps
                      rpm -e mariadb-5.5.56-2.el7.x86_64 --nodeps
                      rpm -e mariadb-server-5.5.56-2.el7.x86_64 --nodeps

                      2. 创建用户、用户组,(可能已存在,继续使用,或者删除重建)

                        groupadd mysql
                        useradd -g mysql mysql

                        3. 设置操作系统的资源限制,

                          vi /etc/security/limits.conf 
                          mysql soft nproc 2047
                          mysql hard nproc 16347
                          mysql soft nofile 1024
                          mysql hard nofile 65536

                          4. 安装依赖包,(可能有些包已经存在)

                            yum install bison libaio-devel* perl gcc gcc-c++ ncurses ncurses-devel openssl openssl-devel


                            5. 设置路径结构

                            因为我的磁盘空间有限,为了能兼顾实际磁盘空间和常规安装路径习惯,设置一些软链接,例如,

                              ln -s /opt/oracle/software/mysql7 /usr/local/mysql7

                              在/usr/local/mysql7中解压,mysql-5.7.32-el7-x86_64.tar.gz,完成安装,

                                tar zxvf mysql-5.7.32-el7-x86_64.tar.gz

                                如果其他机器,环境相同,需要安装MySQL,可以将此目录,直接复制到对应路径下,即可完成安装,和Oracle的克隆安装,有异曲同工之处。

                                无论是源码安装,还是二进制安装,此时我们就有了数据库软件,如果要操作这个数据库,还需要初始化创建数据库。

                                初始化数据库

                                1. 创建相关目录,授权用户mysql,

                                  mkdir -p mysql/3306/{data,tmp,binlog,log,backup,scripts}
                                  chown -R mysql:mysql mysql

                                  2. 配置用户.bash_profile

                                    export LANG=zh_CN.GB18030
                                    export PATH=/opt/mysql/mysql7/bin:$PATH

                                    3. 配置参数文件,需切换到mysql用户,创建my.cnf,因为我会在这台机器创建5.7和8.0两个数据库,所以加了前缀3306,

                                      su - mysql
                                      cd /mysql/3306/
                                      touch 3306_my.cnf

                                      配置文件,我设置了这些初始化参数,

                                        [client]
                                        port=3306
                                        socket=/mysql/3306/tmp/mysql.sock

                                        [mysqld]
                                        socket=/mysql/3306/tmp/mysql.sock
                                        log_timestamps=system
                                        user=mysql
                                        server-id=1303306
                                        port=3306
                                        datadir=/mysql/3306/data/
                                        basedir=/usr/local/mysql/
                                        tmpdir=/mysql/3306/tmp
                                        default-storage-engine=innodb
                                        character_set_server=utf8mb4
                                        pid-file=/mysql/3306/tmp/mysql.pid
                                        log-error=/mysql/3306/log/mysql-error.log
                                        log-bin=/mysql/3306/log/mysql-bin
                                        long_query_time=2
                                        slow_query_log =1
                                        slow_query_log_file=/mysql/3306/log/slow.log
                                        explicit_defaults_for_timestamp
                                        federated

                                        [mysql]
                                        default-character-set=utf8mb4
                                        prompt="\u@db1 \R:\m:\s [\d]> "
                                        no-auto-rehash

                                        4. 初始化数据库

                                          /usr/local/mysql7/bin/mysqld --defaults-file=/mysql/3306/3306_my.cnf --initialize --user=mysql

                                          5. 启动数据库服务

                                            /usr/local/mysql7/bin/mysqld_safe --defaults-file=/mysql/3306/3306_my.cnf &

                                            6. 登录数据库

                                            有时登录数据库,会提示这个错误,提示没找到sock文件,

                                              mysql -uroot -p
                                              Enter password:
                                              ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

                                              实际这个sock在配置文件中配置了,不太清楚为什么有时候就是不生效,作为替代方案,可以创建软链接,模拟存在,

                                                ln -s mysql/3306/tmp/mysql.sock tmp/mysql.sock

                                                初始登录数据库,需要使用密码,从5.7开始,初始化的密码,可以从日志mysql-error.log得到,

                                                  2021-02-06T00:28:02.454667+08:00 1 [Note] A temporary password is generated for root@localhost: eS

                                                  登录数据库,会提示需要立即修改密码,否则不能进行其他的操作,有的教程说使用password()函数,但会提示warning,指出这个函数,即将废弃,

                                                    set password=password('root');
                                                    show warnings;
                                                    'SET PASSWORD = PASSWORD('')' is deprecated and will be removed in a future release. Please use SET PASSWORD = '' instead

                                                    可以改为直接输入文本,

                                                      set password='root';

                                                      设置密码不过期,刷新权限,

                                                        alter user root@localhost password expire never;
                                                        flush privileges;

                                                        此时,数据库就可以使用了。

                                                        从丙洋老师的《涂抹MySQL》书中,还学到了几个实用的脚本,借鉴于此。

                                                        1. 配置文件,mysql7_env.ini

                                                          # set env
                                                          MYSQL_USER=root
                                                          MYSQL_PAS='root'

                                                          # check parameter
                                                          if [ $# -ne 1 ]
                                                          then
                                                          HOST_PORT=3306
                                                          else
                                                          HOST_PORT=$1
                                                          fi

                                                          2. 数据库服务启动脚本,mysql7_db_startup.sh

                                                          可以增加参数,启动多个数据库,默认启动的是3306的数据库,

                                                            #!/bin/sh
                                                            # Created by bisal @20210207

                                                            source mysql/scripts/mysql7_env.ini

                                                            echo "Startup MySQL5.7 Service: localhost_"${HOST_PORT}
                                                            /usr/local/mysql7/bin/mysqld_safe --defaults-file=/mysql/${HOST_PORT}/${HOST_PORT}_my.cnf &

                                                            3. 数据库服务停止脚本,mysql7_db_shutdown.sh

                                                            可以增加参数,停止多个数据库,默认停止的是3306的数据库,

                                                              #!/bin/sh
                                                              # Created by bisal @20210207

                                                              source mysql/scripts/mysql7_env.ini

                                                              echo "Shutdown MySQL Service: localhost_"${HOST_PORT}
                                                              /usr/local/mysql7/bin/mysqladmin -u${MYSQL_USER} -p${MYSQL_PASS} -S mysql/${HOST_PORT}/tmp/mysql.sock shutdown

                                                              4. 数据库登陆脚本,mysql7plus.sh

                                                              这个非常方便,一键登录,默认登录的是3306的数据库,

                                                                #!/bin/sh
                                                                # Created by bisal @20210207

                                                                source mysql/scripts/mysql7_env.ini

                                                                echo "Login MySQL Service: localhost_"${HOST_PORT}
                                                                /usr/local/mysql7/bin/mysql -u${MYSQL_USER} -p${MYSQL_PASS} -S mysql/${HOST_PORT}/tmp/mysql.sock $2

                                                                如果要是更方便,可以将上述脚本路径加到PATH中,用唯一的脚本名称在任意路径下都可执行。

                                                                MySQL 8.0的二进制安装和上述5.7基本一致,只是相关路径,需要改下名称,例如,

                                                                  数据库软件路径,/usr/local/mysql8
                                                                  数据库路径,/mysql/3307

                                                                  因为一台机器上,有多个数据库,增加一个脚本,ps_mysql.sh,可以查询mysql的进程信息(增加参数,可以查询其他的进程),便于了解当前系统运行的MySQL数据库进程,

                                                                    #!/bin/sh
                                                                    # Created by bisal @20210207

                                                                    if [ $# -ne 1 ]
                                                                    then
                                                                    echo "Execute ps mysql"
                                                                    ps -ef | grep mysql | grep -v grep
                                                                    else
                                                                    echo "Execute ps "$1
                                                                    ps -ef | grep $1 | grep -v grep
                                                                    fi



                                                                    小白学习MySQL,

                                                                    小白学习MySQL - 闲聊聊


                                                                    和MySQL安装相关的其他文章,

                                                                    初探MySQL-小白的Linux安装笔记

                                                                    MySQL 5.6搭建主从复制

                                                                    MySQL 5.6 rpm安装方法和碰见的问题

                                                                    MySQL的rpm和源码两种安装操作

                                                                    最后修改时间:2021-02-23 08:25:54
                                                                    文章转载自bisal的个人杂货铺,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                                                                    评论