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

一、环境

电脑信息:M1芯片,MacOS Monterey 12.2.1

Docker信息:Docker DeskTop 4.6.0

容器镜像信息:centos:latest

系统环境:centos 8.4 ARM架构

MySQL 版本:mysql-boost-5.7.28.tar.gz

二、 下载MySQL

2.1 MySQL下载

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

官网 下载所需版本的MySQL ,因为这次介绍的是源码安装,我下载的版本为mysql-boost-5.7.28.tar.gz。

2.2 使用wget下载,并解压

进入/usr/local目录,把安装包下载到此目录。

1
2
3
4
5
6
#切换目录
cd /usr/local
#下载
wget https://downloads.mysql.com/archives/get/p/23/file/mysql-boost-5.7.28.tar.gz
#解压
tar -zvxf mysql-boost-5.7.28.tar.gz

三、配置MySQL编译环境

使用源代码安装MySQL需要使用到CMake、make、gcc、bison、ncurses、openssl、rpcgen、libtirpc优先使用系统自带的,版本不符合要求再安装符合要求的版本即可。

参考地址:https://dev.mysql.com/doc/refman/5.7/en/source-installation-prerequisites.html

3.1 安装CMake

MySQL使用CMake跨平台工具预编译源码,用于设置mysql的编译参数。如:安装目录、数据存放目录、字符编码、排序规则等。安装最新版本即可。

1
2
3
4
5
6
#查看cmake版本信息,确认系统是否已安装
cmake --version
#使用rpm检查CMake是否安装
rpm -qa |grep cmake
#如果没有安装就使用yum安装cmake
yum install cmake -y

image-20220330150337283

3.2 安装make3.75

mysql源代码是由C和C++语言编写,在linux下使用make对源码进行编译和构建,要求必须安装make 3.75或以上版本

1
2
3
4
5
6
#查看make版本信息,确认系统是否已安装
make -version
#使用rpm检查Make是否安装
rpm -qa |grep make
#如果没有安装就使用yum安装make
yum install make -y

image-20220330150358294

**3.3 安装gcc4.4.6 **

GCC是Linux下的C语言编译工具,mysql源码编译完全由C和C++编写,要求必须安装GCC4.4.6或以上版本。

1
2
3
4
5
6
#查看gcc版本信息,确认版本信息
gcc --version
#使用rpm检查gcc是否安装
rpm -qa | grep gcc
#如果没有不符合要求就使用yum安装gcc、gcc-c++
yum install gcc gcc-c++ -y

image-20220330150638548

3.4 安装openssl 1.0.1

MySQL 5.7.28需要使用openssl编译。确保系统上安装了 OpenSSL 1.0.1 或更高版本。

1
2
3
4
5
6
#查看openssl版本信息,确认版本信息
openssl version
#使用rpm检查openssl是否安装
rpm -qa | grep openssl
#如果没有不符合要求就使用yum安装openssl、openssl-devel
yum install openssl openssl-devel -y

image-20220330150738151

3.5 安装bison2.1

Linux下C/C++语法分析器,需要2.1或更高版本。

1
2
3
4
5
6
#查看bison版本信息,确认系统是否已安装
bison --version
#使用rpm检查bison是否安装
rpm -qa |grep bison
#如果没有安装就使用yum安装bison
yum install bison -y

image-20220330150833088

3.6 安装ncurses

字符终端处理库

1
2
3
4
#使用rpm检查ncurses是否安装
rpm -qa |grep ncurses
#如果没有安装就使用yum安装ncurses、ncurses-devel
yum install ncurses ncurses-devel -y

image-20220330150951010

或者使用以下命令安装所有前置依赖

1
2
#安装前置依赖
yum install cmake make gcc gcc-c++ openssl openssl-devel bison ncurses ncurses-devel -y

3.7 安装rpcgen

需要安装rpcsvc-proto-1.4或者以上版本。CentOS8默认的yum源下不提供rpcgen安装包。所以需要到rpcgen的GitHub仓库下载。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#切换到安装目录
cd /usr/local/
#使用wget下载
wget https://github.com/thkukuk/rpcsvc-proto/releases/download/v1.4/rpcsvc-proto-1.4.tar.gz
#解压
tar -zxvf rpcsvc-proto-1.4.tar.gz
#切换目录
cd rpcsvc-proto-1.4
#通过命令查询CPU核数,在执行时添加-j参数,加快运行速度。
cat /proc/cpuinfo| grep "processor"| wc -l
#编译
./configure && make -j5 && make -j5 install
#查看是否安装成功
rpcgen --version

image-20220330162152297

3.8 安装libtirpc

1
2
3
4
#使用rpm检查libtirpc是否安装
rpm -qa |grep libtirpc
#如果没有安装就使用yum安装libtirpc、libtirpc-devel
yum install libtirpc libtirpc-devel -y

image-20220330164245800

四、编译安装MySQL

4.1 创建cmake.sh

在解压后的源码包路径下创建cmake.sh文件

1
2
3
4
#切换目录到源码解压目录
cd /usr/local/mysql-5.7.28/
#创建cmake.sh文件
vim cmake.sh

cmake.sh文件内容具体内容如下;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DSYSCONFDIR=/etc \
-DMYSQL_UNIX_ADDR=/usr/local/mysql/data/mysql.sock \
-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 \
-DWITH_BOOST=/usr/local/mysql-5.7.28/boost/boost_1_59_0
  • 重要参数说明:

    参数值说明 CMake选项
    安装根目录 -DCMAKE_INSTALL_PREFIX=/usr/local/mysql
    数据存储目录 -DMYSQL_DATADIR=/usr/local/mysql/data
    配置文件(my.cnf)目录 -DSYSCONFDIR=/etc
    UNIX socket文件 -DMYSQL_UNIX_ADDR=/usr/local/mysql/data/mysql.sock
    boost的路径 -DWITH_BOOST=/usr/local/mysql-5.7.28/boost/boost_1_59_0

4.2 创建目录

1
2
3
4
5
6
#创建mysql安装根目录
mkdir -p /usr/local/mysql
#创建mysql数据存储目录
mkdir -p /usr/local/mysql/data
#创建mysql日志目录
mkdir -p /usr/local/mysql/logs

4.3 执行编译

1
2
3
4
5
6
#赋予cmake.sh执行权限
chmod +x cmake.sh
#通过命令查询CPU核数,在执行时添加-j参数,加快运行速度。
cat /proc/cpuinfo| grep "processor"| wc -l
#运行cmake.sh,编译mysql,本次查询到的是5,所以make后面的查收加-j5
./cmake.sh && make -j5 && make -j5 install
  • 若在预编译时出现依赖包不全的情况,可自行查阅资料安装依赖包,并重新预编译。重新预编译前,需要执行rm -f CMakeCache.txt删“CMakeCache.txt文件。”

image-20220330173149300

五、配置MySQL

5.1 创建“mysql”用户

必须使用mysql用户,使用其它用户会报未知错误。

1
2
3
4
5
6
7
#查看系统中是否存在mysql用户和组:以下是存在
cat /etc/group | grep mysql
cat /etc/passwd | grep mysql
#创建用户,会默认生成和用户一样的组。
useradd mysql
#赋予mysql用户/usr/local/mysql目录的权限
chown -R mysql:mysql /usr/local/mysql

5.2 创建日志和pid文件

1
2
3
4
5
6
7
8
#切换到mysql安装路径下的logs目录
cd /usr/local/mysql/logs
#创建日志文件
touch mysql.log
#创建pid文件
touch mysql.pid
#赋予mysql用户/usr/local/mysql/logs目录的权限
chown -R mysql:mysql /usr/local/mysql/logs

5.3 创建my.cnf文件

1
2
3
4
#在/etc目录下创建my.cnf文件
vim /etc/my.cnf
#赋予644权限:只有拥有者有读写权限;而属组用户和其他用户只有读权限。
chmod 644 /etc/my.cnf

my.cnf文件详细内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
[client]
port=3306
socket=/usr/local/mysql/data/mysql.sock #与cmake.sh文件中配置的一致

[mysqld]
server-id = 1 #节点ID,确保唯一
log-bin = mysql-bin #开启mysql的binlog日志功能
sync_binlog = 1 #控制数据库的binlog刷到磁盘上去 , 0 不控制,性能最好,1每次事物提交都会刷到日志文件中,性能最差,最安全
binlog_format = mixed #binlog日志格式,mysql默认采用statement,建议使用mixed
expire_logs_days = 7 #binlog过期清理时间
max_binlog_size = 100m #binlog每个日志文件大小
binlog_cache_size = 4m #binlog缓存大小
max_binlog_cache_size= 512m #最大binlog缓存大
binlog-ignore-db=mysql #不生成日志文件的数据库,多个忽略数据库可以用逗号拼接,或者 复制这句话,写多行
auto-increment-offset = 1 # 自增值的偏移量
auto-increment-increment = 1 # 自增值的自增量
slave-skip-errors = all #跳过从库错误
gtid_mode=on #开启gtid模式
enforce_gtid_consistency=on #强制gtid一致性
log_bin_trust_function_creators=1
symbolic-links=0
bind_address= 0.0.0.0

basedir=/usr/local/mysql #与cmake.sh文件中配置的一致
datadir=/usr/local/mysql/data #与cmake.sh文件中配置的一致
log-error=/usr/local/mysql/logs/mysql.log #要与刚刚创建日志文件路径一致
port=3306
max_connections=5000
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

pid-file=/usr/local/mysql/logs/mysql.pid #要与刚刚创建pid文件路径一致
socket=/usr/local/mysql/data/mysql.sock #与cmake.sh文件中配置的一致

5.4 执行mysql初始化脚本

进入安装路径,执行初始化配置脚本,生成初始的数据库和表。

1
2
3
4
#切换到安装路径
cd /usr/local/mysql
#执行初始化配置脚本
bin/mysqld --defaults-file=/etc/my.cnf --initialize-insecure --user=mysql

参数说明:

–defaults-file 指定mysql配置文件

–initialize 产生随机密码,加上-insecure不产生。

–user 指定centos用户

image-20220330180709586

5.5 启动MySQL

1
2
3
4
5
6
7
8
#拷贝mysql.server文件到 /etc/init.d/mysqld
cp -rf /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
#设置开机自启
chkconfig mysql on
#启动MySQL
service mysqld start
#查看状态
service mysqld status

image-20220330181517481

六、初始化MySQL

6.1 初始化MySQL

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#登陆mysql
mysql -uroot -p
#修改密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'mysql@2022';
#授权
GRANT ALL ON *.* TO root@'%' IDENTIFIED BY 'mysql@2022';
#创建用于复制数据的账号
CREATE USER 'repl_users' IDENTIFIED BY 'my12345';
#授权
GRANT REPLICATION SLAVE ON *.* TO 'repl_users'@'%' IDENTIFIED BY 'my12345';
#刷新权限
FLUSH PRIVILEGES;
#查询所有数据库
show databases;
#重新使用密码登陆
mysql -uroot -pmysql@2022

image-20220330182839204

七、常见问题

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

  • 解决方法:

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

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

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

      1
      2
      3
      4
      ps -ef | grep mysqld

      #杀掉进程
      kill -9 进程号

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

  • 问题描述:

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

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

    • 输入mysql -uroot -p

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

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

  • 问题描述

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

      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

7.4 问题四:Cmake编译报错:

问题详情:

CMake Error at cmake/do_abi_check.cmake:86 (MESSAGE): ABI check found difference between

image-20220330172230064

解决方法:

注释:/usr/local/mysql-5.7.28/CMakeLists.txt 文件中的 INCLUDE(cmake/abi_check.cmake)

image-20220330171819700