银河麒麟arm架构服务器采用源码编译安装mysql数据库

艺帆风顺 发布于 2025-04-03 22 次阅读


参考文章

https://blog.csdn.net/baililiushu/article/details/109262794
https://cloud.tencent.com/developer/beta/article/2193032
https://blog.51cto.com/u_6930123/5190766

机器环境:4.19.90-25.4.v2101.ky10.aarch64 (银河麒麟v10 sp2)
数据库版本:mysql-5.7.36

1.查看是否安装mariadb,若是已安装,需要卸载

#要是有,需要卸载
[root@localhost zswl]# rpm -qa|grep mariadb
mariadb-common-10.3.9-11.p01.ky10.aarch64
mariadb-errmessage-10.3.9-11.p01.ky10.aarch64
mariadb-connector-c-3.0.6-7.ky10.aarch64
mariadb-server-10.3.9-11.p01.ky10.aarch64
mariadb-10.3.9-11.p01.ky10.aarch64
#卸载mariadb相关
[root@localhost zswl]# yum remove mariadb
[root@localhost zswl]# rpm -qa|grep mariadb

2.下载源码包,上传解压

wget https://cdn.mysql.com/archives/mysql-5.7/mysql-boost-5.7.36.tar.gz

mysql官方下载地址:https://downloads.mysql.com/archives/community/
如下图,我们要源码编译安装
选择mysql-5.7.36.tar.gz或者mysql-boost-5.7.36.tar.gz(这个MySQL源码包里包含了boost)
如果选择mysql-5.7.36.tar.gz这个源码包,就必须要下载一个boost库包boost_1_59_0.tar(否则预编译时会通不过报错)。

3.yum安装编译所需要的工具和库

[root@localhost mysql-5.7.36]# yum install gcc gcc-c++ cmake ncurses-devel bison openssl-devel rpcgen
kylinsp2 217 kB/s | 3.8 kB 00:00
上次元数据过期检查:0:00:01 前,执行于 2023年01月29日 星期日 13时28分38秒。
软件包 gcc-7.3.0-20190804.35.p02.ky10.aarch64 已安装。
软件包 gcc-c++-7.3.0-20190804.35.p02.ky10.aarch64 已安装。
软件包 cmake-3.16.5-4.p01.ky10.aarch64 已安装。
软件包 ncurses-devel-6.2-1.ky10.aarch64 已安装。
软件包 bison-3.6.4-1.ky10.aarch64 已安装。
软件包 openssl-devel-1:1.1.1f-4.p04.ky10.aarch64 已安装。
未找到匹配的参数: rpcgen
错误:没有任何匹配: rpcgen

rpcgen未安装,单独下载安装

[root@localhost rpcsvc-proto-1.4]# wget https://github.com/thkukuk/rpcsvc-proto/releases/download/v1.4/rpcsvc-proto-1.4.tar.gz
tar xf rpcsvc-proto-1.4.tar.gz
cd rpcsvc-proto-1.4
./configure
make
make install

编译过程

[root@localhost rpcsvc-proto-1.4]# ./configure 
configure: loading site script /usr/share/config.site
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /usr/bin/mkdir -p
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
checking whether make supports nested variables... yes
checking for gcc... gcc
checking whether the C compiler works... yes
checking for C compiler default output file name... a.out
checking for suffix of executables...
checking whether we are cross compiling... no
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ISO C89... none needed
checking for style of include used by make... GNU
checking dependency style of gcc... gcc3
checking how to run the C preprocessor... gcc -E
checking for grep that handles long lines and -e... /usr/bin/grep
checking for egrep... /usr/bin/grep -E
checking for ANSI C header files... yes
checking for sys/types.h... yes
checking for sys/stat.h... yes
checking for stdlib.h... yes
checking for string.h... yes
checking for memory.h... yes
checking for strings.h... yes
checking for inttypes.h... yes
checking for stdint.h... yes
checking for unistd.h... yes
checking minix/config.h usability... no
checking minix/config.h presence... no
checking for minix/config.h... no
checking whether it is safe to define __EXTENSIONS__... yes
checking whether gcc and cc understand -c and -o together... yes
checking how to run the C preprocessor... gcc -E
checking for library containing strerror... none required
checking whether make sets $(MAKE)... (cached) yes
checking that generated files are newer than configure... done
configure: creating ./config.status
config.status: creating Makefile
config.status: creating rpcgen/Makefile
config.status: creating rpcsvc/Makefile
config.status: creating config.h
config.status: executing depfiles commands
[root@localhost rpcsvc-proto-1.4]# make
make all-recursive
make[1]: 进入目录“/home/zswl/test/rpcsvc-proto-1.4”
Making all in rpcgen
make[2]: 进入目录“/home/zswl/test/rpcsvc-proto-1.4/rpcgen”
gcc -DHAVE_CONFIG_H -I. -I.. -g -O2 -MT rpc_clntout.o -MD -MP -MF .deps/rpc_clntout.Tpo -c -o rpc_clntout.o rpc_clntout.c
mv -f .deps/rpc_clntout.Tpo .deps/rpc_clntout.Po
gcc -DHAVE_CONFIG_H -I. -I.. -g -O2 -MT rpc_cout.o -MD -MP -MF .deps/rpc_cout.Tpo -c -o rpc_cout.o rpc_cout.c
mv -f .deps/rpc_cout.Tpo .deps/rpc_cout.Po
gcc -DHAVE_CONFIG_H -I. -I.. -g -O2 -MT rpc_hout.o -MD -MP -MF .deps/rpc_hout.Tpo -c -o rpc_hout.o rpc_hout.c
mv -f .deps/rpc_hout.Tpo .deps/rpc_hout.Po
gcc -DHAVE_CONFIG_H -I. -I.. -g -O2 -MT rpc_main.o -MD -MP -MF .deps/rpc_main.Tpo -c -o rpc_main.o rpc_main.c
mv -f .deps/rpc_main.Tpo .deps/rpc_main.Po
gcc -DHAVE_CONFIG_H -I. -I.. -g -O2 -MT rpc_parse.o -MD -MP -MF .deps/rpc_parse.Tpo -c -o rpc_parse.o rpc_parse.c
mv -f .deps/rpc_parse.Tpo .deps/rpc_parse.Po
gcc -DHAVE_CONFIG_H -I. -I.. -g -O2 -MT rpc_sample.o -MD -MP -MF .deps/rpc_sample.Tpo -c -o rpc_sample.o rpc_sample.c
mv -f .deps/rpc_sample.Tpo .deps/rpc_sample.Po
gcc -DHAVE_CONFIG_H -I. -I.. -g -O2 -MT rpc_scan.o -MD -MP -MF .deps/rpc_scan.Tpo -c -o rpc_scan.o rpc_scan.c
mv -f .deps/rpc_scan.Tpo .deps/rpc_scan.Po
gcc -DHAVE_CONFIG_H -I. -I.. -g -O2 -MT rpc_svcout.o -MD -MP -MF .deps/rpc_svcout.Tpo -c -o rpc_svcout.o rpc_svcout.c
mv -f .deps/rpc_svcout.Tpo .deps/rpc_svcout.Po
gcc -DHAVE_CONFIG_H -I. -I.. -g -O2 -MT rpc_tblout.o -MD -MP -MF .deps/rpc_tblout.Tpo -c -o rpc_tblout.o rpc_tblout.c
mv -f .deps/rpc_tblout.Tpo .deps/rpc_tblout.Po
gcc -DHAVE_CONFIG_H -I. -I.. -g -O2 -MT rpc_util.o -MD -MP -MF .deps/rpc_util.Tpo -c -o rpc_util.o rpc_util.c
mv -f .deps/rpc_util.Tpo .deps/rpc_util.Po
gcc -g -O2 -o rpcgen rpc_clntout.o rpc_cout.o rpc_hout.o rpc_main.o rpc_parse.o rpc_sample.o rpc_scan.o rpc_svcout.o rpc_tblout.o rpc_util.o
make[2]: 离开目录“/home/zswl/test/rpcsvc-proto-1.4/rpcgen”
Making all in rpcsvc
make[2]: 进入目录“/home/zswl/test/rpcsvc-proto-1.4/rpcsvc”
../rpcgen/rpcgen -h -o klm_prot.h klm_prot.x
../rpcgen/rpcgen -h -o nlm_prot.h nlm_prot.x
../rpcgen/rpcgen -h -o rstat.h rstat.x
../rpcgen/rpcgen -h -o spray.h spray.x
../rpcgen/rpcgen -h -o bootparam_prot.h bootparam_prot.x
../rpcgen/rpcgen -h -o mount.h mount.x
../rpcgen/rpcgen -h -o rex.h rex.x
../rpcgen/rpcgen -h -o rusers.h rusers.x
../rpcgen/rpcgen -h -o key_prot.h key_prot.x
../rpcgen/rpcgen -h -o nfs_prot.h nfs_prot.x
../rpcgen/rpcgen -h -o rquota.h rquota.x
../rpcgen/rpcgen -h -o sm_inter.h sm_inter.x
make[2]: 离开目录“/home/zswl/test/rpcsvc-proto-1.4/rpcsvc”
make[2]: 进入目录“/home/zswl/test/rpcsvc-proto-1.4”
make[2]: 离开目录“/home/zswl/test/rpcsvc-proto-1.4”
make[1]: 离开目录“/home/zswl/test/rpcsvc-proto-1.4”
[root@localhost rpcsvc-proto-1.4]# make install
Making install in rpcgen
make[1]: 进入目录“/home/zswl/test/rpcsvc-proto-1.4/rpcgen”
make[2]: 进入目录“/home/zswl/test/rpcsvc-proto-1.4/rpcgen”
/usr/bin/mkdir -p '/usr/bin'
/usr/bin/install -c rpcgen '/usr/bin'
/usr/bin/mkdir -p '/usr/share/man/man1'
/usr/bin/install -c -m 644 rpcgen.1 '/usr/share/man/man1'
make[2]: 离开目录“/home/zswl/test/rpcsvc-proto-1.4/rpcgen”
make[1]: 离开目录“/home/zswl/test/rpcsvc-proto-1.4/rpcgen”
Making install in rpcsvc
make[1]: 进入目录“/home/zswl/test/rpcsvc-proto-1.4/rpcsvc”
make[2]: 进入目录“/home/zswl/test/rpcsvc-proto-1.4/rpcsvc”
make[2]: 对“install-exec-am”无需做任何事。
/usr/bin/mkdir -p '/usr/include/rpcsvc'
/usr/bin/install -c -m 644 klm_prot.h nlm_prot.h rstat.h spray.h bootparam_prot.h mount.h rex.h rusers.h key_prot.h nfs_prot.h rquota.h sm_inter.h '/usr/include/rpcsvc'
/usr/bin/mkdir -p '/usr/include/rpcsvc'
/usr/bin/install -c -m 644 klm_prot.x nlm_prot.x rstat.x spray.x bootparam_prot.x mount.x rex.x rusers.x key_prot.x nfs_prot.x rquota.x sm_inter.x '/usr/include/rpcsvc'
make[2]: 离开目录“/home/zswl/test/rpcsvc-proto-1.4/rpcsvc”
make[1]: 离开目录“/home/zswl/test/rpcsvc-proto-1.4/rpcsvc”
make[1]: 进入目录“/home/zswl/test/rpcsvc-proto-1.4”
make[2]: 进入目录“/home/zswl/test/rpcsvc-proto-1.4”
make[2]: 对“install-exec-am”无需做任何事。
make[2]: 对“install-data-am”无需做任何事。
make[2]: 离开目录“/home/zswl/test/rpcsvc-proto-1.4”
make[1]: 离开目录“/home/zswl/test/rpcsvc-proto-1.4”

4.创建用户及数据库目录

用户创建
useradd -r -s /sbin/nologin mysql
#useradd -r -s /sbin/nologin -d /data/mysql mysql #-r创建一个系统账号,-s /sbin/nologin改用户不能登录,-d家目录
目录创建
mkdir /data/mysql3306/{binlogs,dbfiles,logs,relays} -p
mkdir -p /data/db_backup
chown mysql.mysql -R /data/mysql3306/
chown mysql.mysql -R /data/db_backup/

5.编译安装

#预编译
cd /home/zswl/mysql-5.7.36
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql-5.7.36/ -DDOWNLOAD_BOOST=1 -DWITH_BOOST=/home/zswl/mysql-5.7.36/boost

等执行完成之后,看到如下内容,表示执行成功。
– Configuring done
– Generating done
– Build files have been written to: /home/zswl/mysql-5.7.36
[root@localhost mysql-5.7.36]#

编译安装
##用make -j带一个参数,可以把项目在进行并行编译,比如在一台双核的机器上,完全可以用make -j4,让make最多允许4个编译命令同时执行,这样可以更有效的利用CPU资源
[root@localhost mysql-5.7.36]# make -j 4 && make install

#等待漫长的执行,这个时间有点长,要看Linux的硬件配置和网络情况,一直要等到执行完成。
#如果上述预编译和编译操作过程中未出现错误(每个步骤结束后,都可以使用echo $?看返回值是否为0,为0则表示正确)

[root@localhost mysql-5.7.36]# echo $?
0
[root@localhost mysql-5.7.36]#

编译报错需要再次编译时执行下面命令

 ##make clean 清除上次的make命令所产生的object文件(后缀为“.o”的文件)及可执行文件
make clean
## 删除缓存文件CMakeCache.txt
rm CMakeCache.txt

(扩展)

cd /home/zswl/mysql-5.7.36
#编译
cmake .
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql
-DMYSQL_DATADIR=/data/mysql3306/dbfiles
-DSYSCONFDIR=/etc/
-DMYSQL_USER=mysql
-DWITH_INNOBASE_STORAGE_ENGINE=1
-DWITH_ARCHIVE_STORAGE_ENGINE=1
-DWITH_BLACKHOLE_STORAGE_ENGINE=1
-DWITH_PARTITION_STORAGE_ENGINE=1
-DWITHOUT_MROONGA_STORAGE_ENGINE=1
-DWITH_DEBUG=0
-DWITH_READLINE=1
-DWITH_SSL=system
-DWITH_ZLIB=system
-DWITH_LIBWRAP=0
-DENABLED_LOCAL_INFILE=1
-DMYSQL_UNIX_ADDR=/data/mysql3306/mysql.sock
-DDEFAULT_CHARSET=utf8
-DDEFAULT_COLLATION=utf8_general_ci
-DWITH_BOOST=/home/zswl/mysql-5.7.36/boost

#cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/data/mysql3306/dbfiles -DSYSCONFDIR=/etc -DDOWNLOAD_BOOST=1 -DWITH_BOOST=/home/zswl/mysql-5.7.42/boost -DWITHOUT_PARTITION_STORAGE_ENGINE=0

6.配置/etc.my.cnf文件

#MySQL_version = 5.7.36
[client]
socket=/data/mysql3306/mysql.sock

[mysqld]
port = 3306
user = mysql
basedir = /usr/local/mysql
datadir = /data/mysql3306/dbfiles
tmpdir=/data/mysql3306
socket = /data/mysql3306/mysql.sock
pid-file=/data/mysql3306/mysql.pid
secure-file-priv=''
default_authentication_plugin = mysql_native_password

lower_case_table_names=1
relay_log_purge=1

server-id = 13
transaction_isolation = READ-COMMITTED
autocommit = 1
character_set_server=utf8mb4
max_connections = 4000
max_connect_errors = 1844674407370954751
connect_timeout = 10
lock_wait_timeout=86400
thread_cache_size=256
#sql_mode = "NO_ENGINE_SUBSTITUTION,ERROR_FOR_DIVISION_BY_ZERO"
sql_mode = "NO_ENGINE_SUBSTITUTION,NO_AUTO_CREATE_USER"


join_buffer_size = 4M
read_buffer_size = 2M
read_rnd_buffer_size = 8M
max_allowed_packet = 256M
sort_buffer_size = 16M

########basic settings########
#skip-grant-tables
#secure_file_priv = /data/mysql3306/
skip_name_resolve = 1
explicit_defaults_for_timestamp = 1
tmp_table_size = 67108864
#interactive_timeout = 1800
#wait_timeout = 1800


########log settings########
log_error = /data/mysql3306/logs/mysql_err.log
log_timestamps = system
slow_query_log = 1
slow_query_log_file = /data/mysql3306/logs/slow.log
log_queries_not_using_indexes = 1
log_slow_admin_statements = 1
log_slow_slave_statements = 1
log_throttle_queries_not_using_indexes = 10
general_log_file = /data/mysql3306/logs/general.log
expire_logs_days = 8
long_query_time = 1
min_examined_row_limit = 100


########replication settings########
master_info_repository = TABLE
relay_log_info_repository = TABLE
log_bin = /data/mysql3306/binlogs/mysql-bin
sync_binlog = 0
gtid_mode = on
enforce_gtid_consistency = 1
log_slave_updates=1
binlog_format = row
relay_log = /data/mysql3306/relays/relay.log
relay_log_recovery = 1


########innodb settings########
innodb_page_size = 16384
innodb_buffer_pool_size = 8G
innodb_buffer_pool_instances = 8
innodb_lock_wait_timeout = 50
innodb_rollback_on_timeout = ON
innodb_buffer_pool_load_at_startup = 1
innodb_buffer_pool_dump_at_shutdown = 1
innodb_lru_scan_depth = 256
innodb_io_capacity = 200
innodb_io_capacity_max = 800
innodb_flush_method = O_DIRECT
innodb_log_group_home_dir = /data/mysql3306/dbfiles
innodb_undo_directory = /data/mysql3306/dbfiles
innodb_undo_logs = 128
innodb_undo_tablespaces = 3
innodb_flush_neighbors = 1
innodb_log_file_size = 1G
innodb_log_files_in_group = 3
innodb_log_buffer_size = 8M
innodb_purge_threads = 4
innodb_thread_concurrency = 64
innodb_print_all_deadlocks = 1

table_open_cache = 4096
open_files_limit = 8192

[mysqld-5.7]
innodb_buffer_pool_dump_pct = 40
innodb_page_cleaners = 8
innodb_undo_log_truncate = 1
innodb_max_undo_log_size = 2G
innodb_purge_rseg_truncate_frequency = 128
binlog_gtid_simple_recovery=1

7.初始化数据库

/usr/local/mysql-5.7.36/bin/mysqld --initialize-insecure --init-file=/opt/init.sql --user=root --basedir=/usr/local/mysql-5.7.36 --datadir=/data/mysql3306/dbfiles
/usr/local/mysql-5.7.36/bin/mysqld --initialize --init-file=/opt/init.sql --user=root --basedir=/usr/local/mysql-5.7.36 --datadir=/data/mysql3306/dbfiles
/usr/local/mysql-5.7.36/bin/mysqld --initialize --user=root --basedir=/usr/local/mysql-5.7.36 --datadir=/data/mysql3306/dbfiles
#--initialize #生成随机的初始root密码

#--initialize-insecure #不会生成root密码,登录连接后,使用ALTER USER语句分配新的root密码。

可以不指定–init-file=/opt/init.sql 会生成一个随机密码,随后修改密码;

#init.sql
alter user root@'localhost' identified by '密码';
flush privileges;

8.配置启动脚本,并启动服务

/etc/systemd/system/mysqld.service

[Unit]

Description=mysql
After=network-online.target

[Service]
Type=forking
ExecStart=/usr/local/mysql-5.7.36/support-files/mysql.server start
ExecStop=/usr/local/mysql-5.7.36/support-files/mysql.server stop
ExecReload=/usr/local/mysql-5.7.36/support-files/mysql.server restart
User=mysql
Group=mysql
Restart=always
RestartSec=5
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
Delegate=yes
KillMode=process

[Install]
WantedBy=multi-user.target
[root@localhost system]# systemctl daemon-reload #重新加载
[root@localhost system]# systemctl start mysqld
[root@localhost system]# systemctl status mysqld
● mysqld.service - mysql
Loaded: loaded (/etc/systemd/system/mysqld.service; disabled; vendor preset: disabled)
Active: active (running) since Tue 2023-05-16 10:11:26 CST; 1min 14s ago
Process: 19787 ExecStart=/usr/local/mysql-5.7.36/support-files/mysql.server start (code=exited, status=0/SUCCESS)
Main PID: 19803 (mysqld_safe)
Tasks: 35
Memory: 876.1M
CGroup: /system.slice/mysqld.service
├─19803 /bin/sh /usr/local/mysql-5.7.36/bin/mysqld_safe --datadir=/data/mysql3306/dbfiles --pid-file=/data/m>
└─20906 /usr/local/mysql-5.7.36/bin/mysqld --basedir=/usr/local/mysql-5.7.36 --datadir=/data/mysql3306/dbfil>
5月 16 10:10:19 localhost.localdomain systemd[1]: Starting mysql...
5月 16 10:11:26 localhost.localdomain systemd[1]: Started mysql.
[root@localhost system]#
  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

  • 11

  • 12

  • 13

  • 14

  • 15

  • 16

9.登录数据库

初始化时设置了账号密码。

[root@localhost system]# /usr/local/mysql-5.7.36/bin/mysql -uroot -p密码
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 2
Server version: 5.7.36-log Source distribution

Copyright (c) 2000, 2021, Oracle and/or its affiliates.

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>
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| zhzx_henanzx |
| zhzx_sjzx |
+--------------------+
6 rows in set (0.05 sec)

mysql> select version();
+------------+
| version() |
+------------+
| 5.7.36-log |
+------------+
1 row in set (0.00 sec)

mysql>

安装过程中出现的问题

Package 'libtirpc', required by 'virtual:world', not found
CMake Error at cmake/rpc.cmake:76 (MESSAGE):
Could not find rpc/rpc.h in /usr/include or /usr/include/tirpc
Call Stack (most recent call first):
rapid/plugin/group_replication/configure.cmake:60 (MYSQL_CHECK_RPC)
rapid/plugin/group_replication/CMakeLists.txt:25 (INCLUDE)
-- Configuring incomplete, errors occurred!
解决办法:
yum install -y libtirpc-devel

    版权声明:本文内容来自CSDN:别动我米饭,遵循CC 4.0 BY-SA版权协议上原文接及本声明。本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行可。原文链接:https://blog.csdn.net/qq_39346632/article/details/130746887如有涉及到侵权,请联系,将立即予以删除处理。在此特别鸣谢原作者的创作。此篇文章的所有版权归原作者所有,与本公众号无关,商业转载建议请联系原作者,非商业转载请注明出处。