最近做一个银行的项目,银行的服务器是鲲鹏ARM架构的服务器,并且是麒麟v10的系统,这里记录一下在无法访问外网安装mysql8.3的方法。8.2版本我也测试了,也是没问题的。
其他文章:
鲲鹏服务器麒麟Lylin v10安装Node和NVM(离线)-CSDN博客
鲲鹏 ARM 架构 麒麟Lylin v10 安装 Nginx (离线)-CSDN博客
鲲鹏 ARM 架构 麒麟 Lylin v10 安装 Pm2 (离线)-CSDN博客
鲲鹏 ARM 架构 麒麟 Lylin v10 安装 PHP 和 adminer (离线)-CSDN博客
1. 前置操作
# 查看linux 内核
cat /proc/version
# 查看麒麟系统信息
cat /etc/kylin-release 或 cat /etc/os-release
# 查看系统的glibc版本,如果系统glibc版本较低,运行依赖于更高glibc版本的MySQL可能会遇到兼容性问题。
ldd --version
# 删除已安装的所有与 "mariadb" 相关的RPM软件包
# 1. 查询系统上已安装的所有MariaDB软件包
rpm -qa | grep mariadb
# 2. 卸载所有与 "mariadb" 相关的RPM软件包
rpm -e --nodeps mariadb-connector-c-3.0.6-6.ky10.aarch64
# 3. 删除系统上已安装过的MySQL软件包
rpm -qa | grep mysql
rpm -e --nodeps mysql-libs-5.1.73-8.el6_8.x86_64
2. 下载 MySQL 8.3 ARM架构版本的安装包 或者 MySQL 8.2 ARM架构版本的安装包
# 8.3的地址:https://dev.mysql.com/downloads/mysql/
# 8.2的地址:https://downloads.mysql.com/archives/community/
# Operating System: 选择 Linux - Generic,也就是linux的通用版本
# OS Version: 选择glibc 2.17 ARM 64-bit
# 8.3 下载文件:mysql-8.3.0-linux-glibc2.17-aarch64.tar.xz 到本地。
# 8.2 下载文件:mysql-8.2.0-linux-glibc2.17-aarch64.tar.xz 到本地。
3. 进入系统切换到root用户
su
4. 创建 MySQL 安装目录
mkdir /usr/local/mysql
5. 解压安装包到创建的目录
tar -xvf mysql-8.3.0-linux-glibc2.17-aarch64.tar.xz -C /usr/local/mysql --strip-components=1
# 这个命令将 mysql-8.3.0-linux-glibc2.17-aarch64.tar.xz 文件解压到 /usr/local/mysql 目录中。
# --strip-components=1 选项会移除每个文件路径中的第一级目录。
# 这意味着如果压缩包内的文件结构是 mysql-8.3.0-linux-glibc2.17-aarch64/...,
# 解压后这一级目录会被去掉,文件和目录会直接放在 /usr/local/mysql 下。
6. 创建 MySQL 用户和用户组
groupadd mysql
# 这个命令创建了一个新的系统用户组 mysql,用于运行MySQL服务。
# 这个用户组是一个系统用户组,用于管理MySQL服务的权限。
# 在Linux系统中,用户组是一种将用户组织在一起的方式,可以用于控制用户对文件和目录的访问权限。
# 在这里,我们创建了一个新的用户组 mysql,用于管理MySQL服务的权限。
useradd -r -g mysql -s /bin/false mysql
# 这个命令创建了一个新的系统用户 mysql,用于运行MySQL服务。这个用户是一个系统账户,不允许登录系统,这是一个安全措施,因为MySQL服务不需要交互式登录。
# -r 选项表示创建一个系统账户,通常用于运行守护进程或服务的用户,而不是登录系统的用户。
# -g mysql 选项指定新用户的初始登录组为 mysql。
# -s /bin/false 选项设置用户的登录shell为 /bin/false,这意味着用户不能登录系统。这是一种安全措施,用于服务账户,因为它们不应该有交互式登录的能力。
# 为了让 MySQL 服务以 mysql 用户的身份运行,我们需要创建一个系统用户 mysql,并且将 MySQL 安装目录的所有权赋予这个用户。
7. 更改目录权限
cd /usr/local/mysql
mkdir data log
chown -R mysql:mysql /usr/local/mysql
chmod -R 755 /usr/local/mysql
8. 创建 MySQL 配置文件
cat > /etc/my.cnf <<EOF
[mysqld]
# 指定MySQL服务运行时使用的用户。出于安全考虑,推荐非root用户运行MySQL服务。
user=mysql
port=3090
# 指定MySQL的基本安装目录
basedir=/usr/local/mysql
# 指定MySQL数据文件存储的目录。
datadir=/usr/local/mysql/data
# 指定MySQL错误日志文件存储的目录。
log-error=/usr/local/mysql/log/mysql-err.log
# 指定MySQL的socket文件位置。Socket文件用于本地连接,而不是通过网络连接。
socket=/usr/local/mysql/data/mysql.sock
# 指定MySQL的PID文件位置。PID文件用于存储MySQL服务的进程ID。
pid-file=/usr/local/mysql/data/mysql.pid
# Node.js 项目推荐的配置
# 指定MySQL服务的默认认证插件。这个设置决定了MySQL如何验证用户的身份。在MySQL 8.0中,推荐使用mysql_native_password插件。
default_authentication_plugin=mysql_native_password
# 指定服务器的默认字符集。utf8mb4是完全支持Unicode的字符集,可以存储任何Unicode字符。
character-set-server=utf8mb4
# 指定服务器的默认排序规则。utf8mb4_unicode_ci是utf8mb4字符集的默认排序规则,它支持Unicode排序规则。
collation-server=utf8mb4_unicode_ci
# 高级设置
# 这个设置决定了表名的大小写敏感性。在Linux上,0 表示区分大小写,1 表示不区分大小写。如果您的应用程序在Windows上开发(不区分大小写),但在Linux上部署,设置为 1 可以避免因大小写问题导致的错误。
lower_case_table_names = 1
# 这个设置定义了MySQL应该支持的SQL语法、数据校验等。这里列出的模式使MySQL在处理事务表时更加严格,并且在除以零时产生错误,不允许使用已弃用的存储引擎
sql_mode = STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
# 当设置为 1 时,InnoDB存储引擎对某些条件更加严格,比如创建索引和表的时候。设置为 0 可以放宽这些条件,但可能会隐藏一些问题。
innodb_strict_mode=1
# 这个设置决定了InnoDB的日志文件大小,较大的日志文件可以提高性能,特别是在处理大量事务时。
innodb_log_file_size = 512M
# 当启用二进制日志时,这个设置允许创建存储函数而不需要显式地为它们设置 SUPER 权限。这可以降低安全风险。
log_bin_trust_function_creators=1
# 这个设置决定了在MySQL开始拒绝连接请求之前,可以在队列中积累多少未处理的连接。
back_log = 600
# MySQL能够同时处理的最大连接数。这个值设置得较高,以支持更多并发连接,但也要考虑到增加并发连接会相应增加内存和CPU的使用。
max_connections = 1000
# 在MySQL暂时拒绝某个主机连接之前,该主机可以有的最大连接错误次数。这个值设置得较高,可以在网络不稳定时避免误封合法用户。
max_connect_errors = 6000
# mysqld进程可以打开的文件描述符的最大数量。这个值设置得较高,以支持大量的文件操作,如打开表或日志文件。
open_files_limit = 65535
# 服务器层面可以打开的表的数量。这个值设置得较高,可以提高处理大量表请求的能力。
table_open_cache = 2000
# 允许通过网络发送或接收的最大数据包大小。这个值设置得较大,以支持大型的SQL语句或数据行。
max_allowed_packet = 64M
# 用于存储二进制日志缓存的内存量。这个值设置得较大,可以在事务提交到二进制日志之前缓存更多的事务数据。
binlog_cache_size = 32M
# 内存临时表的最大大小,可以提高内存表操作的性能。如果临时表超过这个大小,它们将被转移到磁盘上,这会减慢查询速度。
max_heap_table_size = 32M
# 内部临时表的最大大小。这个值设置得较大,以便在执行复杂查询(如排序、分组)时,减少将临时表写入磁盘的情况。
tmp_table_size = 64M
# 这个设置指定了MySQL数据库的默认存储引擎。InnoDB是MySQL的默认存储引擎,它提供了事务支持、行级锁定和外键约束等特性。这是一个重要的配置,特别是对于需要这些特性的应用程序。
default-storage-engine = InnoDB
[client]
# 这个设置指定了客户端和服务器通信时使用的socket文件的位置。如果您在服务器上使用了非默认的socket文件位置,那么客户端配置中也需要指定相同的路径,以便客户端能够正确地连接到服务器。
socket=/usr/local/mysql/data/mysql.sock
EOF
9. 初始化 MySQL
cd /usr/local/mysql
bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
10. 获取临时密码
tail -1000f log/mysql-err.log
11. 创建软链接
ln -s /usr/local/mysql/bin/mysql /usr/bin
12. 设置环境变量(可选)
echo 'export PATH=/usr/local/mysql/bin:$PATH' >> /etc/profile
source /etc/profile
# 这个命令将 /usr/local/mysql/bin 目录添加到系统的环境变量 PATH 中。
# 通过修改 /etc/profile 文件,这个变化会影响到所有用户的所有shell会话。
# 当你在命令行输入一个命令时,系统会在 PATH 环境变量指定的目录中查找可执行文件。
# 这意味着,添加之后,你可以在任何位置运行MySQL的可执行文件,而不需要指定完整路径。
13. 安装 MySQL 系统服务
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
# 这个命令将MySQL的启动脚本复制到/etc/init.d/目录下,并命名为mysqld。
# 这是一个初始化(init)脚本,用于在系统启动时自动启动MySQL服务,或者让用户手动启动/停止服务。
chmod +x /etc/init.d/mysqld
# 这个命令会给mysqld脚本添加执行权限,这是必要的,因为这个脚本需要有执行权限才能被系统作为服务启动和停止。
# 如果没有执行权限,系统管理员或者服务管理工具将无法启动或停止MySQL服务。
14. 启动服务
./bin/mysqld_safe &
# 这个命令运行mysqld_safe脚本来安全地启动MySQL服务器,并且&符号表示在后台运行。mysqld_safe是一个脚本,它帮助启动mysqld(MySQL服务器)并在服务器遇到错误时重启它。
# 如果用了上面的,以下这个就不需要用:
service mysqld start
# 这个命令是通过系统的服务管理工具(如 service 或 systemctl)来启动MySQL服务。
# 它需要MySQL已经被设置为系统服务,通常是在 /etc/init.d/ 或者系统的 systemd 配置中。
# 使用这个命令,MySQL服务会在系统启动时自动启动,并且可以通过相同的服务管理工具来停止、重启或查看服务状态。
# 这是在生产环境中推荐的启动方式,因为它提供了更好的服务管理和自动化支持。
15. 登录 MySQL
bin/mysql -u root -p'qpTM45GEWj!a' --port=3090
# 这个命令会连接到MySQL服务器,并以root用户身份登录。
# 注意,这个命令需要MySQL服务器正在运行,并且root用户的密码是qpTM45GEWj!a。
16. 修改root密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'Admin123';
FLUSH PRIVILEGES;
# 刷新权限
17. 创建新用户bank
CREATE USER 'bank'@'localhost' IDENTIFIED BY 'Admin123';
GRANT ALL PRIVILEGES ON *.* TO 'bank'@'localhost' WITH GRANT OPTION;
# WITH GRANT OPTION 允许 bank 用户将其所拥有的权限授予其他用户。
# 没有这个选项的话,bank 用户可以使用其权限,但不能将它们授予给其他用户。
# *.* 用来表示所有数据库的所有表。
FLUSH PRIVILEGES;
18. 查询用户
select user,host from mysql.user;
19. 修改允许远程连接
update mysql.user set host = '%' where user = 'root';
# update mysql.user:指定要更新的表是 mysql 数据库中的 user 表。
# set host = '%':将 host 字段的值设置为 '%'。
# 在MySQL中,host 字段定义了用户可以从哪些主机连接到数据库服务器。'%' 是一个通配符,表示用户可以从任何主机连接。
# where user = 'root':这个条件指定只更新用户名为 root 的记录。
FLUSH PRIVILEGES;
20. 创建一个测试数据库
CREATE DATABASE `test`;
SHOW DATABASES;
use test;
create table tb_mobile( mobile VARCHAR(20) comment'手机号码', time timestamp DEFAULT now() comment'时间' );
show tables;
21. 退出mysql
quit
22. 设置开机自启
chkconfig --add mysqld
chkconfig mysqld on
systemctl daemon-reload
systemctl restart mysqld
# 这个命令将 MySQL 服务添加到系统的服务管理工具中,并且设置 MySQL 服务在系统启动时自动启动。
# 这样,MySQL 服务会在系统启动时自动启动,并且可以通过服务管理工具来停止、重启或查看服务状态。
# 这是在生产环境中推荐的启动方式,因为它提供了更好的服务管理和自动化支持。
# 如果你使用的是 systemd,你可能需要运行 systemctl daemon-reload 来重新加载服务配置。
# 最后,你可以通过 systemctl restart mysqld 来重启 MySQL 服务,以确保所有配置都生效。
23. 验证mysql服务是否正在运行
service mysqld status
# 这个命令会显示 MySQL 服务的状态信息,包括是否正在运行以及其他相关信息。
# 如果你看到的是 Active: active (running) 状态,那么说明 MySQL 服务正在运行。
24. 安全配置
cd /usr/local/mysql/
bin/mysql_secure_installation
# 然后选项为:no no Y No No Y
25. 测试连接
mysql -u root -pAdmin123 -h localhost -P 3090
mysql -u bank -pAdmin123 -h localhost -P 3090