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

openEuler 22.03 LTS源码安装部署MySQL8.0.39

原创 董小姐 2024-08-02
1353

MySQL支持三种安装MySQL的方式:通过官网RPM包安装、通过镜像站RPM包安装(推荐)和通过源码编译安装。openEuler操作系统暂时不支持通过RPM包安装。

本文档环境:

操作系统:openEuler 22.03 LTS

cpu:arm架构 kunpeng-920

MySQL版本:8.0.39

MySQL简介

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,是业界最流行的RDBMS(Relational Database Management System,关系数据库管理系统)之一,尤其在WEB应用方面。该文档主要介绍MySQL在物理机场景下的安装流程。

关系型数据库是将数据保存在不同的表中,而非将所有数据放在一个大仓库内,这样就加快了速度并提高了灵活性。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择MySQL作为网站数据库。

MySQL所使用的SQL语言是用于访问数据库的最常用标准化语言。

MySQL软件采用了双授权模式,分为社区版和商业版。

关于MySQL的更多信息请访问MySQL官网

开发语言:C/C++

建议的版本:MySQL 5.7.27、MySQL 8.0.17或MySQL 8.0.25及以上版本。

环境要求

本文基于openEuler操作系统部署,在正式操作前请确保软硬件均满足要求。

本文档环境:云平台主机 openEuler 22.03 LTS操作系统 ARM架构 鲲鹏920处理器CPU。

硬件要求

项目

说明

服务器

云主机

CPU

ARM架构 鲲鹏920处理器

硬盘

  • 进行性能测试时,数据目录需使用单独硬盘,即一个系统盘,一个数据盘(数据盘可选用性能较好的SSD盘,NVMe盘等),至少两块硬盘。
  • 非性能测试时,直接在系统盘上建数据目录即可。
  • 具体硬盘数量根据实际需求配置。

操作系统要求

查看环境操作系统的信息:cat /etc/*-release

查看环境处理器相关信息:lscpu

查看环境内核版本:uname -r

查看环境信息:uname -a

查看glib版本:ldd --version

查看gcc版本:gcc -vcat /proc/version

查看cmake版本:/usr/bin/cmake --version 视MySQL版本而定版本

如果需要全新安装操作系统,可选择“Minimal Install”安装方式并勾选Development Tools套件,否则很多软件包需要手动安装。

补充说明:

MySQL8.0.39要求cmake版本最低为:CMake 3.11.2

配置编译环境

防火墙配置

场景1:关闭防火墙

--停止防火墙。
systemctl stop firewalld.service
--关闭防火墙。
systemctl disable firewalld.service
说明
关闭防火墙的同时,也取消了防火墙开机自启动功能。

--查看防火墙状态。
systemctl status firewalld.service

显示Active: inactive (dead)即表示防火墙服务已关闭。

场景2:配置防火墙策略

具体的场景下更改对应的端口

firewall-cmd --zone=public --add-port=7892/tcp --permanent
firewall-cmd --zone=public --add-port=22/tcp --permanent
firewall-cmd --reload

系统参数配置

/etc/sysctl.conf配置

cat >> /etc/sysctl.conf <<EOF
#add by mysql
#/proc/sys/kernel/优化
# 10000 connect remain:
kernel.sem = 250 162500 250 650	 

#notice: shall shmmax is base on 16GB, you may adjust it for your MEM
#TODO: open blow two paramenter may make error like this: can not fork xxxx, just reboot your computer ~

for 2GB Mem:
kernel.shmall = 419430								
kernel.shmmax = 171796918     

#for 4GB Mem:
#kernel.shmall = 838860								
#kernel.shmmax = 3435973836  

#for 8GB Mem:
#kernel.shmall = 1677721								
#kernel.shmmax = 6871947673  

#for 16GB Mem:
#kernel.shmall = 3774873								
#kernel.shmmax = 8589934592 

#for 32GB Mem:
#kernel.shmall = 7549747
#kernel.shmmax = 17179869184
#for 64GB Mem:
#kernel.shmall = 15099494
#kernel.shmmax = 34359738368
#for 128GB Mem:
#kernel.shmall = 30198988
#kernel.shmmax = 68719476736
#for 256GB Mem:
#kernel.shmall = 60397977
#kernel.shmmax = 137438953472
#for 512GB Mem:
#kernel.shmall = 120795955
#kernel.shmmax = 274877906944

kernel.shmmni = 4096		

vm.dirty_background_ratio=2 
vm.dirty_ratio = 40			

vm.overcommit_memory = 2	
vm.overcommit_ratio = 90 	

vm.swappiness = 0 				

fs.aio-max-nr = 1048576		
fs.file-max = 6815744		
fs.nr_open = 20480000       

# TCP端口使用范围
net.ipv4.ip_local_port_range = 10000 65000
net.ipv4.tcp_keepalive_time = 1200
net.ipv4.tcp_keepalive_probes = 3
net.ipv4.tcp_keepalive_intvl = 30
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_max_tw_buckets = 6000
# 记录的那些尚未收到客户端确认信息的连接请求的最大值
net.ipv4.tcp_max_syn_backlog = 65536
# 每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目
net.core.somaxconn=1024
net.core.netdev_max_backlog = 32768
net.core.wmem_default = 8388608
net.core.wmem_max = 1048576
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_syn_retries = 2
net.ipv4.route.gc_timeout = 100
net.ipv4.tcp_wmem = 8192 436600 873200
net.ipv4.tcp_rmem  = 32768 436600 873200
net.ipv4.tcp_mem = 94500000 91500000 92700000
net.ipv4.tcp_max_orphans = 3276800
EOF

/etc/security/limits.conf配置

cat >> /etc/security/limits.conf << "EOF"
#add by mysql
* soft  nproc   65536
* hard  nproc   65536
* soft  nofile  65536
* hard  nofile  65536
* soft  stack   10240
* hard  stack   32768
* soft core unlimited
* hard core unlimited
EOF

禁用selinux

sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
setenforce 0 

关闭 numa和禁用透明大页

sed -i "s/quiet/quiet numa=off transparent_hugepage=never/g"  /etc/default/grub 
grub2-mkconfig -o /etc/grub2.cfg

创建用户组和用户

在服务器环境下,为了保障系统安全,通常会为进程分配单独的用户,以实现权限隔离。创建的组和用户都是操作系统层面的,而不是数据库层面的。

--创建mysql用户组。
groupadd mysql

--创建mysql用户。
useradd -g mysql mysql

--设置mysql用户密码。操作过程中请根据提示两次输入相同的密码。
passwd mysql

搭建数据盘

搭建数据盘以存储MySQL的数据文件。

  • 非性能测试时,直接执行创建数据目录
  • 进行性能测试时,需要格式化单独磁盘并挂载到数据目录:

方法一:使用mkfs进行磁盘管理

方法二:使用fdisk进行磁盘管理

方法三:使用LVM进行磁盘管理

本文档服务器上已挂载好数据盘,该步骤跳过,不然建议使用方法三搭建数据盘。

方法一:使用mkfs进行磁盘管理

--查看磁盘
ls /dev/nvme*

--格式化磁盘
mkfs.xfs -f /dev/nvme0n1
du -sh /dev/nvme0n1

--创建数据目录
mkdir /data

--挂载磁盘到数据目录。
mount /dev/nvme0n1 /data/
df -h

方法二:使用fdisk进行磁盘管理

  1. 创建分区(以/dev/vdb为例,根据实际情况创建)。
fdisk /dev/nvme0n1
  1. 输入字母“p”打印分区表,按“Enter”可以打印出当前的分区。
  2. 输入字母“n”添加一个新的分区,按“Enter”确认。
  3. 输入字母“p”选择创建一个主分区,按“Enter”确认。
  4. 输入数字“1”(作为第一块主分区)创建新的分区,按“Enter”确认。
  5. 设置选择分区start值,采用默认配置,按“Enter”确认。
  6. 设置选择分区end值,采用默认配置,按“Enter”确认。
  7. 输入字母“p”查看最新分区表,按“Enter”可以打印出当前的分区。
  8. 输入“w”将最新分区表保存至磁盘中,按“Enter”保存。
  9. 针对新创建的分区创建文件系统(以xfs为例,根据实际需求创建文件系统)。
ls /dev/nvme*
mkfs.xfs -f /dev/nvme0n1p1

11.挂载分区到“/data”以供操作系统使用。

mkdir /data
mount /dev/nvme0n1p1 /data

12.编辑“/etc/fstab”使重启后自动挂载数据盘。

a. 打开“/etc/fstab”。

vim /etc/fstab

b.按“i”进入编辑模式,如下图中,添加最后一行内容。

/dev/nvme0n1p1 /data xfs defaults 1   2

c.按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。

方法三:使用LVM进行磁盘管理

此步骤需要安装镜像中的lvm2相关包,步骤如下:

--安装lvm2
yum -y install lvm2

--创建物理卷(sdb为硬盘名称,具体名字以实际为准)
pvcreate /dev/sdb

--创建物理卷组(其中datavg为创建的卷组名称,具体名字以实际规划为准)
vgcreate datavg /dev/sdb

--创建逻辑卷(其中600G为规划的逻辑卷大小,具体大小以实际情况为准;datalv为创建的逻辑卷的名字,具体名称以实际规划为准)
lvcreate -L 600G -n datalv datavg

--创建文件系统
mkfs.xfs /dev/datavg/datalv

--创建数据目录并挂载。
mkdir /data
mount /dev/datavg/datalv /data

--编辑“/etc/fstab”使重启后自动挂载数据盘
vim /etc/fstab

--按“i”进入编辑模式,如下图中,添加最后一行内容
/dev/datavg/datalv /data xfs defaults 1   2

创建数据目录

查看磁盘空间

[root@xztestdb2 ~]# df -h
文件系统                    容量  已用  可用 已用% 挂载点
devtmpfs                     15G     0   15G    0% /dev
tmpfs                        16G   12K   16G    1% /dev/shm
tmpfs                       6.1G  122M  5.9G    2% /run
tmpfs                       4.0M     0  4.0M    0% /sys/fs/cgroup
/dev/mapper/openeuler-root   43G   14G   27G   34% /
tmpfs                        16G  8.0K   16G    1% /tmp
/dev/vdb                    6.0T   80K  5.7T    1% /home
/dev/vda2                   974M   72M  835M    8% /boot
/dev/vda1                   599M  5.8M  594M    1% /boot/efi

/home目录空间为6T,所以将数据库目录部署在/home目录下。

不建议将数据库软件部署在操作系统目录,避免操作系统目录磁盘损坏。

--创建数据目录和进程所需的相关目录
mkdir -p /home/mysqldb
cd /home/mysqldb
mkdir data tmp run log relaylog

--修改数据目录“/data”的用户组和用户权限为mysql:mysql
chown -R mysql:mysql /home/mysqldb

配置环境变量

将MySQL二进制文件的路径添加到环境变量中

echo export PATH=$PATH:/home/mysqldb/mysql/bin >> /etc/profile
echo export PATH=$PATH:/home/mysqldb/mysql/bin >> /home/mysql/~.bash_profile 

说明:其中PATH中的“/home/mysqldb/mysql/bin”路径,为MySQL软件安装目录下的bin文件的绝对路径,请根据实际情况修改。

使环境变量配置生效

source /etc/profile

source /home/mysql/~.bash_profile 

查看环境变量

env

配置Yum源

正确配置Yum源以便于后续能够正常安装所需依赖包和软件。请根据网络情况和使用的操作系统类型选择配置Yum源方法。

由于本文档云主机不能访问外网,所以采用配置本地Yum源的方式。

配置外网Yum源

  1. 使用curl命令访问任意网站,若能显示网站信息则表示代理配置成功,可以访问外网。
  2. 查看Yum源,如果存在外网Yum源(存在后缀为.repo的文件),则直接执行7
ls /etc/yum.repos.d/
  1. 备份Yum源至bak目录。
cd /etc/yum.repos.d
mkdir bak
mv *.repo bak
  1. 打开文件。
vi /etc/yum.repos.d/openEuler.repo
  1. 按“i”进入编辑模式。
  • 如果操作系统为openEuler 20.03,则将文件内容修改为如下所示。
[OS]
name=OS
baseurl=http://repo.openeuler.org/openEuler-20.03-LTS-SP1/OS/$basearch/
enabled=1
gpgcheck=1
gpgkey=http://repo.openeuler.org/openEuler-20.03-LTS-SP1/OS/$basearch/RPM-GPG-KEY-openEuler
[EPOL]
name=EPOL
baseurl=http://repo.openeuler.org/openEuler-20.03-LTS-SP1/EPOL/update/$basearch/
enabled=1
gpgcheck=1
gpgkey=http://repo.openeuler.org/openEuler-20.03-LTS-SP1/OS/$basearch/RPM-GPG-KEY-openEuler
[debuginfo]
name=debuginfo
baseurl=http://repo.openeuler.org/openEuler-20.03-LTS-SP1/debuginfo/$basearch/
enabled=1
gpgcheck=1
gpgkey=http://repo.openeuler.org/openEuler-20.03-LTS-SP1/debuginfo/$basearch/RPM-GPG-KEY-openEuler
[source]
name=source
baseurl=http://repo.openeuler.org/openEuler-20.03-LTS-SP1/source/
enabled=1
gpgcheck=1
gpgkey=http://repo.openeuler.org/openEuler-20.03-LTS-SP1/source/RPM-GPG-KEY-openEuler
[update]
name=update
baseurl=http://repo.openeuler.org/openEuler-20.03-LTS-SP1/update/$basearch/
enabled=1
gpgcheck=1
gpgkey=http://repo.openeuler.org/openEuler-20.03-LTS-SP1/OS/$basearch/RPM-GPG-KEY-openEuler
[everything]
name=everything
baseurl=http://repo.openeuler.org/openEuler-20.03-LTS-SP1/everything/$basearch/
enabled=1
gpgcheck=1
gpgkey=http://repo.openeuler.org/openEuler-20.03-LTS-SP1/everything/$basearch/RPM-GPG-KEY-openEuler
  • 如果操作系统为openEuler 22.03,则将文件内容修改为如下所示。
[OS]
name=OS
baseurl=http://repo.openeuler.org/openEuler-22.03-LTS-SP1/OS/$basearch/
enabled=1
gpgcheck=1
gpgkey=http://repo.openeuler.org/openEuler-22.03-LTS-SP1/OS/$basearch/RPM-GPG-KEY-openEuler

[everything]
name=everything
baseurl=http://repo.openeuler.org/openEuler-22.03-LTS-SP1/everything/$basearch/
enabled=1
gpgcheck=1
gpgkey=http://repo.openeuler.org/openEuler-22.03-LTS-SP1/everything/$basearch/RPM-GPG-KEY-openEuler

[EPOL]
name=EPOL
baseurl=http://repo.openeuler.org/openEuler-22.03-LTS-SP1/EPOL/main/$basearch/
enabled=1
gpgcheck=1
gpgkey=http://repo.openeuler.org/openEuler-22.03-LTS-SP1/OS/$basearch/RPM-GPG-KEY-openEuler

[debuginfo]
name=debuginfo
baseurl=http://repo.openeuler.org/openEuler-22.03-LTS-SP1/debuginfo/$basearch/
enabled=1
gpgcheck=1
gpgkey=http://repo.openeuler.org/openEuler-22.03-LTS-SP1/debuginfo/$basearch/RPM-GPG-KEY-openEuler

[source]
name=source
baseurl=http://repo.openeuler.org/openEuler-22.03-LTS-SP1/source/
enabled=1
gpgcheck=1
gpgkey=http://repo.openeuler.org/openEuler-22.03-LTS-SP1/source/RPM-GPG-KEY-openEuler

[update]
name=update
baseurl=http://repo.openeuler.org/openEuler-22.03-LTS-SP1/update/$basearch/
enabled=1
gpgcheck=1
gpgkey=http://repo.openeuler.org/openEuler-22.03-LTS-SP1/OS/$basearch/RPM-GPG-KEY-openEuler

[update-source]
name=update-source
baseurl=http://repo.openeuler.org/openEuler-22.03-LTS-SP1/update/source/
enabled=1
gpgcheck=1
gpgkey=http://repo.openeuler.org/openEuler-22.03-LTS-SP1/source/RPM-GPG-KEY-openEuler
  1. 按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。
  2. 使Yum源生效。
yum clean all
yum makecache
yum list

配置本地Yum源

下载OS镜像文件

操作系统所有版本镜像下载入口:openEuler下载 | openEuler ISO镜像 | openEuler社区官网

openEuler 22.03 LTS 镜像下载地址:

挂载OS镜像文件

方法1:上传OS镜像文件至“/opt”路径,并挂载OS镜像文件至“/mnt”目录下。
  • openEuler 20.03:
mount /opt/openEuler-20.03-LTS-SP1-everything-aarch64-dvd.iso /mnt
  • openEuler 22.03:
mount /opt/openEuler-22.03-LTS-everything-aarch64-dvd.iso /mnt

说明

iso文件名请根据实际情况修改,该操作单次生效,重启后失效,可执行下列操作开机自动挂载OS镜像文件。

  1. 打开fstab文件。
vim /etc/fstab
  1. 按“i”进入编辑模式,在文件末尾添加如下信息。
  • openEuler 20.03:
/opt/openEuler-20.03-LTS-SP1-everything-aarch64-dvd.iso /mnt iso9660 loop 0 0
  • openEuler 22.03:
/opt/openEuler-22.03-LTS-everything-aarch64-dvd.iso /mnt iso9660 loop 0 0
  1. 按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。
方法2:使用浏览器登录BMC,通过KVM加载OS镜像文件
  1. 查看OS镜像对应的设备符号。ls /dev/sr*
  2. 将OS镜像文件挂载至“/mnt”目录下。
mount /dev/sr0 /mnt
df -h | grep /mnt
ls /mnt/

说明

/dev/sr0为OS镜像对应的设备符号,需要和查看的设备符号保持一致。

备份Yum源

cd /etc/yum.repos.d
mkdir bak
mv *.repo bak

配置本地Yum源

cd /etc/yum.repos.d
cat >> local.repo << "EOF"
[local]
name=local.repo
baseurl=file:///mnt
enabled=1
gpgcheck=0
EOF

参数说明:baseurl中file路径为镜像挂载路径,挂载目录相对应

使Yum源生效

yum clean all
yum makecache
yum list

安装依赖包

安装依赖包的作用是为编译和安装MySQL提供必要的依赖和环境。

yum -y install bison ncurses ncurses-devel libaio-devel openssl openssl-devel gmp gmp-devel mpfr mpfr-devel libmpc libmpc-devel wget tar gcc gcc-c++ git rpcgen cmake libtirpc-devel openldap-devel openldap net-tools

升级CMake

为了确保编译过程中使用的CMake版本符合MySQL的要求,需要升级CMake。若操作系统自带的CMake软件不能满足当前数据库版本的编译要求,则需要升级CMake版本至3.4.3或以上,本文以升级到3.5.2为例进行说明。

升级前查看CMake版本

如果版本高于3.4.3,可跳过该步骤。

hash -r
/usr/bin/cmake --version

输出如下:

[root@xztestdb2 yum.repos.d]# /usr/bin/cmake --version
cmake version 3.22.0

CMake suite maintained and supported by Kitware (kitware.com/cmake).

问题处理

问题描述

/usr/local/bin/cmake --version 提示cmake命令找不到

分析过程

which cmake发现cmake在/usr/bin/目录下

解决办法

将/usr/local/bin/cmake --version 替换成/usr/bin/cmake --version

下载CMake

下载CMake 3.5.2上传至服务器“/opt”目录。

CMake 3.5.2下载地址:https://cmake.org/files/v3.5/cmake-3.5.2.tar.gz

若服务器可以访问外网,则可以直接使用wget命令下载CMake。

cd /opt
wget https://cmake.org/files/v3.11/cmake-3.11.3.tar.gz --no-check-certificate

解压

cd /opt
tar -zxvf cmake-3.11.3.tar.gz

升级CMake

cd /opt/cmake-3.11.3
./bootstrap
make -j 24
make install

参数说明:-j 24参数充分利用多核CPU优势,加快编译速度,参数-j后数字为CPU核数,可用
cat /proc/cpuinfo | grep processor | wc -l进行查看,此数值应小于等于CPU核数。

确认CMake的版本是否为3.11.3

--清除缓存
hash -r

--查询CMake版本
/usr/local/bin/cmake --version

输出如下:

[root@xztestdb2 cmake-3.11.3]# /usr/local/bin/cmake --version
cmake version 3.11.3

CMake suite maintained and supported by Kitware (kitware.com/cmake).

扩展

将CMake版本从3.22.0升级到3.5.2

升级前查看CMake版本

如果版本高于3.4.3,可跳过该步骤。

hash -r
/usr/bin/cmake --version

输出如下:

[root@xztestdb2 yum.repos.d]# /usr/bin/cmake --version
cmake version 3.22.0

CMake suite maintained and supported by Kitware (kitware.com/cmake).
下载CMake

下载CMake 3.5.2上传至服务器“/opt”目录。

CMake 3.5.2下载地址:https://cmake.org/files/v3.5/cmake-3.5.2.tar.gz

若服务器可以访问外网,则可以直接使用wget命令下载CMake。

cd /opt
wget https://cmake.org/files/v3.5/cmake-3.5.2.tar.gz --no-check-certificate
解压
cd /opt
tar -zxvf cmake-3.5.2.tar.gz
升级CMake
cd /opt/cmake-3.5.2
./bootstrap
make -j 24
make install

参数说明:-j 24参数充分利用多核CPU优势,加快编译速度,参数-j后数字为CPU核数,可用
cat /proc/cpuinfo | grep processor | wc -l进行查看,此数值应小于等于CPU核数。
确认CMake的版本是否为3.5.2
--清除缓存
hash -r

--查看CMake版本
/usr/local/bin/cmake --version

输出如下:

[root@xztestdb2 cmake-3.5.2]# /usr/local/bin/cmake --version
cmake version 3.5.2

CMake suite maintained and supported by Kitware (kitware.com/cmake).

问题处理

升级CMake后,CMake版本未生效的解决方法

问题描述

执行升级CMake操作后,查看CMake版本,发现版本未生效。

关键过程、根本原因分析

环境中存在其它CMake版本,优先级比编译安装的CMake版本高。

结论、解决方案及效果
--查看环境中所有的CMake
find / -name cmake | grep bin

--查看CMake版本
/usr/local/bin/cmake --version
/usr/local/cmake/bin/cmake --version

--使当前编译安装的CMake版本生效
cd /usr/local/bin/
mv cmake cmake-3.18.2

--清除缓存
hash -r

--查看CMake版本
cmake --version

安装GCC

openEuler 20.03操作系统自带的GCC版本为7.3.0,openEuler 22.03操作系统自带的GCC版本为10.3.1,均不需要升级GCC。

扩展:CentOS 7.6操作系统自带的GCC软件版本较低,需要升级GCC版本至5.3.0或者以上,具体升级步骤查看官网。

--查看GCC版本
查看gcc版本:gcc -v  或 cat /proc/version

输出如下:

[root@xztestdb2 cmake-3.5.2]# gcc -v 
使用内建 specs。
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/libexec/gcc/aarch64-linux-gnu/10.3.1/lto-wrapper
目标:aarch64-linux-gnu
配置为:../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-linker-hash-style=gnu --enable-languages=c,c++,objc,obj-c++,fortran,lto --enable-plugin --enable-initfini-array --disable-libgcj --without-isl --without-cloog --enable-gnu-indirect-function --build=aarch64-linux-gnu --with-stage1-ldflags=' -Wl,-z,relro,-z,now' --with-boot-ldflags=' -Wl,-z,relro,-z,now' --disable-bootstrap --with-multilib-list=lp64 --enable-bolt
线程模型:posix
Supported LTO compression algorithms: zlib
gcc 版本 10.3.1 (GCC) 

编译和安装MySQL

如果编译安装过程失败,需要执行如下命令清理环境后,再按照该章节的步骤重新解压MySQL源码包并编译安装。

rm -rf /home/mysqldb/tmp/mysql-8.0.39

下载MySQL源码包

MySQL :: Download MySQL Community Server

若服务器可以访问网络,则可以通过wget命令直接下载MySQL源码。

cd /home/mysqldb/tmp
wget https://cdn.mysql.com//Downloads/MySQL-8.0/mysql-boost-8.0.39.tar.gz --no-check-certificate

将mysql源码包上传至服务器并解压

将mysql源码包上传至服务器/home/mysqldb/tmp目录下并解压

cd /home/mysqldb/tmp
tar -zxvf mysql-boost-8.0.39.tar.gz

创建编译目录

进入“/home/mysqldb/tmp/mysql-8.0.39”源码文件夹,并建立一个编译目录

cd /home/mysqldb/tmp/mysql-8.0.39
mkdir build

进入编译目录,配置MySQL

注意:安装不同版本MySQL的DWITH_BOOST目录是不同的,需要先查询下。

cd /home/mysqldb/tmp/mysql-8.0.39/build
cmake .. -DBUILD_CONFIG=mysql_release -DCMAKE_INSTALL_PREFIX=/home/mysqldb/mysql -DMYSQL_DATADIR=/home/mysqldb/data -DWITH_BOOST=/home/mysqldb/tmp/mysql-8.0.39/boost/boost_1_77_0

关键参数说明:

参数

说明

DBUILD_CONFIG

设置为mysql_release的含义是指CMake编译参数采用Mysql官方发布release版本时的编译参数。

DCMAKE_INSTALL_PREFIX

用于指定软件的安装路径,本文安装路径为“/home/mysqldb/mysql”。

文档中的安装路径仅供参考,请根据实际情况进行配置。

DMYSQL_DATADIR

创建数据库时,数据文件存放的路径。本文安装路径为“/home/mysqldb/data”。

DWITH_BOOST

解压MySQL源码包后,解压文件中boost_1_77_0文件夹所在路径。例如,本文解压在“/home/mysqldb”目录下,则路径为“/home/mysqldb/mysql-8.0.39/boost/boost_1_77_0”。

问题处理

cmake版本低

问题描述
[root@xztestdb2 build]# cmake .. -DBUILD_CONFIG=mysql_release -DCMAKE_INSTALL_PREFIX=/home/mysqldb/mysql -DMYSQL_DATADIR=/home/mysqldb/data -DWITH_BOOST=/home/mysqldb/tmp/mysql-8.0.39/boost/boost_1_77_0
-- Running cmake version 3.5.2
CMake Error at CMakeLists.txt:118 (CMAKE_MINIMUM_REQUIRED):
  CMake 3.11.2 or higher is required.  You are running version 3.5.2


-- Configuring incomplete, errors occurred!
解决办法

将cmake升级到3.11.2,详细过程参照上面升级CMake章节。

编译安装MySQL

make -j 24
make -j 24 install

参数说明:-j96参数充分利用多核CPU优势,加快编译速度,参数-j后数字为CPU核数,可用
cat /proc/cpuinfo | grep processor | wc -l进行查看,此数值应小于等于CPU核数。

查看MySQL安装目录

ls /home/mysqldb/mysql

输出结果如下:

bin   include  LICENSE         LICENSE-test  mysqlrouter-log-rotate  README         README-test  share          var
docs  lib      LICENSE.router  man           mysql-test              README.router  run          support-files

查看数据库版本

/home/mysqldb/mysql/bin/mysql --version

输出结果如下:

[root@xztestdb2 mysqldb]# /home/mysqldb/mysql/bin/mysql --version
/home/mysqldb/mysql/bin/mysql  Ver 8.0.39 for Linux on aarch64 (Source distribution)

配置my.cnf文件

编辑my.cnf文件

创建如下新的my.cnf文件

cat > /home/mysqldb/my.cnf  << "EOF"
[client]
port = 7892
socket = /home/mysqldb/mysql.sock
default-character-set = utf8mb4

[mysql]
# 设置mysql客户端默认字符集
default-character-set = utf8mb4
socket = /home/mysqldb/mysql.sock
prompt="\\u@\\h :\\d \\R:\\m:\\s>" #设置命令行提示符

[mysqld]
#操作用户#
user=mysql

#目录#
basedir=/home/mysqldb/mysql  #mysql安装根目录
datadir=/home/mysqldb/data #mysql数据文件所在目录
socket = /home/mysqldb/mysql.sock

#字符集#
character-set-server = utf8mb4 #数据库默认字符集,注意不要再用utf8了
collation-server = utf8mb4_general_ci #数据库字符集对应一些排序规则,要属于character-set-server对应值的集合内
init_connect='SET NAMES utf8mb4' #设置client连接mysql时的字符集,防止乱码

#运行实例相关#
server_id = 103 #Mysql服务实例的唯一编号 每个mysql服务实例Id需唯一 可设置成ip最后一位
port = 7892 #服务端口号 默认3306
pid_file=/home/mysqldb/mysqld.pid #pid文件的路径
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

#二进制日志#
log_bin = /home/mysqldb/relaylog/mybinlog  #二进制日志文件
binlog_format = ROW
binlog_expire_logs_seconds=1296000 #mysql binlog日志文件保存的过期时间15天,过期后自动删除;默认值是0,不限制,这样会占用空间太多 单位秒
max_binlog_size = 1G #限制单个文件大小,默认大小:1,073,741,824,即1G,太大了

#慢查询日志#
log_queries_not_using_indexes = 1 #把未使用到索引的sql记录到慢查询日志
slow_query_log = 1 #是否打开慢查询sql日志
slow_query_log_file = /home/mysqldb/log/mysql-slow.log #慢查询sql日志的文件地址
long_query_time = 1 #慢查询执行的秒数,超过这个值则会被记录到慢查询日志

#时区#
default_time_zone="+8:00" #设置默认服务器时区
log_timestamps = system #解决日志中时间和本地差8小时

#认证策略解决登录ERROR 2059 (HY000): Authentication plugin 'caching_sha2_password' cannot be loaded#
default_authentication_plugin = mysql_native_password 

#错误日志#
log_error=/home/mysqldb/log/mysqld_error.log 

#性能参数#
open_files_limit = 65535
back_log=600 #连接数达到max_connections时,新来的请求将会被存在堆栈中。数量超过back_log,将不被授予连接资源
max_connections = 1000 #最大并发连接数,过小会影响连接的数量,报Too many connections错误,过大会导致服务资源用完无响应,最大值不能超过100000
max_user_connections=1000 #指同一个账号能够同时连接到mysql服务的最大连接数。设置为0表示不限制。
table_open_cache = 1024 #能同时打开表的个数
table_definition_cache = 1024
thread_stack = 512K
thread_cache_size = 1500
sort_buffer_size = 4M   #只是在需要的时候才分配,并且在那些操作做完之后就释放了
join_buffer_size = 4M
read_buffer_size = 32M  #读入缓冲区大小,对表进行顺序扫描时将分配1个读入缓冲区。对表的顺序扫描请求非常频繁,并且频繁扫描进行得太慢可增加。只是在需要的时候才分配,并且在操作结束后就释放
read_rnd_buffer_size = 8M  #随机读缓冲区大小,当按任意顺序读取行时(如:排序),将分配一个随机读缓存区。只是在需要的时候才分配,并且在那些操作做完之后就释放
bulk_insert_buffer_size = 4M
interactive_timeout = 600
wait_timeout = 600
tmp_table_size = 48M  #heap(堆积)表缓冲大小,提高联接查询速度。只是在需要的时候才分配,并且在那些操作做完之后就释放了
max_heap_table_size = 32M
binlog_cache_size = 4M
max_binlog_cache_size = 50M
key_buffer_size=256M  #索引缓冲区大小。内存在4GB左右的服务器该参数可设置为256M或384M

#限制ibtmp1文件大小
innodb_temp_data_file_path = ibtmp1:12M:autoextend:max:5G

#库表名不区分大小写#
lower_case_table_names = 1

#数据安全#
innodb_flush_log_at_trx_commit = 2 #每次事务提交时,将存储引擎log buffer中的redo日志写入到log file,但并不会立即刷写到磁盘
innodb_log_buffer_size=64M  #将日志写入日志磁盘文件前的缓冲大小
innodb_log_file_size = 256M #InnoDB redo log大小

#最大允许的包#
max_allowed_packet = 48M

#超时#
interactive_timeout = 1800 #MySQL连接闲置超过一定时间后(单位:秒)将会被强行关闭  MySQL默认的wait_timeout 值为8个小时,
wait_timeout = 1800  #interactive_timeout参数需要同时配置才能生效

#禁用域名的解析#
skip_name_resolve = 1 #dns慢的情况下会影响性能,禁止MySQL对外部连接进行DNS解析,使用这一选项可以消除MySQL进行DNS解析的时间

#innodb是否为每个表使用独立的表空间文件#
innodb_file_per_table = 1 #开启该参数的时候,Innodb将每个新创建的表的数据及索引存储在一个独立的.ibd文件里,而不是系统的表空间。

#innodb缓冲池的大小设置#
#说明缓冲池大小必须始终等于或者是innodb_buffer_pool_chunk_size * innodb_buffer_pool_instances的倍数,否则mysql会自动调整为相应的倍数#
innodb_buffer_pool_chunk_size= 256M   定义了buffer中每个chunk的大小  chunk 块
innodb_buffer_pool_size = 1G  #物理服务器内存的50%~75%  缓存 InnoDB存储引擎的表中的数据和索引数据,提高查询访问速度
EOF

mv /etc/my.cnf /tmp/my.cnf
ln -s /home/mysqldb/my.cnf /etc/my.cnf

修改配置文件权限

修改配置文件的用户组和用户权限为mysql:mysql

chown -R mysql:mysql /home/mysqldb/my.cnf 

初始化数据库

检查数据目录权限

ls -ld /home/mysqldb/data/

如果不是755 按如下进行更改:

chmod -R 755 /home/mysqldb/data/

切换到mysql用户

su - mysql
whoami

初始化数据库的数据目录

mysqld --defaults-file=/home/mysqldb/my.cnf  --initialize

/home/mysqldb/mysql/bin/mysqld --defaults-file=/home/mysqldb/my.cnf  --initialize

初始化完成后,查看数据目录下数据文件“/home/mysqldb/data”的用户组和用户权限为mysql:mysql(因为前面/home/mysqldb/my.cnf文件中配置的操作系统用户是user=mysql)。

MySQL加入service服务

chmod 777 /home/mysqldb/mysql/support-files/mysql.server
cp /home/mysqldb/mysql/support-files/mysql.server /etc/init.d/mysql
chkconfig mysql on

修改“/etc/init.d/mysql”的用户组和用户权限为mysql:mysql。

chown -R mysql:mysql /etc/init.d/mysql
ll /etc/init.d/mysql

启动数据库

启动数据库进程

启动数据库有3种方式,分别如下:

service mysql start
或
mysqld --defaults-file=/home/mysqldb/my.cnf &
或
/home/mysqldb/mysql/bin/mysqld_safe --defaults-file=/home/mysqldb/my.cnf &

注意:

如果以root用户(su - root)第一次启动数据库服务(service mysql start),则启动时会提示缺少mysql.log文件而导致失败。切换到mysql用户(su - mysql)启动数据库服务后,会在/data/mysql/log目录下生成mysql.log文件,停止数据库服务(service mysql stop),再次以root用户启动数据库服务则不会报错。

查看数据库进程

ps -ef | grep mysql

查看数据库监测端口

注意:如果netstat命令执行失败,则需要安装依赖包:yum -y install net-tools

 netstat -anpt
 netstat -anpt | grep mysql
 netstat -anpt | grep 7892

登录数据库

提示输入密码时,请输入6产生的初始密码。

--查看初始化数据库时生成的临时密码
cd /home/mysqldb/log
more mysqld_error.log | grep password

输出如下:

[root@xztestdb2 log]# more mysqld_error.log | grep password
2024-08-01T10:53:36.904523+08:00 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: OlpMdOk<6ppR
2024-08-01T10:53:37.202830+08:00 6 [Warning] [MY-013360] [Server] Plugin mysql_native_password reported: ''mysql_native_password' is deprecated and will be removed in a future release. Please use caching_sha2_password instead'

登录数据库

mysql -uroot -p -
或
/home/mysqldb/mysql/bin/mysql -uroot -p 

配置数据库帐号密码

--修改通过root用户登录数据库的密码
alter user 'root'@'localhost' identified by "ad2gzYIA6JtwDUxlIOiK";

--创建全域root用户(允许root从其他服务器访问)
create user 'root'@'%' identified by 'ad2gzYIA6JtwDUxlIOiK';

--授权
grant all privileges on *.* to 'root'@'localhost';
grant all privileges on *.* to 'root'@'%';
flush privileges;

扩展

#创建普通用户并授权远程访问
mysql -uroot -p"${mysql_passwd}" -e "create user 'znfxpt'@'%' identified by 'tophn@123';"
mysql -uroot -p"${mysql_passwd}" -e "grant all privileges on znfxpt_test.* to 'znfxpt'@'%' with grant option;"
mysql -uroot -p"${mysql_passwd}" -e "flush privileges;"
#修改密码
mysql -uroot -p"${mysql_passwd}" -e "alter user 'znfxpt'@'%' identified with mysql_native_password by 'tophn@123';"
mysql -uroot -p"${mysql_passwd}" -e "flush privileges;"
#创建只读用户
mysql -uroot -p"${mysql_passwd}" -e "create user 'query_user'@'%' identified by 'tophn@123';"
mysql -uroot -p"${mysql_passwd}" -e "grant select on 'znfxpt'.* to query_user@'%';
mysql -uroot -p"${mysql_passwd}" -e "flush privileges;"

停止数据库

用修改后的密码重新登录数据库

mysql -uroot -p -S /data/mysql/run/mysql.sock
或
/usr/local/mysql/bin/mysql -uroot -p -S /data/mysql/run/mysql.sock

关闭数据库

service mysql stop
或
mysqladmin -uroot -p123456 shutdown

--查看数据库进程
ps -ef | grep mysql

参考链接:

介绍-安装指南-MySQL-开源使能-鲲鹏BoostKit数据库使能套件开发文档-鲲鹏社区 (hikunpeng.com)

介绍-移植指南-MySQL-开源使能-鲲鹏BoostKit数据库使能套件开发文档-鲲鹏社区 (hikunpeng.com)

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论