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处理器 |
硬盘 |
|
操作系统要求
查看环境操作系统的信息:cat /etc/*-release
查看环境处理器相关信息:lscpu
查看环境内核版本:uname -r
查看环境信息:uname -a
查看glib版本:ldd --version
查看gcc版本:gcc -v 或 cat /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进行磁盘管理
--查看磁盘
ls /dev/nvme*
--格式化磁盘
mkfs.xfs -f /dev/nvme0n1
du -sh /dev/nvme0n1
--创建数据目录
mkdir /data
--挂载磁盘到数据目录。
mount /dev/nvme0n1 /data/
df -h方法二:使用fdisk进行磁盘管理
- 创建分区(以/dev/vdb为例,根据实际情况创建)。
fdisk /dev/nvme0n1- 输入字母“p”打印分区表,按“Enter”可以打印出当前的分区。
- 输入字母“n”添加一个新的分区,按“Enter”确认。
- 输入字母“p”选择创建一个主分区,按“Enter”确认。
- 输入数字“1”(作为第一块主分区)创建新的分区,按“Enter”确认。
- 设置选择分区start值,采用默认配置,按“Enter”确认。
- 设置选择分区end值,采用默认配置,按“Enter”确认。
- 输入字母“p”查看最新分区表,按“Enter”可以打印出当前的分区。
- 输入“w”将最新分区表保存至磁盘中,按“Enter”保存。
- 针对新创建的分区创建文件系统(以xfs为例,根据实际需求创建文件系统)。
ls /dev/nvme*
mkfs.xfs -f /dev/nvme0n1p111.挂载分区到“/data”以供操作系统使用。
mkdir /data
mount /dev/nvme0n1p1 /data12.编辑“/etc/fstab”使重启后自动挂载数据盘。
a. 打开“/etc/fstab”。
vim /etc/fstabb.按“i”进入编辑模式,如下图中,添加最后一行内容。
/dev/nvme0n1p1 /data xfs defaults 1 2c.按“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源
- 使用curl命令访问任意网站,若能显示网站信息则表示代理配置成功,可以访问外网。
- 查看Yum源,如果存在外网Yum源(存在后缀为.repo的文件),则直接执行7。
ls /etc/yum.repos.d/- 备份Yum源至bak目录。
cd /etc/yum.repos.d
mkdir bak
mv *.repo bak- 打开文件。
vi /etc/yum.repos.d/openEuler.repo- 按“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- 按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。
- 使Yum源生效。
yum clean all
yum makecache
yum list配置本地Yum源
下载OS镜像文件
操作系统所有版本镜像下载入口:openEuler下载 | openEuler ISO镜像 | openEuler社区官网
openEuler 22.03 LTS 镜像下载地址:
- openEuler 22.03 LTS 镜像:https://mirrors.tuna.tsinghua.edu.cn/openeuler/openEuler-22.03-LTS/ISO/aarch64/openEuler-22.03-LTS-everything-aarch64-dvd.iso
挂载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镜像文件。
- 打开fstab文件。
vim /etc/fstab- 按“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- 按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。
方法2:使用浏览器登录BMC,通过KVM加载OS镜像文件
- 查看OS镜像对应的设备符号。ls /dev/sr*
- 将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)




