Step By Step

耀出千分光


  • 首页

  • 归档

CentOS 7.6 安装 MySQL 8

发表于 2020-12-16

CentOS7 安装 MySQL

从官网下载 rpm 包

​ 从 https://dev.mysql.com/downloads/repo/yum/ 下载对应系统版本的 MySQL 安装包,我的系统式 CentOS 7.6,安装 Oracle Linux 7 这条

​ 到下载页面找到名为No thanks,just start my download的链接,复制这个链接的地址,我这里下载到了/tmp/mysql文件夹下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[root@VM-8-9-centos mysql]# wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
--2020-12-16 13:09:42-- https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
Resolving dev.mysql.com (dev.mysql.com)... 137.254.60.11
Connecting to dev.mysql.com (dev.mysql.com)|137.254.60.11|:443... connected.
HTTP request sent, awaiting response... 302 Found
Location: https://repo.mysql.com//mysql80-community-release-el7-3.noarch.rpm [following]
--2020-12-16 13:09:46-- https://repo.mysql.com//mysql80-community-release-el7-3.noarch.rpm
Resolving repo.mysql.com (repo.mysql.com)... 23.205.96.240
Connecting to repo.mysql.com (repo.mysql.com)|23.205.96.240|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 26024 (25K) [application/x-redhat-package-manager]
Saving to: ‘mysql80-community-release-el7-3.noarch.rpm’

100%[======================================================================================================================================>] 26,024 152KB/s in 0.2s

2020-12-16 13:09:47 (152 KB/s) - ‘mysql80-community-release-el7-3.noarch.rpm’ saved [26024/26024]

安装

​ 使用yum install命令安装

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
33
34
35
36
37
38
39
40
41
[root@VM-8-9-centos mysql]# yum -y install mysql80-community-release-el7-3.noarch.rpm 
Loaded plugins: fastestmirror, langpacks
Examining mysql80-community-release-el7-3.noarch.rpm: mysql80-community-release-el7-3.noarch
Marking mysql80-community-release-el7-3.noarch.rpm to be installed
Resolving Dependencies
--> Running transaction check
---> Package mysql80-community-release.noarch 0:el7-3 will be installed
--> Finished Dependency Resolution
epel/7/x86_64 | 4.7 kB 00:00:00
epel/7/x86_64/updateinfo | 1.0 MB 00:00:00
epel/7/x86_64/primary_db | 6.9 MB 00:00:01
extras/7/x86_64 | 2.9 kB 00:00:00
os/7/x86_64 | 3.6 kB 00:00:00
updates/7/x86_64 | 2.9 kB 00:00:00

Dependencies Resolved

================================================================================================================================================================================
Package Arch Version Repository Size
================================================================================================================================================================================
Installing:
mysql80-community-release noarch el7-3 /mysql80-community-release-el7-3.noarch 31 k

Transaction Summary
================================================================================================================================================================================
Install 1 Package

Total size: 31 k
Installed size: 31 k
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Installing : mysql80-community-release-el7-3.noarch 1/1
Verifying : mysql80-community-release-el7-3.noarch 1/1

Installed:
mysql80-community-release.noarch 0:el7-3

Complete!

​ 安装 MySQL 服务器

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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
[root@VM-8-9-centos mysql]# yum -y install mysql-community-server
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
mysql-connectors-community | 2.6 kB 00:00:00
mysql-tools-community | 2.6 kB 00:00:00
mysql80-community | 2.6 kB 00:00:00
(1/3): mysql-tools-community/x86_64/primary_db | 83 kB 00:00:00
(2/3): mysql-connectors-community/x86_64/primary_db | 68 kB 00:00:00
(3/3): mysql80-community/x86_64/primary_db | 128 kB 00:00:01
Resolving Dependencies
--> Running transaction check
---> Package mysql-community-server.x86_64 0:8.0.22-1.el7 will be installed
--> Processing Dependency: mysql-community-common(x86-64) = 8.0.22-1.el7 for package: mysql-community-server-8.0.22-1.el7.x86_64
--> Processing Dependency: mysql-community-client(x86-64) >= 8.0.11 for package: mysql-community-server-8.0.22-1.el7.x86_64
--> Running transaction check
---> Package mysql-community-client.x86_64 0:8.0.22-1.el7 will be installed
--> Processing Dependency: mysql-community-client-plugins = 8.0.22-1.el7 for package: mysql-community-client-8.0.22-1.el7.x86_64
--> Processing Dependency: mysql-community-libs(x86-64) >= 8.0.11 for package: mysql-community-client-8.0.22-1.el7.x86_64
---> Package mysql-community-common.x86_64 0:8.0.22-1.el7 will be installed
--> Running transaction check
---> Package mariadb-libs.x86_64 1:5.5.65-1.el7 will be obsoleted
--> Processing Dependency: libmysqlclient.so.18()(64bit) for package: 2:postfix-2.10.1-9.el7.x86_64
--> Processing Dependency: libmysqlclient.so.18(libmysqlclient_18)(64bit) for package: 2:postfix-2.10.1-9.el7.x86_64
---> Package mysql-community-client-plugins.x86_64 0:8.0.22-1.el7 will be installed
---> Package mysql-community-libs.x86_64 0:8.0.22-1.el7 will be obsoleting
--> Running transaction check
---> Package mysql-community-libs-compat.x86_64 0:8.0.22-1.el7 will be obsoleting
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================================================================================================================
Package Arch Version Repository Size
================================================================================================================================================================================
Installing:
mysql-community-libs x86_64 8.0.22-1.el7 mysql80-community 4.6 M
replacing mariadb-libs.x86_64 1:5.5.65-1.el7
mysql-community-libs-compat x86_64 8.0.22-1.el7 mysql80-community 1.2 M
replacing mariadb-libs.x86_64 1:5.5.65-1.el7
mysql-community-server x86_64 8.0.22-1.el7 mysql80-community 510 M
Installing for dependencies:
mysql-community-client x86_64 8.0.22-1.el7 mysql80-community 48 M
mysql-community-client-plugins x86_64 8.0.22-1.el7 mysql80-community 235 k
mysql-community-common x86_64 8.0.22-1.el7 mysql80-community 616 k

Transaction Summary
================================================================================================================================================================================
Install 3 Packages (+3 Dependent packages)

Total download size: 564 M
Downloading packages:
warning: /var/cache/yum/x86_64/7/mysql80-community/packages/mysql-community-client-plugins-8.0.22-1.el7.x86_64.rpm: Header V3 DSA/SHA1 Signature, key ID 5072e1f5: NOKEY:-- ETA
Public key for mysql-community-client-plugins-8.0.22-1.el7.x86_64.rpm is not installed
(1/6): mysql-community-client-plugins-8.0.22-1.el7.x86_64.rpm | 235 kB 00:00:00
(2/6): mysql-community-common-8.0.22-1.el7.x86_64.rpm | 616 kB 00:00:01
(3/6): mysql-community-libs-8.0.22-1.el7.x86_64.rpm | 4.6 MB 00:00:07
(4/6): mysql-community-libs-compat-8.0.22-1.el7.x86_64.rpm | 1.2 MB 00:00:03
(5/6): mysql-community-client-8.0.22-1.el7.x86_64.rpm | 48 MB 00:03:28
(6/6): mysql-community-server-8.0.22-1.el7.x86_64.rpm 54% [==================================- ] 98 kB/s | 309 MB 00:44:09 ETA 54% [==================================- ] 10(6/6): mysql-community-server-8.0.22-1.el7.x86_64.rpm 54% [==================================- ] 10(6/6): mysql-community-server-8.0.22-1.el7.x86_64.rpm | 510 MB 00:44:40
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Total 214 kB/s | 564 MB 00:44:53
Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
Importing GPG key 0x5072E1F5:
Userid : "MySQL Release Engineering <mysql-build@oss.oracle.com>"
Fingerprint: a4a9 4068 76fc bd3c 4567 70c8 8c71 8d3b 5072 e1f5
Package : mysql80-community-release-el7-3.noarch (@/mysql80-community-release-el7-3.noarch)
From : /etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Installing : mysql-community-common-8.0.22-1.el7.x86_64 1/7
Installing : mysql-community-client-plugins-8.0.22-1.el7.x86_64 2/7
Installing : mysql-community-libs-8.0.22-1.el7.x86_64 3/7
Installing : mysql-community-client-8.0.22-1.el7.x86_64 4/7
Installing : mysql-community-server-8.0.22-1.el7.x86_64 5/7
Installing : mysql-community-libs-compat-8.0.22-1.el7.x86_64 6/7
Erasing : 1:mariadb-libs-5.5.65-1.el7.x86_64 7/7
Verifying : mysql-community-libs-8.0.22-1.el7.x86_64 1/7
Verifying : mysql-community-server-8.0.22-1.el7.x86_64 2/7
Verifying : mysql-community-client-plugins-8.0.22-1.el7.x86_64 3/7
Verifying : mysql-community-common-8.0.22-1.el7.x86_64 4/7
Verifying : mysql-community-client-8.0.22-1.el7.x86_64 5/7
Verifying : mysql-community-libs-compat-8.0.22-1.el7.x86_64 6/7
Verifying : 1:mariadb-libs-5.5.65-1.el7.x86_64 7/7

Installed:
mysql-community-libs.x86_64 0:8.0.22-1.el7 mysql-community-libs-compat.x86_64 0:8.0.22-1.el7 mysql-community-server.x86_64 0:8.0.22-1.el7

Dependency Installed:
mysql-community-client.x86_64 0:8.0.22-1.el7 mysql-community-client-plugins.x86_64 0:8.0.22-1.el7 mysql-community-common.x86_64 0:8.0.22-1.el7

Replaced:
mariadb-libs.x86_64 1:5.5.65-1.el7

Complete!

​ 启动并查看 MySQL 状态

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[root@VM-8-9-centos mysql]# systemctl start mysqld.service
[root@VM-8-9-centos mysql]# systemctl status mysqld.service
● mysqld.service - MySQL Server
Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
Active: active (running) since Wed 2020-12-16 14:59:43 CST; 14s ago
Docs: man:mysqld(8)
http://dev.mysql.com/doc/refman/en/using-systemd.html
Process: 17368 ExecStartPre=/usr/bin/mysqld_pre_systemd (code=exited, status=0/SUCCESS)
Main PID: 17452 (mysqld)
Status: "Server is operational"
CGroup: /system.slice/mysqld.service
└─17452 /usr/sbin/mysqld

Dec 16 14:59:33 VM-8-9-centos systemd[1]: Starting MySQL Server...
Dec 16 14:59:43 VM-8-9-centos systemd[1]: Started MySQL Server.

配置 MySQL

​ 查看初始密码

1
2
[root@VM-8-9-centos mysql]# grep "password" /var/log/mysqld.log 
2020-12-16T06:59:37.568001Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: 6#bsu:lel2Tk

​ 登录 MySQL

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[root@VM-8-9-centos mysql]# mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 8.0.22

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

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>

​ 修改密码

1
2
alter user 'root'@'localhost' identified by '新的密码';
# MySQL 在这里要求修改的密码有一定的安全性,所以需要设置一个难度较大的密码

​ 修改密码规则

1
2
3
4
5
6
7
mysql> set global validate_password_policy=0;
ERROR 1193 (HY000): Unknown system variable 'validate_password_policy'
mysql> set global validate_password.policy=0;
Query OK, 0 rows affected (0.00 sec)

mysql> set global validate_password.length=1;
Query OK, 0 rows affected (0.00 sec)

​ 随后可以重新设置密码

开启远程登录

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
[root@VM-8-9-centos mysql]# mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 15
Server version: 8.0.22 MySQL Community Server - GPL

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

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> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed

mysql> update user set host="%" where Host='localhost' and user = "root";
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0

mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)

​ 如果是云服务器,可能需要在对应的控制台开启3306端口的防火墙权限

使用alibaba-nacos实现分布式系统中的服务中心

发表于 2020-06-03

使用 alibaba-nacos 实现分布式系统中的服务中心

​ 最近在做一个分布式电商系统,使用spring-cloud-alibaba中的nacos作为项目的服务中心,下面简单介绍一下分布式系统、服务中心、以及nacos的使用

什么是分布式

​ 首先我们要清楚分布式的概念:

分布式系统(distributed system)是建立在网络之上的软件系统。正是因为软件的特性,所以分布式系统具有高度的内聚性和透明性。因此,网络和分布式系统之间的区别更多的在于高层软件(特别是操作系统),而不是硬件。 ——百度百科

​ 百度百科的解释看起来十分晦涩,我们可以理解为分布式系统是一种由多个节点构成的系统,节点之间互相连通,可以进行通信,它的优点是具有更高的效率和可靠性,庞大的任务可以被拆分成若干子任务,整个系统也不会因为一个节点的故障而崩溃,当一个节点崩溃时,其他节点仍然可以正常运行

​ 举个简单的例子,假设我们现在有两种服务,一个是用户服务,一个是商品服务,当我们要实现用户买商品时,按照传统思路,所有的用户都需要访问这一个用户服务程序,再访问同一个商品服务程序,当访问量巨大时,会出现效率极低的情况,并且,一旦唯一的用户服务或商品服务掉线,整个系统都会崩溃

​ 如果我们采用分布式系统的设计,将若干个用户服务和若干和商品服务同时部署,再发生上述情况时,服务器的压力会大大减小,并且,若出现服务故障,当前任务进程可以去申请其他节点的服务继续执行,系统崩溃的几率会大大降低

集群

​ 分布式是一种工作方式,集群是一种物理形态

​ 例如京东是一个分布式系统,众多业务运行在不同的机器,所有业务构成一个大型的业务集群,每一个小业务在访问压力大的时候使用一台服务器是不够的,我们就应该将相同的业务部署在多个服务器上,也就是每一个业务都可以做成集群化,而集群中的一个服务器,就称为节点

远程调用

​ 在分布式系统中,各个服务处于不同主机,但是服务之间不可避免的需要相互作用,我们称为远程调用

​ Spring-Cloud中使用HTTP + JSON的方式完成这种远程调用

服务的注册和发现——注册中心

​ 当A服务嗲用B服务时,A服务并不知道系统中当前哪几台服务器在运行B服务,哪些B服务是正常的,哪些是下线的,为了解决这个问题,引入了注册中心

​ 当某些服务上线或者下线,会在在注册中心注册或注销,注册中心会实时感知到这些服务的状态,从而避免调用不可用的服务

​

HashMap——HashMap中如何确定元素的位置

发表于 2020-05-20

HashMap 中如何确定元素的位置

​ 众所周知,在 jdk 1.7 中,HashMap 底层是由数组 + 链表的方式实现的,那我们在使用 HashMap 的时候,是如何将我们的 key-value put 到 HashMap 中的呢

阅读全文 »

Java并发编程——管程(Monitor)

发表于 2020-05-12

管程(Monitor)

​ 管程(Monitor),Java 中被翻译为监视器,管程是它在操作系统层面的名称,所谓管程,即管理共享变量及对其操作过程,让它支持并发访问,在 Java 中可以理解为管理类的成员变量和方法,从而达到线程安全的目的

共享带来的问题

​ 假设此时有两个线程同时对初始值为0的静态变量做相同次数的自增和自减:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public static void main(String[] args) throws InterruptedException {
Thread t1 = new Thread(() -> {
for (int i = 0; i < 5000; ++i) counter++;
}, "t1");

Thread t2 = new Thread(() -> {
for (int i = 0; i < 5000; ++i) counter--;
}, "t2");

t1.start();
t2.start();
t1.join();
t2.join();

log.debug("is {}", counter);
}

​ 按常理,这个加一次减一次,最后的结果应该是0吧,让我们来看看运行结果:

1
2
3
16:01:50 [main] c.Test1 - is -1768

Process finished with exit code 0

​ 显然,这个程序的运行结果不是0,为什么会出现这个问题呢?我们需要从字节码来进行分析

​ 对于i++操作来说,实际上会产生四行字节码指令getstatic i、iconst_1、iadd、putstatic,而在 Java 内存模型中,完成静态变量的自增自减,需要在主存和工作内存中进行数据交换:

1
2
3
4
 					《---》 线程 1 i++
主内存
static int i = 0
《---》 线程 2 i--

​ 由于线程占用 cpu 资源的顺序是随机的,所以i++和i--这两行代码所对应的8行字节码指令,可能会出现交错运行的情况:线程 1 从主存中获取了 i的值为0,还没进行++操作时,线程 2 也取到了i = 0,这时线程 1 和线程 2 分别进行++和--操作后,线程 1 先将i = 1返回给主存,随后线程 2 又将i = -1返回给主存,这时主存中的i值即为-1,在这种情况多次重复运行后,i的值根本无法预测

​ 如何解决在并发情况下的这种问题呢?这时要引入临界区(Critical Section)的概念

临界区(Critical Section)

​ 上述程序中,一个程序运行多个线程本身是没有问题的,问题出现在多个线程同时访问共享资源,而多个线程访问共享资源本身也是没有问题的,问题的根本在于:在多个线程对共享资源进行读写操作时发生了指令交错,而当一段代码块内如果存在对共享资源的多线程读写操作,我们就称这段代码块为临界区

​ 很明显,上一个例子中的临界区即为counter++和counter--这两行代码,多个线程在临界区内执行,由于代码的执行序列不同而导致结果无法预测,称之为发生了竞态条件,为了避免临界区的竞态条件发生,可以使用:

  • 阻塞时解决方案:synchronized、Lock
  • 非阻塞式解决方案:原子变量

## synchronized 解决方案

​ synchronized,即俗称的【对象锁】,它采用互斥的方式让同一时刻至多只有一个线程持有【对象锁】,其他线程再想获取【对象锁】时就会阻塞住,这样就能保证拥有锁的线程可以安全的执行临界区内的代码,不用担心上下文切换

synchronized 用法

​ 【对象锁】在使用时,只需要将临界区代码放在synchronized代码块内即可,即:

1
2
3
4
5
6
7
8
9
static Object room = new Object();
...
synchronized(room) {
conuter++;
}
...
synchronized(room) {
conuter--;
}

​ 这种写法就保证了

面试题——最长上升子串

发表于 2020-05-06

AcWing 1490 最长上升子串

题目

​ 给出一个长度为n的由正整数构成的序列,你需要从中删除一个正整数,很显然你有很多种删除方式,你需要对删除这个正整数以后的序列求其最长上升子串,请问在所有删除方案中,最长的上升子串长度是多少。

​ 这里给出最长上升子串的定义:即对于序列中连续的若干个正整数,满足ai+1 > ai,则称这连续的若干个整数构成的子串为上升子串,在所有的上升子串中,长度最长的称为最长上升子串。

输入格式

输入第一行仅包含一个正整数n,表示给出的序列的长度。

接下来一行有n个正整数,即这个序列,中间用空格隔开。

输出格式

输出仅包含一个正整数,即删除一个数字之后的最长上升子串长度。

数据范围

1 ≤ n ≤ 100000
1 ≤ ai ≤ 100000

输入样例:

1
2
5
2 1 3 2 5

输出样例:

1
3
阅读全文 »

Docker——CentOS7安装Docker环境

发表于 2020-04-09

CentOs 7 安装 Docker

​ Docker 是一个开源的应用容器引擎,是一个轻量级容器技术,Docker 支持将软件编译成一个镜像,然后在镜像中对各种软件做好配置,将镜像发布出去,使用者们都可以直接使用这个镜像、

​ 运行中的这个镜像被称为容器,容器的启动是非常快速的,下面我们就来介绍如何在 CentOS 7 系统中安装 Docker

阅读全文 »

剑指Offer(面试题9-1)——用两个栈实现队列

发表于 2020-04-01

剑指Offer(面试题9-1)

题目

请用栈实现一个队列,支持如下四种操作:

  • push(x) – 将元素x插到队尾;
  • pop() – 将队首的元素弹出,并返回该元素;
  • peek() – 返回队首元素;
  • empty() – 返回队列是否为空;

注意:

  • 你只能使用栈的标准操作:push to top,peek/pop from top, size 和 is empty;
  • 如果你选择的编程语言没有栈的标准库,你可以使用list或者deque等模拟栈的操作;
  • 输入数据保证合法,例如,在队列为空时,不会进行pop或者peek等操作;

样例

1
2
3
4
5
6
7
MyQueue queue = new MyQueue();

queue.push(1);
queue.push(2);
queue.peek(); // returns 1
queue.pop(); // returns 1
queue.empty(); // returns false
阅读全文 »

剑指Offer(面试题8-1)——二叉树的下一个节点

发表于 2020-04-01

剑指Offer(面试题8-1)

题目

给定一棵二叉树的其中一个节点,请找出中序遍历序列的下一个节点。

注意:

  • 如果给定的节点是中序遍历序列的最后一个,则返回空节点;
  • 二叉树一定不为空,且给定的节点一定不是空节点;

样例

1
2
3
4
5
6
7
8
假定二叉树是:[2, 1, 3, null, null, null, null], 给出的是值等于2的节点。

则应返回值等于3的节点。

解释:该二叉树的结构如下,2的后继节点是3。
2
/ \
1 3
阅读全文 »

剑指Offer(面试题6-1)——从尾到头打印链表

发表于 2020-04-01

剑指 Offer 面试题(6-1)

题目

输入一个链表的头结点,按照 从尾到头 的顺序返回节点的值。

返回的结果用数组存储。

样例

1
2
输入:[2, 3, 5]
返回:[5, 3, 2]
阅读全文 »

SpringBoot——SpringBoot自动配置原理(2.2.5版本)

发表于 2020-03-29

SpringBoot 自动配置原理

​ 作为 SpringBoot 的精髓,自动配置是“习惯优于配置”理念的体现,了解 SpringBoot 自动配置的原理也是学习 SpringBoot 过程中不可绕开的重要内容

阅读全文 »
12…8

LiMinghui

斯蒂芬库徽的博客

79 日志
25 标签
RSS
GitHub E-Mail
© 2020 LiMinghui
由 Hexo 强力驱动
|
主题 — NexT.Muse v5.1.4