ARM架构源码安装MySQL数据库教程

一、软件介绍

MySQL 是最流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一。

二、环境信息

mysql-5.7.28版本

三、配置编译环境

步骤一:检查cmake是否安装

1
rpm -qa |grep cmake
  • 如果未安装,需要安装:

    1
    wget https://cmake.org/files/v3.12/cmake-3.12.1.tar.gz
  • 解压cmake

    1
    tar -xvf cmake-3.12.1.tar.gz
  • 进入 cmake目录

    1
    cd cmake-3.12.1
  • 执行命令

    1
    ./bootstrap
    1
    gmake
    1
    gmake install

步骤二:安装依赖包

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

    1
    yum install -y bison* ncurses*
    1
    yum install -y bzip2 wget
  • 在线安装openssl-devel:

    1
    yum -y install openssl-devel
  • 离线安装openssl-devel:

    1
    wget https://www.openssl.org/source/openssl-1.1.1d.tar.gz
  • 解压openssl

    1
    tar -xvf openssl-1.1.1d.tar.gz
  • 进入openssl-1.1.1d目录

    1
    cd  openssl-1.1.1d 
  • 执行命令

    1
    ./config shared zlib
    1
    make depend
    1
    make
    1
    make install
  • 安装rpcgen

    1
    wget https://github.com/thkukuk/rpcsvc-proto/releases/download/v1.4/rpcsvc-proto-1.4.tar.gz
  • 解压文件

    1
    tar -xvf rpcsvc-proto-1.4.tar.gz
  • 进入解压后的目录

    1
    cd rpcsvc-proto-1.4
  • 执行命令

    1
    ./configure
    1
    make
    1
    make install

步骤三:升级gcc版本至5.3或者以上(忽略这一步,提供的测试环境目前是7.3.1-6版本的。)

1.检查gcc的版本
1
gcc --version

image-20211228190757494

  • (可选)安装gcc7.3。

  • 本文档以7.3版本为例。

2.当版本不满足要求时,需要安装gcc
3.下载isl、gmp、mpc、mpfr
  • 1)在“gcc-7.3.0”目录下,检查gcc的依赖包是否已下载和安装。

    1
    ./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中检查到存在上述依赖包未下载安装时,请根据需要执行相应的命令下载。

    1
    2
    3
    4
    5
    6
    7
    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加快编译速度,在本示例中,使用的是16核CPU,所以此处为“-j64”。

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

      1
      cat /proc/cpuinfo| grep "processor"| wc -l
1
2
3
4
5
6
7
8
9
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 -j64
  • 2)执行安装。

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

    1
    2
    cd /usr/lib64
    ll |grep libstdc++.so

img

  • 4)确定软连接存在

    1
    ll |grep libstdc++.so.6.0.24

undefined

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

    1
    gcc --version

img

四、下载源码

  • 在“https://downloads.mysql.com/archives/community/”下载MySQL源码包,并上传至服务器。

  • 须知

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

    由于系统为ARM架构,故需要下载源码编译安装

    select Operating System 选项和Select OS Version选项必须与图片一致

    选择mysql-boost-xxx版本

image-20211228192947574

五、编译安装

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

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

1
tar -zvxf mysql-boost-5.7.28.tar.gz 

2.(可选)安装补丁

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

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

  • 2)进入目录并打补丁。

    1
    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

1
2
cd mysql-5.7.28
vim cmake.sh
  • 文件内容如下,其中,“DWITH_BOOST”的取值请根据实际的boost路径修改。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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=/root/mysql-5.7.28/boost/boost_1_59_0
  • 说明:-DCMAKE_INSTALL_PREFIX=/usr/local/mysql 安装路径

    -DMYSQL_DATADIR=/data/data 数据存储路径

    -DWITH_BOOST=/mysql/mysql-5.7.28/boost/boost_1_59_0根据实际的boost路径修改

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

1
chmod +x cmake.sh
1
./cmake.sh
  • 执行完后注意是否成功,成功后会生成Makefile文件

    image-20211228210711947

    image-20211228210752140

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

    1
    wget http://sourceforge.net/projects/boost/files/boost/1.59.0/boost_1_59_0.tar.gz
  • 若在预编译时出现依赖包不全的情况,可自行查阅资料安装依赖包,并重新预编译。重新预编译前,需要执行rm -f CMakeCache.txt删“CMakeCache.txt文件。”

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

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

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

    1
    2
    cat /proc/cpuinfo| grep "processor"| wc -l
    make -j32

image-20211228211517517

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

1
make install

image-20211228211618648

六、配置MySQL

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

查看系统中是否存在mysql用户和组:以下是存在

1
2
cat /etc/group | grep mysql
cat /etc/passwd | grep mysql

image-20211229092904368

若不存在则创建:

1
2
groupadd mysql
useradd -g mysql mysql

2.修改“/usr/local/mysql”(安装路径)权限

1
chown -R mysql.mysql /usr/local/mysql

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

  • 注意:执行下述命令后会产生初始随机密码需要记录。
1
2
3
cd /usr/local/mysql
mkdir -p /data/log /data/data /data/run
bin/mysqld --initialize --basedir=/usr/local/mysql --datadir=/data/data --user=mysql
  • 用–initialize-insecure 替换–initialize 就可以设置没有密码。后面可以自己用参数带进去修改密码
  • 报错:

bin/mysqld: error while loading shared libraries: libssl.so.1.1: cannot open shared object file: No such file or directory
bin/mysqld: error while loading shared libraries: libcrypto.so.1.1: cannot open shared object file: No such file or directory

  • 出现该问题首先检查该链接库文件有没有安装使用 命令进行核查

    1
    rpm -qa|grep libaio 
  • 增加软连接

    1
    2
    ln -s /root/openssl-1.1.1d/libssl.so.1.1 /usr/lib64/libssl.so.1.1
    ln -s /root/openssl-1.1.1d/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1
  • 执行命令成功后产生了密码:L+d1>M2On%G<

image-20211230181248614

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

  • 其中,创建的“mysql.log”和“mysql.pid”文件是空文件,创建后保存退出即可。
1
2
3
4
5
vim /data/log/mysql.log

vim /data/run/mysql.pid

chown -R mysql:mysql /data

5.修改“my.cnf”中的文件路径

如图所示(注意:若/usr/local/mysql下有my.cnf则默认此文件为配置文件需要修改此路径下的my.cnf,若没有则为/etc/my.cnf)

1
vim /etc/my.cnf
image-20211231101208174
  • 注意:
    • skip-grant-tables 不要写(此为忘记密码时所用)
    • 文件中配置的路径一定要与自己环境一致,否则启动会报错

七、运行MySQL

1.启动MySQL服务

1
2
3
4
5
6
7
8
#拷贝文件
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql

#设置开机自启
chkconfig mysql on

#启动
service mysql start

image-20211231103507742

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

  • 编辑文件并添加内容。

    1
    vim ~/.bash_profile
  • 添加的内容如下:

    1
    export PATH=/usr/local/mysql/bin:$PATH
  • 添加环境变量后如图所示。

    image-20211231103808839
  • 使环境变量生效。

    1
    source ~/.bash_profile
  • 查看MySQL的状态

    1
    2
    3
    4
    5
    #启动mysql
    systemctl start mysql

    #查看mysql的命令
    systemctl status mysql

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

  • 建立套接字软连接

    1
    ln -s /data/data/mysql.sock /tmp/mysql.sock
  • 需要输入的密码为配置MySQL时产生的初始密码(L+d1>M2On%G<),请留意初始密码包含了特殊字符。

    1
    2
    3
    4
    5
    #查询临时密码
    grep 'temporary password' /data/log/mysql.log

    #登陆mysql
    mysql -uroot -p
  • 修改密码

    1
    2
    3
    4
    5
    #修改密码
    ALTER USER 'root'@'localhost' IDENTIFIED BY 'Tcdn@2021';

    #刷新权限
    FLUSH PRIVILEGES;
  • 查询数据库

    1
    show databases;

常见问题

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

  • 解决方法:

    • 1)首先检查my.cnf文件中的所有路径是否正确

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

      1
      2
      3
      chown -R mysql:mysql /usr/local/mysql

      chown -R mysql:mysql /data
    • 3)查看是否已有mysql进程在运行,kill掉后再尝试。

      1
      2
      3
      4
      ps -ef | grep mysqld

      #杀掉进程
      kill -9 进程号

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

  • 问题描述:

    • 在连接MySQL时,忘记初始密码。
  • 解决方法:

    • 修改在my.cnf配置文件中加上**skip-grant-tables ,**重启服务

    • 输入mysql -uroot -p

    • 显示输入密码,不输入直接按回车键进入mysql

问题三:执行初始化配置脚本报错

  • 问题描述

    • 在初始化配置脚本时报错

      bin/mysqld: error while loading shared libraries: libssl.so.1.1: cannot open shared object file: No such file or directory
      bin/mysqld: error while loading shared libraries: libcrypto.so.1.1: cannot open shared object file: No such file or directory

  • 解决方法

    • 出现该问题首先检查该链接库文件有没有安装使用 命令进行核查

      1
      rpm -qa|grep libaio 
    • 增加软连接

      1
      2
      ln -s /root/openssl-1.1.1d/libssl.so.1.1 /usr/lib64/libssl.so.1.1
      ln -s /root/openssl-1.1.1d/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!