鲲鹏社区 软件 MySQL_5.7
MySQL 5.7
关系型数据库
开发语言:C/C++

软件介绍

MySQL是一个关系型数据库管理系统。

    环境要求

    本文以MySQL 5.7版本,基于新安装的CentOS Linux release 7.6.1810系统环境进行描述。

    准备的云服务器要求如1-1所示。

    表1-1 云服务器信息

    名称

    说明

    规格

    16vCPUs | 64GB | kc1.4xlarge.4

    镜像

    CentOS 7.6 64bit with ARMCentOS Linux release 7.6.1810

    公网IP

    申请弹性公网IP地址,带宽为5 Mbit/s

    私有IP

    192.168.0.166

    系统盘

    40GB


    配置编译环境

    步骤一:检查cmake是否安装

    检查是否安装。

    rpm -qa |grep cmake

    如果未安装,需要安装。可参见Cmake 3.9.2安装指南(CentOS 7.6进行安装。

    步骤二:安装依赖包

    执行以下命令安装依赖包:

    yum install bison* ncurses*

    yum install -y bzip2 wget

    步骤三:升级gcc版本至5.3或者以上

    1.      检查gcc的版本

    gcc --version

    (可选)安装gcc7.3

    本文档以7.3版本为例。

    2.      当版本不满足要求时,需要安装gcc

    下载gcc7.3

    下载地址:https://mirrors.tuna.tsinghua.edu.cn/gnu/gcc/gcc-7.3.0/gcc-7.3.0.tar.gz

    1)     将“gcc-7.3.0.tar.gz”放置于“/home”目录下,并解压安装。

    cd /home

    tar -xvf gcc-7.3.0.tar.gz

    3.      下载islgmpmpcmpfr

    1)     在“gcc-7.3.0”目录下,检查gcc的依赖包是否已下载和安装。

    ./contrib/download_prerequisites

    2)     (可选)根据需要,下载“gmp-6.1.0.tar.bz2”、“isl-0.16.1.tar.bz2”、“mpc-1.0.3.tar.gz”或“mpfr-3.1.4.tar.bz2”。

    步骤3.1中检查到存在上述依赖包未下载安装时,请根据需要执行相应的命令下载。

    wget https://gcc.gnu.org/pub/gcc/infrastructure/gmp-6.1.0.tar.bz2

    wget https://gcc.gnu.org/pub/gcc/infrastructure/isl-0.16.1.tar.bz2

    wget https://gcc.gnu.org/pub/gcc/infrastructure/mpc-1.0.3.tar.gz

    wget https://gcc.gnu.org/pub/gcc/infrastructure/mpfr-3.1.4.tar.bz2

    3)     将安装包放置于“/home/gcc-7.3.0”目录下。

    4.      编译安装gcc

    1)     编译gcc

    -j”参数可利用多核CPU加快编译速度,在本示例中,使用的是16CPU,所以此处为“-j16”。

    可通过下述命令查询CPU核数:

    cat /proc/cpuinfo| grep "processor"| wc -l

    cd /home/gcc-7.3.0

    mkdir gcc-build-7.3.0

    cd gcc-build-7.3.0

    ../configure --enable-checking=release --enable-language=c,c++ --disable-multilib --prefix=/usr

    make -j16

    2)     执行安装。

    make install

    3)     确定“libstdc++.so”是在“/usr/lib64”目录下。

    cd /usr/lib64

    ll |grep libstdc++.so

    查询结果如1-2所示。

    图1-2 查询“libstdc++.so”所在位置


    4)     确定软连接存在,如1-3所示。

    ll |grep libstdc++.so.6.0.24

    图1-3 确定软连接存在


    5)     查看版本,如图1-4所示。

    gcc -v

    图1-4 查看gcc版本


    ----结束


    下载源码

    在“https://dev.mysql.com/downloads/mysql/5.7.html#downloads”下载MySQL源码包,如1-5所示,并上传至服务器。

    须知

    下载MySQL源码包时,如果版本为“5.x.x”,则必须为5.7.27以上,如果版本为“8.x.x”,则必须为8.0.17以上。否则需要安装补丁,补丁的安装请参见本文档“编译安装”中的描述。

    图1-5 下载MySQL源码


    编译安装

    1.      进入下载的源码包所在的目录,解压缩源码包

    解压后生成“mysql-5.7.x”文件夹,具体版本号以实际为准。

    tar -zvxf mysql-boost-5.7.x.tar.gz

    2.      (可选)安装补丁

    MySQL源码包版本为“5.x.x”,则必须为5.7.27以上,版本为“8.x.x”,则必须为8.0.17以上。否则需要安装补丁。

    1)     下载补丁文件,并放置到“mysql-5.7.x”路径下。

    补丁下载路径:https://bugs.mysql.com/file.php?id=28180&bug_id=94699

    2)     进入目录并打补丁。

    cd mysql-5.7.XX

    patch -p1 < 0001-Bug-94699-Mysql-deadlock-and-bugcheck-on-aarch64.patch

    3.      在解压后的源码包路径“mysql-5.7.x”下,创建“cmake.sh

    vim cmake.sh

    文件内容如下,其中,“DWITH_BOOST”的取值请根据实际的boost路径修改。

    cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
    -DMYSQL_DATADIR=/data/data \
    -DSYSCONFDIR=/etc \
    -DWITH_INNOBASE_STORAGE_ENGINE=1 \
    -DWITH_PARTITION_STORAGE_ENGINE=1 \
    -DWITH_FEDERATED_STORAGE_ENGINE=1 \
    -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
    -DWITH_MYISAM_STORAGE_ENGINE=1 \
    -DENABLED_LOCAL_INFILE=1 \
    -DENABLE_DTRACE=0 \
    -DDEFAULT_CHARSET=utf8mb4 \
    -DDEFAULT_COLLATION=utf8mb4_general_ci \
    -DWITH_EMBEDDED_SERVER=1 \
    -DDOWNLOAD_BOOST=1 \
    -DWITH_BOOST=/mysql/mysql-5.7.28/boost/boost_1_59_0

    4.      给“cmake.sh”赋以权限并运行,等待运行完成

    chmod +x cmake.sh

    ./cmake.sh

    l  在执行./cmake.sh时会自动下载“boost_1_59_0.tar.gz” ,若出现超时报错的情况,可手工下载,并将文件放置到“cmake.sh”配置文件中“DWITH_BOOST”指定对应的路径下。

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

    l  若在预编译时出现依赖包不全的情况,可自行查阅资料安装依赖包,并重新预编译。重新预编译前,需要执行rm -f CMakeCache.txt删“CMakeCache.txt文件。”

    5.      MySQL源码路径下运行make -j16,等待编译完成

    -j”参数可利用多核CPU加快编译速度,在本示例中,使用的是16CPU,所以此处为“-j16”。

    可通过下述命令查询CPU核数:

    cat /proc/cpuinfo| grep "processor"| wc -l

    make -j16

    6.      运行make install,等待安装过程结束

    ----结束


    配置MySQL

    1.     创建“mysql”用户及用户组

    groupadd mysql

    useradd -g mysql mysql

    2.     修改“/usr/local/mysql”权限

    chown -R mysql:mysql /usr/local/mysql

    3.     进入安装路径,创建“data”、“log”、“run”文件夹,执行初始化配置脚本,生成初始的数据库和表

    需要指出的是,执行下述命令后,会产生初始随机密码,需要记录

    cd /usr/local/mysql

    mkdir -p /data/log /data/data /data/run

    bin/mysqld --initialize --basedir=/usr/local/mysql --datadir=/data/data --user=mysql

    4.     创建“mysql.log”和“mysql.pid”文件,赋予“mysql”用户及用户组权限

    其中,创建的“mysql.log”和“mysql.pid”文件是空文件,创建后保存退出即可。

    vi /data/log/mysql.log

    vi /data/run/mysql.pid

    chown -R mysql:mysql /data

    5.     修改“my.cnf”中的文件路径,如1-6所示

    vim /etc/my.cnf

    图1-6 修改“my.cnf”中的文件路径


    运行MySQL

    1.      启动MySQL服务

    cp support-files/mysql.server /etc/init.d/mysql

    chkconfig mysql on

    service mysql start

    2.      将以下内容添加进环境变量,并使之生效

    a.         编辑文件并添加内容。

    vim ~/.bash_profile

    添加的内容如下:

    export PATH=/usr/local/mysql/bin:$PATH

    添加环境变量后如1-7所示。

    图1-7 添加环境变量


    b.         使环境变量生效。

    source ~/.bash_profile

    3.      建立套接字软链接,接入MySQL环境

    需要输入的密码为5 配置MySQL时产生的初始密码,请留意初始密码包含了特殊字符。

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

    mysql -uroot -p

    如果忘记初始密码,可参见问题三:忘记MySQL的初始密码设置密码并重新连接。

    4.      修改密码

    下述命令中的“mypassword”需要根据实际修改成要配置的密码。

    SET PASSWORD = PASSWORD('mypassword');

    UPDATE mysql.user SET authentication_string =PASSWORD('mypassword') WHERE User='mysql';

    GRANT ALL PRIVILEGES ON *.* TO mysql@localhost IDENTIFIED BY 'mypassword' WITH GRANT OPTION;

    GRANT ALL PRIVILEGES ON *.* TO mysql@"%" IDENTIFIED BY 'mypassword' WITH GRANT OPTION;

    GRANT ALL PRIVILEGES ON *.* TO root@localhost IDENTIFIED BY 'mypassword' WITH GRANT OPTION;

    GRANT ALL PRIVILEGES ON *.* TO root@"%" IDENTIFIED BY 'mypassword' WITH GRANT OPTION;

    5.      使用新的密码重新登录

    下述命令中的“mypassword”需要根据实际修改成要配置的密码。

    mysql -uroot pmypassword


    常见问题

    问题一:启动MySQL服务时提示log文件不存在

    问题描述:

    启动MySQL时,提示如1-8所示。

    图1-8 提示log文件不存在


    解决方法:

    在“/etc/my.cnf”下配置正确的log路径,如7-2所示,并赋予“mysql”用户及用户组权限。

    图1-9 配置log路径


    问题二:启动MySQL服务提示“ERROR! The server quit without updating PID file

    问题描述:

    启动MySQL时,提示如7-3所示。

    图1-10 提示更新错误


    解决方法:

    1)     MySQL安装及“data/log/run”路径未赋予用户及用户组正确权限,请使用以下命令赋权。

    chown -R mysql:mysql /usr/local/mysql

    chown -R mysql:mysql /data

    2)     查看是否已有mysql进程在运行,kill掉后再尝试。

    ps -ef | grep mysqld

    kill -9 进程号

    问题三:忘记MySQL的初始密码

    问题描述:

    在连接MySQL时,忘记初始密码。

    解决方法:

    用以下命令启动MySQL,以不检查权限的方式启动,然后重新设置密码,重新登录。

    service mysql stop

    service mysql start --skip-grant-tables

    mysql -uroot -p

    回显内容如下,请按照说明操作。

    [root@ecs mysql]# mysql -uroot -p
    Enter password:    //
    直接按回车键
    Welcome to the MySQL monitor.  Commands end with ; or \g.
    Your MySQL connection id is 2
    Server version: 5.7.28 Source distribution
     
    Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
     
    Oracle is a registered trademark of Oracle Corporation and/or its
    affiliates. Other names may be trademarks of their respective
    owners.
     
    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
     
    mysql> UPDATE mysql.user SET authentication_string=PASSWORD('password') where USER='root'; //
    在此处更改密码password设置为实际要配置的密码
    mysql> flush privileges; //
    刷新权限
    mysql> exit //
    退出MySQL
    [root@ecs mysql]# mysql -uroot -p
    Enter password: //
    此处输入设置的密码

    软件下载

    源码下载:立即下载