百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程文章 > 正文

MySQL多实例安装方式 mysql两种安装方式

qiyuwang 2024-10-08 10:33 37 浏览 0 评论

关注我「程序猿集锦」,获取更多分享。

  • 背景
  • 安装5.7版本多实例
    • 准备服务器环境
    • 下载MySQL二进制安装包
    • 创建mysql系统用户
    • 解压MySQL安装包
    • 创建mysql软连接目录
    • 创建MySQL数据库导入导出目录
    • 创建MySQL数据目录
    • 准备MySQL配置文件
    • 配置MySQL环境变量
    • 初始化MySQL数据库
    • 启动MySQL多实例
    • 验证启动的结果
    • mysqld和mysqld_safe启动MySQL的区别
    • 配置MySQL多实例开机自启动
    • 登录MySQL多实例
    • 停止MySQL多实例
  • 安装MySQL8.0版本
    • 下载MySQL8.0二进制安装包
    • 创建8.0版本软连接目录
    • 创建数据库文件目录
    • 修改MySQL的配置文件
    • 初始化数据库
    • 启动MySQL8.0实例
    • 验证启动结果
    • 登录MySQL8.0实例
  • 安装MySQL5.6版本
    • 下载5.6版本的二进制安装包
    • 创建5.6版本的软连接目录
    • 创建数据库文件目录
    • 修改MySQL的配置文件
    • 初始化数据库
    • 启动MySQL5.6实例
    • 验证启动结果
    • 登录MySQL5.6实例
  • 总结

背景

当我们的服务器不多的时候,需要多个MySQL数据库实例共享一台服务器的资源;或者我们有一台配置特别高的服务器时候,如果只在这台服务器上部署一个MySQL数据库实例,实属有点浪费资源。

所以,为了提高硬件资源的利用率,我们可以在一台服务器上面安装部署多个MySQL数据库实例。不同的数据库实例提供不同的项目来使用,或者供不同的环境来使用。

安装5.7版本多实例

MySQL多实例的安装,一般我们采用二进制包来安装。把MySQL数据库软件解压到一个指定的目录,一般都是解压在/usr/local/mysql目录下面。然后定义不同的数据库文件目录,不同的数据库端口,不同的socket文件。然后分别初始化。接下来,我们来演示一下具体的安装配置步骤。

准备服务器环境

我们使用docker来启动一个Ubuntu容器来安装MySQL数据库,启动Ubuntu容器的命令如下:

docker run --hostname edu.mysql --cap-add NET_ADMIN --name ubuntu -itd --privileged=true -v /sys/fs/cgroup:/sys/fs/cgroup:ro -e TZ="Asia/Shanghai" ubuntu:latest

启动后容器后,进入容器内部,然后执行如下命令:

# 进入容器
docker exec -it ubuntu /bin/bash

# 更新系统,安装工具包
apt-get update
apt-get install vim net-tools wget tree -y

下载MySQL二进制安装包

在服务器上面执行如下命令下载安装包:

wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.32-linux-glibc2.12-x86_64.tar.gz

wget命令后面的下载地址获取方式,参考下图:

https://downloads.mysql.com/archives/community/


创建mysql系统用户

创建一个操作系统用户mysql,让其对MySQL数据库用于所有的权限,用这个用户来启动和停止MySQL数据库。

groupadd mysql
useradd -r -g mysql -s /bin/false mysql

解压MySQL安装包

mv ~/mysql-5.7.32-linux-glibc2.12-x86_64.tar.gz /usr/local
cd /usr/local
tar -zxvf mysql-5.7.32-linux-glibc2.12-x86_64.tar.gz

创建mysql软连接目录

在MySQL软件的安装目录/usr/local下,创建一个软连接目录mysql,让其指向我们前面解压出来的MySQL安装文件目录,这样做的目的是为了方便以后对MySQL数据库的升级操作。到时候我们只要替换这个软连接目录就可以完成MySQL数据库的升级。

cd /usr/local
ln -s /usr/local/mysql-5.7.32-linux-glibc2.12-x86_64 mysql

如果对MySQL数据库进行升级操作,可以参考如下操作:

cd /usr/local
# 取消现有的软连接
unlink mysql
# 新建一个软连接,指向最新的MySQL数据库软件目录
ln -s /usr/local/mysql-8.0.1-linux-glibc2.12-x86_64 mysql

创建MySQL数据库导入导出目录

创建MySQL数据库共用的导入导出数据专用的目录,供load data infile等命令使用的目录。这个步骤可选,后续如果用到可以在创建也可以。

cd /usr/local/mysql
mkdir mysql-files
chown mysql:mysql mysql-files
chmod 750 mysql-files

创建MySQL数据目录

创建MySQL数据库文件目录,用于存放MySQL数据库的真实数据。

mkdir -p /data/mysql/3306
mkdir -p /data/mysql/3307
mkdir -p /data/mysql/3308

# 更改文件目录权限给mysql操作系统用户
chown -R mysql:mysql /data

准备MySQL配置文件

在初始化MySQL数据库之前,我们需要准备好MySQL的配置文件/etc/my.cnf,参考如下:

root@edu:/usr/local# cat /etc/my.cnf
# 客户端相关配置
[client]


# 所有实例共用的参数配置
[mysqld]
# 配置数据库默认的字符集编码,推荐配置utf8mb4
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci

# 多实例管理相关配置
[mysqld_multi]
# 定义多实例的MySQL启动的时候使用的脚本
mysqld=/usr/local/mysql/bin/mysqld_safe
# 定义多实例的MySQL关闭的时候使用的脚本
mysqladmin=/usr/local/mysql/bin/mysqladmin
# 日志文件
log=/usr/local/mysql/mysqld_multi.log

# 数据库实例1
[mysqld3306]
server_id=3306
port=3306
datadir=/data/mysql/3306
socket=/tmp/mysqld3306.socket
log_error=mysqld3306_error.log

# 数据库实例2
[mysqld3307]
server_id=3307
port=3307
datadir=/data/mysql/3307
socket=/tmp/mysqld3307.socket
log_error=mysqld3307_error.log

# 数据库实例3
[mysqld3308]
server_id=3308
port=3308
datadir=/data/mysql/3308
socket=/tmp/mysqld3308.socket
log_error=mysqld3308_error.log

root@edu:/usr/local#

文件中定义了3个MySQL数据库实例,他们的端口号分别为3306、3307、3308;他们的数据目录使用他们的端口号命名的,在/data/mysql目录下分布;他们的socket文件在/tmp目录下面,通过端口号可以区分各自的socket文件。

对于所有需要共享的数据库参数,可以配置在[mysqld]标签下,对于各自需要单独定制的参数,可以在格子的[mysqldxxxx]标签下定义,如果一个参数在两个地方都有配置,则下面的参数会覆盖[mysqld]中的参数。以各自定义电参数为准。

配置MySQL环境变量

编辑vim /etc/profile文件,在文件最后,增加如下配置:

export PATH=$PATH:/usr/local/mysql/bin

使配置生效

source /etc/profile

此时,我们就可以在命令行中使用MySQL的bin目录下面的各种命令了,不用每次都指定/usr/local/mysql/bin目录了。

初始化MySQL数据库

初始化第一个MySQL数据库,命令如下,因为当前登录的是root操作系统用户,所以此时需要使用--user指定mysql用户来初始化MySQL数据库,否则初始化的时候会提示错误,不能使用root操作系统用户来初始化MySQL数据库。

mysqld --initialize --user=mysql --datadir=/data/mysql/3306

结果初始化失败,出现如下错误:

root@edu:/usr/local# mysqld --initialize --user=mysql --datadir=/data/mysql/3306
mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory
root@edu:/usr/local#

出现上面的错误是因为缺少库文件,安装库文件如下:

root@edu:/usr/local# apt-get install libaio1 -y

再次尝试初始化,又失败了,结果如下:

root@edu:/usr/local# mysqld --initialize --user=mysql --datadir=/data/mysql/3306
mysqld: error while loading shared libraries: libnuma.so.1: cannot open shared object file: No such file or directory

出现上面的错误是因为缺少库文件,安装库文件如下:

root@edu:/usr/local# apt-get install libnuma1 -y

再次初始化成功了,结果如下,注意输出的日志文件中有一个password,这个是我们登录MySQL数据库的root用户的初始化密码,一定要记录下来。

root@edu:/usr/local# mysqld --initialize --user=mysql --datadir=/data/mysql/3306
2021-04-07T12:01:21.285579Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2021-04-07T12:01:21.483385Z 0 [Warning] InnoDB: New log files created, LSN=45790
2021-04-07T12:01:21.534981Z 0 [Warning] InnoDB: Creating foreign key constraint system tables.
2021-04-07T12:01:21.547457Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: f7f04660-9798-11eb-84eb-0242ac110002.
2021-04-07T12:01:21.549241Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.
2021-04-07T12:01:22.572796Z 0 [Warning] CA certificate ca.pem is self signed.
2021-04-07T12:01:22.759253Z 1 [Note] A temporary password is generated for root@localhost: xhJO55_M>yO1
root@edu:/usr/local#

接着初始化第二个和第三个数据库实例,同样记录输出的初始化密码。

root@edu:/usr/local# mysqld --initialize --user=mysql --datadir=/data/mysql/3307
2021-04-07T12:02:51.329493Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2021-04-07T12:02:51.604085Z 0 [Warning] InnoDB: New log files created, LSN=45790
2021-04-07T12:02:51.657397Z 0 [Warning] InnoDB: Creating foreign key constraint system tables.
2021-04-07T12:02:51.715394Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: 2daecfd1-9799-11eb-86f6-0242ac110002.
2021-04-07T12:02:51.717234Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.
2021-04-07T12:02:52.928231Z 0 [Warning] CA certificate ca.pem is self signed.
2021-04-07T12:02:53.070514Z 1 [Note] A temporary password is generated for root@localhost: 7R>ZzrKh+N!<
root@edu:/usr/local# mysqld --initialize --user=mysql --datadir=/data/mysql/3308
2021-04-07T12:02:59.492543Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2021-04-07T12:02:59.734305Z 0 [Warning] InnoDB: New log files created, LSN=45790
2021-04-07T12:02:59.788646Z 0 [Warning] InnoDB: Creating foreign key constraint system tables.
2021-04-07T12:02:59.851518Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: 32884931-9799-11eb-89ee-0242ac110002.
2021-04-07T12:02:59.853990Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.
2021-04-07T12:03:00.538711Z 0 [Warning] CA certificate ca.pem is self signed.
2021-04-07T12:03:00.689043Z 1 [Note] A temporary password is generated for root@localhost: 9zYfNmFqtN/i
root@edu:/usr/local#

最后初始化的结果如下:

root@edu:/usr/local# tree -d /data
/data
`-- mysql
    |-- 3306
    |   |-- mysql
    |   |-- performance_schema
    |   `-- sys
    |-- 3307
    |   |-- mysql
    |   |-- performance_schema
    |   `-- sys
    `-- 3308
        |-- mysql
        |-- performance_schema
        `-- sys

13 directories
root@edu:/usr/local#

注意:上述的MySQL数据目录下面并没有information_schema文件夹目录,是因为information_schema这个schema是一个特殊的schema,他是基于内存而生成的一个数据库,没有持久化到磁盘,只要数据库实例启动后,就会从内存中读取数据。所以,我们在这里并不能看到这个schema的文件夹存在datadir目录下面。

启动MySQL多实例

在启动之前,先看下MySQL数据库的状态,如下:

root@edu:/usr/local# mysqld_multi report
Reporting MySQL servers
MySQL server from group: mysqld3306 is not running
MySQL server from group: mysqld3307 is not running
MySQL server from group: mysqld3308 is not running
root@edu:/usr/local#

启动命令如下所示,依次启动3306端口、3307端口、3308端口的MySQL数据库实例:

root@edu:/usr/local# mysqld_multi start 3306
root@edu:/usr/local# mysqld_multi report
Reporting MySQL servers
MySQL server from group: mysqld3306 is running
MySQL server from group: mysqld3307 is not running
MySQL server from group: mysqld3308 is not running

root@edu:/usr/local# mysqld_multi start 3307
root@edu:/usr/local# mysqld_multi report
Reporting MySQL servers
MySQL server from group: mysqld3306 is running
MySQL server from group: mysqld3307 is running
MySQL server from group: mysqld3308 is not running

root@edu:/usr/local# mysqld_multi start 3308
root@edu:/usr/local# mysqld_multi report
Reporting MySQL servers
MySQL server from group: mysqld3306 is running
MySQL server from group: mysqld3307 is running
MySQL server from group: mysqld3308 is running
root@edu:/usr/local#

也可以一次性全部启动所有的MySQL数据库实例,而不是一个一个启动。命令如下:

root@edu:~# mysqld_multi start
root@edu:~# mysqld_multi report
Reporting MySQL servers
MySQL server from group: mysqld3306 is running
MySQL server from group: mysqld3307 is running
MySQL server from group: mysqld3308 is running
root@edu:~#

除了一次启动一个MySQL数据库实例或者一次启动全部数据库实例之外,还可以一次启动指定的多个MySQL数据库实例,如下命令就是只启动3307和3308端口的两个数据库实例,多个实例名称之间逗号隔开即可。3307端口的数据库实例并没有启动。

mysqld_multi start 3307,3308

验证启动的结果

查看本机启动的监听端口列表,如下,有三个端口分别是3306、3307、3308,分别对应三个MySQL数据库服务。

root@edu:/usr/local# netstat -tunlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp6       0      0 :::3306                 :::*                    LISTEN      3354/mysqld
tcp6       0      0 :::3307                 :::*                    LISTEN      3550/mysqld
tcp6       0      0 :::3308                 :::*                    LISTEN      3746/mysqld
root@edu:/usr/local#

查看mysqld的进程列表如下:

root@edu:/usr/local# ps -ef | grep mysqld
root      3202     1  0 12:07 pts/1    00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --server_id=3306 --port=3306 --datadir=/data/mysql/3306 --socket=/tmp/mysqld3306.socket --log_error=mysqld3306_error.log
mysql     3354  3202  0 12:07 pts/1    00:00:00 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/data/mysql/3306 --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --server-id=3306 --log-error=mysqld3306_error.log --pid-file=edu.mysql.pid --socket=/tmp/mysqld3306.socket --port=3306
root      3398     1  0 12:07 pts/1    00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --server_id=3307 --port=3307 --datadir=/data/mysql/3307 --socket=/tmp/mysqld3307.socket --log_error=mysqld3307_error.log
mysql     3550  3398  0 12:07 pts/1    00:00:00 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/data/mysql/3307 --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --server-id=3307 --log-error=mysqld3307_error.log --pid-file=edu.mysql.pid --socket=/tmp/mysqld3307.socket --port=3307
root      3594     1  0 12:07 pts/1    00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --server_id=3308 --port=3308 --datadir=/data/mysql/3308 --socket=/tmp/mysqld3308.socket --log_error=mysqld3308_error.log
mysql     3746  3594  0 12:07 pts/1    00:00:00 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/data/mysql/3308 --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --server-id=3308 --log-error=mysqld3308_error.log --pid-file=edu.mysql.pid --socket=/tmp/mysqld3308.socket --port=3308
root      3792     9  0 12:10 pts/1    00:00:00 grep --color=auto mysqld
root@edu:/usr/local#

查看socket文件是否生成,如下所示:

root@edu:~# tree /tmp
/tmp
|-- mysqld3306.socket
|-- mysqld3306.socket.lock
|-- mysqld3307.socket
|-- mysqld3307.socket.lock
|-- mysqld3308.socket
`-- mysqld3308.socket.lock

0 directories, 6 files
root@edu:~#

mysqld和mysqld_safe启动MySQL的区别

在启动MySQL数据库的时候,我们可以使用如下两种命令来启动MySQL数据库,他们之间有什么区别?

mysqld --user=mysql --datadir=/data/mysql/3306 &
mysqld_safe --user=mysql --datadir=/data/mysql/3306 &

mysqld_safe是一个shell脚本,我们可以在/usr/local/mysql/bin目录中看到这个脚本文件,它里面是通过调用mysqld二进制文件来启动MySQL数据库实例的。此时的mysqld_safe是一个守护进程,当发现启动的mysqld进程异常退出之后,会马上再次启动mysqld进程。

对于使用mysqld_safe启动的MySQL实例,我们通过ps -ef | grep mysqld命令可以看到除了正常的mysqld进程之外,还有一个mysqld_safe的进程,而这个mysqld_safe进程存在的目的就是充当mysqld进程的守护进程,监控mysqld进程如果退出后,就马上再次启动它。推荐使用mysqld_safe命令来启动MySQL数据库实例。

配置MySQL多实例开机自启动

把MySQL多实例启动脚本放到/etc/init.d目录下面,便于设置开启自动启动,或者使用service命令来管理MySQL服务。

oot@edu:/usr/local/mysql/support-files# pwd
/usr/local/mysql/support-files
root@edu:/usr/local/mysql/support-files# ls
magic  mysql-log-rotate  mysql.server  mysqld_multi.server
root@edu:/usr/local/mysql/support-files# cp mysqld_multi.server /etc/init.d/
root@edu:/usr/local/mysql/support-files# cp mysql.server /etc/init.d/
root@edu:/usr/local/mysql/support-files#

设置开机自启动

update-rc.d -f mysql.server defaults

登录MySQL多实例

登录第一个MySQL数据库实例3306,出现如下错误:

root@edu:~# mysql -uroot -p"xhJO55_M>yO1" -P3306 --socket=/tmp/mysqld3306.socket
mysql: error while loading shared libraries: libncurses.so.5: cannot open shared object file: No such file or directory

出现上面错误的原因是缺少库文件,安装库文件如下:

root@edu:~# apt-get install libncurses5 -y

再次尝试登录,成功:

root@edu:~# mysql -uroot -p"xhJO55_M>yO1" -P3306 --socket=/tmp/mysqld3306.socket
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 5
Server version: 5.7.32

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> alter user 'root'@'localhost' identified by 'root';
Query OK, 0 rows affected (0.00 sec)

mysql> exit;
Bye
root@edu:~# mysql -uroot -p"root" -P3306 --socket=/tmp/mysqld3306.socket
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 6
Server version: 5.7.32 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> select version();
+-----------+
| version() |
+-----------+
| 5.7.32    |
+-----------+
1 row in set (0.00 sec)

mysql>

同样的方式,去尝试登录3307和3308的MySQL数据库,也同样修改它们的root用户的密码为root。

停止MySQL多实例

通过如下命令可以一次性全部停止,注意一定要传入MySQL数据库root用户名和密码,此时要保证你所有的示例,root的密码是相同的。如果每一个实例root用户的密码各不相同,则不能一次全部停止,请参考下面针对各个示例单独停止的命令。

root@edu:~# mysqld_multi stop --user=root --password=root
root@edu:~# mysqld_multi report
Reporting MySQL servers
MySQL server from group: mysqld3306 is not running
MySQL server from group: mysqld3307 is not running
MySQL server from group: mysqld3308 is not running
root@edu:~#

停止某一个MySQL示例参考如下命令,在stop后面跟上MySQL示例的编号,这个编号就是在/etc/my.cnf配置文件中的[mysqldX]标签中的数字。

root@edu:~# mysqld_multi stop 3306 --user=root --password=root
root@edu:~# mysqld_multi report
Reporting MySQL servers
MySQL server from group: mysqld3306 is not running
MySQL server from group: mysqld3307 is running
MySQL server from group: mysqld3308 is running
root@edu:~#
root@edu:~# mysqld_multi stop 3308 --user=root --password=root
root@edu:~# mysqld_multi report
Reporting MySQL servers
MySQL server from group: mysqld3306 is not running
MySQL server from group: mysqld3307 is running
MySQL server from group: mysqld3308 is not running
root@edu:~#
# 此时只有一个端口在提供监听服务了
root@edu:~# netstat -tunlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp6       0      0 :::3307                 :::*                    LISTEN      4340/mysqld
root@edu:~#

安装MySQL8.0版本

前面我们在一台服务器上面安装部署了3台MySQL5.7版本的MySQL数据库实例,在一台服务器上,不仅仅可以安装同一个版本的MySQL多个实例,还可以安装不同版本的MySQL多个实例。下面我们在这台服务器上,尝试部署一个MySQL8.0版本的MySQL数据库实例。

下载MySQL8.0二进制安装包

在MySQL官方网站上,下载MySQL8.0版本的二进制安装包。具体下载方式可以参考MySQL5.7的下载方式,这里不再赘述。

cd /usr/local
wget https://downloads.mysql.com/archives/get/p/23/file/mysql-8.0.20-linux-glibc2.12-x86_64.tar.xz
tar -Jxvf mysql-8.0.20-linux-glibc2.12-x86_64.tar.xz

创建8.0版本软连接目录

/usr/local目录下面,已经存在一个mysql的软连接目录,指向了MySQL5.7解压出来的二级制文件目录。如下所示:

root@edu:/usr/local# ls -lstr mysql
0 lrwxrwxrwx 1 root root 46 Apr  7 11:49 mysql -> /usr/local/mysql-5.7.32-linux-glibc2.12-x86_64
root@edu:/usr/local#

参考这样的方式,我们把MySQL8.0版本的二进制安装包也解压到/usr/local目录下面,然后创建一个新的软件连接目录mysql80,让其指向新解压的MySQL8.0二级制文件目录。如下所示:

cd /usr/local
ln -s /usr/local/mysql-8.0.20-linux-glibc2.12-x86_64 mysql80

效果如下:

root@edu:/usr/local# ls -lstr mysql80
0 lrwxrwxrwx 1 root root 35 Apr  8 02:33 mysql80 -> mysql-8.0.20-linux-glibc2.12-x86_64
root@edu:/usr/local#

创建数据库文件目录

创建一个数据目录,用于存MySQL8.0版本的数据库文件。参考MySQL5.7的数据文件目录/data/mysql/xxxx,我们在/data目录下创建如下的目录,我们使用3309作为MySQL8.0版本的数据库端口号。

mkdir -p /data/mysql80/3309

修改MySQL的配置文件

修改MySQL的配置文件/etc/my.cnf,在里面增加MySQL8.0实例的配置信息,增加的内容如下:

# 数据库实例4,MySQL8.0版本
[mysqld3309]
server_id=3309
port=3309
datadir=/data/mysql80/3309
socket=/tmp/mysqld3309.socket
log_error=mysqld3309_error.log
basedir=/usr/local/mysql80

初始化数据库

初始化MySQL8.0的数据库,命令参考如下,指定了datadirbasedir,切记:我们要进入到MySQL8.0的bin目录下执行初始化,否则有可能会导致使用MySQL5.7的软件目录来初始化。初始化成功后,生成了一个初始化的密码,记住这个,在第一次登录MySQL8.0的时候,需要用到。

root@edu:~# cd /usr/local/mysql80/bin
root@edu:/usr/local/mysql80/bin# pwd
/usr/local/mysql80/bin
root@edu:/usr/local/mysql80/bin# mysqld --initialize --user=mysql --datadir=/data/mysql80/3309 --basedir=/usr/local/mysql80
2021-04-08T02:46:30.772946Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2021-04-08T02:46:31.013446Z 0 [Warning] InnoDB: New log files created, LSN=45790
2021-04-08T02:46:31.073880Z 0 [Warning] InnoDB: Creating foreign key constraint system tables.
2021-04-08T02:46:31.140709Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: 9fb91481-9814-11eb-bcc0-0242ac110002.
2021-04-08T02:46:31.144957Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.
2021-04-08T02:46:31.543074Z 0 [Warning] CA certificate ca.pem is self signed.
2021-04-08T02:46:31.652037Z 1 [Note] A temporary password is generated for root@localhost: YkWvO9d)kog#
root@edu:/usr/local/mysql80/bin#

启动MySQL8.0实例

启动MySQL8.0的实例,方法参考启动MySQL5.7的多实例方式。

root@edu:/usr/local/mysql80/bin# mysqld_multi start 3309
root@edu:/usr/local/mysql80/bin# mysqld_multi report
Reporting MySQL servers
MySQL server from group: mysqld3306 is not running
MySQL server from group: mysqld3307 is not running
MySQL server from group: mysqld3308 is not running
MySQL server from group: mysqld3309 is running
root@edu:/usr/local/mysql#

验证启动结果

通过下面的ps输出结果可以看出,MySQL8.0在启动的时候,使用的是MySQL5.7目录/usr/local/mysql/bin/mysqld_safe下面的mysqld_safe文件,因为我们在/etc/my.cnf配置文件中配置的[mysqld_multi]标签中指定的就是MySQL5.7的mysqld_safe启动文件,并且在[mysqld3309]标签下面没有指定特殊的mysqld_safe启动文件,所以就是用的默认的5.7的启动文件。这说明5.7的mysqld_safe文件是可以启动MySQL8.0的数据库实例的。

root@edu:/usr/local/mysql# netstat -tunlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp6       0      0 :::33060                :::*                    LISTEN      4803/mysqld
tcp6       0      0 :::3309                 :::*                    LISTEN      4803/mysqld
root@edu:/usr/local/mysql# ps -ef | grep mysql
root      4637     1  0 03:13 pts/1    00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --server_id=3309 --port=3309 --datadir=/data/mysql80/3309 --socket=/tmp/mysqld3309.socket --log_error=mysqld3309_error.log --basedir=/usr/local/mysql80
mysql     4803  4637  4 03:13 pts/1    00:00:14 /usr/local/mysql80/bin/mysqld --basedir=/usr/local/mysql80 --datadir=/data/mysql80/3309 --plugin-dir=/usr/local/mysql80/lib/plugin --user=mysql --server-id=3309 --log-error=mysqld3309_error.log --pid-file=edu.mysql.pid --socket=/tmp/mysqld3309.socket --port=3309
root      4949     9  0 03:18 pts/1    00:00:00 grep --color=auto mysql
root@edu:/usr/local/mysql#

启动MySQL8.0之后,数据库目录如下:

root@edu:/usr/local/mysql# tree -d /data
/data
|-- mysql
|   |-- 3306
|   |   |-- mysql
|   |   |-- performance_schema
|   |   `-- sys
|   |-- 3307
|   |   |-- mysql
|   |   |-- performance_schema
|   |   `-- sys
|   `-- 3308
|       |-- mysql
|       |-- performance_schema
|       `-- sys
`-- mysql80
    `-- 3309
        |-- #innodb_temp
        |-- mysql
        |-- performance_schema
        `-- sys

19 directories
root@edu:/usr/local/mysql#
root@edu:/usr/local/mysql# tree /tmp
/tmp
|-- mysqld3309.socket
|-- mysqld3309.socket.lock
|-- mysqlx.sock
`-- mysqlx.sock.lock

0 directories, 4 files
root@edu:/usr/local/mysql#

登录MySQL8.0实例

登录MySQL8.0的实例,指定socket文件的目录,使用前面初始化MySQL8.0数据库的时候生成的初始化密码登录。然后修改root用户的密码也为root。

root@edu:/usr/local/mysql# mysql -uroot -p"YkWvO9d)kog#" --socket=/tmp/mysqld3309.socket
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 14
Server version: 8.0.20

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> alter user 'root'@'localhost' identified by 'root';
Query OK, 0 rows affected (0.01 sec)

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

mysql> exit;
Bye
root@edu:/usr/local/mysql#

安装MySQL5.6版本

前面我们在服务器上面安装部署了5.7版本的MySQL和8.0版本的MySQL,现在我们来安装一下5.6版本的MySQL。

下载5.6版本的二进制安装包

参考下载5.7版本的二进制安装包,使用wget命令下载如下:

cd /usr/local
wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.6.51-linux-glibc2.12-x86_64.tar.gz
tar -zxvf mysql-5.6.51-linux-glibc2.12-x86_64.tar.gz

创建5.6版本的软连接目录

cd /usr/local
ln -s mysql-5.6.51-linux-glibc2.12-x86_64 mysql56

创建数据库文件目录

创建一个数据目录,用于存MySQL5.6版本的数据库文件。参考MySQL5.7的数据文件目录/data/mysql/xxxx,我们在/data目录下创建如下的目录,我们使用3305作为MySQL5.6版本的数据库端口号。

mkdir -p /data/mysql56/3305

修改MySQL的配置文件

修改MySQL的配置文件/etc/my.cnf,在里面增加MySQL5.6实例的配置信息,增加的内容如下:

# 数据库实例5,MySQL5.6版本
[mysqld3305]
server_id=3305
port=3305
datadir=/data/mysql56/3305
socket=/tmp/mysqld3305.socket
log_error=mysqld3305_error.log
basedir=/usr/local/mysql56

初始化数据库

初始化MySQL5.6的数据库,命令参考如下,指定了datadirbasedir,切记:我们要进入到MySQL5.6的basedir目录/usr/local/mysql56下执行初始化,5.6版本的MySQL初始化的时候,和5.7、8.0版本的有所不同,不是使用bin目录下面的mysqld初始化的。初始化成功后,生成了一个初始化的密码,记住这个,在第一次登录MySQL5.6的时候,需要用到。

root@edu:/usr/local/mysql56# scripts/mysql_install_db --user=mysql --datadir=/data/mysql56/3305
FATAL ERROR: please install the following Perl modules before executing ./mysql_install_db:
File::Copy
Sys::Hostname
Data::Dumper
root@edu:/usr/local/mysql56# 

出现上面的错误原因是我们使用docker容器启动的Ubuntu,所以缺少很多库文件。我们使用下面的命令来安装perl模块。

root@edu:/usr/local/mysql56# apt-get install perl -y

再次初始化如下,需要注意的是MySQL5.6版本,并不像MySQL5.7、8.0版本那样,在初始化完成之后会生成一个初始的root用户的民,5.6初始化完成之后,密码为空。在使用空密码登录后,修改一下就可以了。

root@edu:/usr/local/mysql56# scripts/mysql_install_db --user=mysql --datadir=/data/mysql56/3305
Installing MySQL system tables...2021-04-08 04:25:28 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2021-04-08 04:25:28 0 [Note] Ignoring --secure-file-priv value as server is running with --bootstrap.
2021-04-08 04:25:28 0 [Note] ./bin/mysqld (mysqld 5.6.51) starting as process 5142 ...
2021-04-08 04:25:28 5142 [Note] InnoDB: Using atomics to ref count buffer pool pages
2021-04-08 04:25:28 5142 [Note] InnoDB: The InnoDB memory heap is disabled
2021-04-08 04:25:28 5142 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins
2021-04-08 04:25:28 5142 [Note] InnoDB: Memory barrier is not used
2021-04-08 04:25:28 5142 [Note] InnoDB: Compressed tables use zlib 1.2.11
2021-04-08 04:25:28 5142 [Note] InnoDB: Using Linux native AIO
2021-04-08 04:25:28 5142 [Note] InnoDB: Using CPU crc32 instructions
2021-04-08 04:25:28 5142 [Note] InnoDB: Initializing buffer pool, size = 128.0M
2021-04-08 04:25:28 5142 [Note] InnoDB: Completed initialization of buffer pool
2021-04-08 04:25:28 5142 [Note] InnoDB: Highest supported file format is Barracuda.
2021-04-08 04:25:28 5142 [Note] InnoDB: 128 rollback segment(s) are active.
2021-04-08 04:25:28 5142 [Note] InnoDB: Waiting for purge to start
2021-04-08 04:25:28 5142 [Note] InnoDB: 5.6.51 started; log sequence number 1600607
2021-04-08 04:25:28 5142 [Note] RSA private key file not found: /data/mysql56/3305//private_key.pem. Some authentication plugins will not work.
2021-04-08 04:25:28 5142 [Note] RSA public key file not found: /data/mysql56/3305//public_key.pem. Some authentication plugins will not work.
2021-04-08 04:25:28 5142 [Note] Binlog end
2021-04-08 04:25:28 5142 [Note] InnoDB: FTS optimize thread exiting.
2021-04-08 04:25:28 5142 [Note] InnoDB: Starting shutdown...
2021-04-08 04:25:29 5142 [Note] InnoDB: Shutdown completed; log sequence number 1625987
OK

Filling help tables...2021-04-08 04:25:30 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2021-04-08 04:25:30 0 [Note] Ignoring --secure-file-priv value as server is running with --bootstrap.
2021-04-08 04:25:30 0 [Note] ./bin/mysqld (mysqld 5.6.51) starting as process 5166 ...
2021-04-08 04:25:30 5166 [Note] InnoDB: Using atomics to ref count buffer pool pages
2021-04-08 04:25:30 5166 [Note] InnoDB: The InnoDB memory heap is disabled
2021-04-08 04:25:30 5166 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins
2021-04-08 04:25:30 5166 [Note] InnoDB: Memory barrier is not used
2021-04-08 04:25:30 5166 [Note] InnoDB: Compressed tables use zlib 1.2.11
2021-04-08 04:25:30 5166 [Note] InnoDB: Using Linux native AIO
2021-04-08 04:25:30 5166 [Note] InnoDB: Using CPU crc32 instructions
2021-04-08 04:25:30 5166 [Note] InnoDB: Initializing buffer pool, size = 128.0M
2021-04-08 04:25:30 5166 [Note] InnoDB: Completed initialization of buffer pool
2021-04-08 04:25:30 5166 [Note] InnoDB: Highest supported file format is Barracuda.
2021-04-08 04:25:30 5166 [Note] InnoDB: 128 rollback segment(s) are active.
2021-04-08 04:25:30 5166 [Note] InnoDB: Waiting for purge to start
2021-04-08 04:25:30 5166 [Note] InnoDB: 5.6.51 started; log sequence number 1625987
2021-04-08 04:25:30 5166 [Note] RSA private key file not found: /data/mysql56/3305//private_key.pem. Some authentication plugins will not work.
2021-04-08 04:25:30 5166 [Note] RSA public key file not found: /data/mysql56/3305//public_key.pem. Some authentication plugins will not work.
2021-04-08 04:25:30 5166 [Note] Binlog end
2021-04-08 04:25:30 5166 [Note] InnoDB: FTS optimize thread exiting.
2021-04-08 04:25:30 5166 [Note] InnoDB: Starting shutdown...
2021-04-08 04:25:31 5166 [Note] InnoDB: Shutdown completed; log sequence number 1625997
OK

To start mysqld at boot time you have to copy
support-files/mysql.server to the right place for your system

PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !
To do so, start the server, then issue the following commands:

  ./bin/mysqladmin -u root password 'new-password'
  ./bin/mysqladmin -u root -h edu.mysql password 'new-password'

Alternatively you can run:

  ./bin/mysql_secure_installation

which will also give you the option of removing the test
databases and anonymous user created by default.  This is
strongly recommended for production servers.

See the manual for more instructions.

You can start the MySQL daemon with:

  cd . ; ./bin/mysqld_safe &

You can test the MySQL daemon with mysql-test-run.pl

  cd mysql-test ; perl mysql-test-run.pl

Please report any problems at http://bugs.mysql.com/

The latest information about MySQL is available on the web at

  http://www.mysql.com

Support MySQL by buying support/licenses at http://shop.mysql.com

WARNING: Found existing config file ./my.cnf on the system.
Because this file might be in use, it was not replaced,
but was used in bootstrap (unless you used --defaults-file)
and when you later start the server.
The new default config file was created as ./my-new.cnf,
please compare it with your file and take the changes you need.

WARNING: Default config file /etc/my.cnf exists on the system
This file will be read by default by the MySQL server
If you do not want to use this, either remove it, or use the
--defaults-file argument to mysqld_safe when starting the server

root@edu:/usr/local/mysql56#

启动MySQL5.6实例

启动MySQL5.6的实例,方法参考启动MySQL5.7的多实例方式,从下面可以看出3305端口已经提供监听服务了。

root@edu:/usr/local/mysql80/bin# mysqld_multi start 3305
root@edu:/usr/local/mysql80/bin# mysqld_multi report
Reporting MySQL servers
MySQL server from group: mysqld3306 is not running
MySQL server from group: mysqld3307 is not running
MySQL server from group: mysqld3308 is not running
MySQL server from group: mysqld3309 is running
MySQL server from group: mysqld3305 is running
root@edu:/usr/local/mysql#

验证启动结果

通过下面的ps输出结果可以看出,MySQL5.6在启动的时候,使用的是MySQL5.7目录/usr/local/mysql/bin/mysqld_safe下面的mysqld_safe文件,因为我们在/etc/my.cnf配置文件中配置的[mysqld_multi]标签中指定的就是MySQL5.7的mysqld_safe启动文件,并且在[mysqld3305]标签下面没有指定特殊的mysqld_safe启动文件,所以就是用的默认的5.7的启动文件。这说明5.7的mysqld_safe文件是可以启动MySQL5.6的数据库实例的。

root@edu:/usr/local/mysql56# netstat -tunlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp6       0      0 :::33060                :::*                    LISTEN      4803/mysqld
tcp6       0      0 :::3305                 :::*                    LISTEN      5376/mysqld
tcp6       0      0 :::3309                 :::*                    LISTEN      4803/mysqld
root@edu:/usr/local/mysql56#
root@edu:/usr/local/mysql56# ps -ef | grep mysql
root      4637     1  0 03:13 pts/1    00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --server_id=3309 --port=3309 --datadir=/data/mysql80/3309 --socket=/tmp/mysqld3309.socket --log_error=mysqld3309_error.log --basedir=/usr/local/mysql80
mysql     4803  4637  1 03:13 pts/1    00:02:57 /usr/local/mysql80/bin/mysqld --basedir=/usr/local/mysql80 --datadir=/data/mysql80/3309 --plugin-dir=/usr/local/mysql80/lib/plugin --user=mysql --server-id=3309 --log-error=mysqld3309_error.log --pid-file=edu.mysql.pid --socket=/tmp/mysqld3309.socket --port=3309
root      5198     1  0 06:14 pts/1    00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --server_id=3305 --port=3305 --datadir=/data/mysql56/3305 --socket=/tmp/mysqld3305.socket --log_error=mysqld3305_error.log --basedir=/usr/local/mysql56
mysql     5376  5198  0 06:14 pts/1    00:00:01 /usr/local/mysql56/bin/mysqld --basedir=/usr/local/mysql56 --datadir=/data/mysql56/3305 --plugin-dir=/usr/local/mysql56/lib/plugin --user=mysql --server-id=3305 --log-error=mysqld3305_error.log --pid-file=edu.mysql.pid --socket=/tmp/mysqld3305.socket --port=3305
root      5420     9  0 06:21 pts/1    00:00:00 grep --color=auto mysql
root@edu:/usr/local/mysql56#

启动MySQL8.0之后,数据库目录如下:

root@edu:/usr/local/mysql56# tree -d /data
/data
|-- mysql
|   |-- 3306
|   |   |-- mysql
|   |   |-- performance_schema
|   |   `-- sys
|   |-- 3307
|   |   |-- mysql
|   |   |-- performance_schema
|   |   `-- sys
|   `-- 3308
|       |-- mysql
|       |-- performance_schema
|       `-- sys
|-- mysql56
|   `-- 3305
|       |-- mysql
|       |-- performance_schema
|       `-- test
`-- mysql80
    `-- 3309
        |-- #innodb_temp
        |-- mysql
        |-- performance_schema
        `-- sys

24 directories
root@edu:/usr/local/mysql56#
root@edu:/usr/local/mysql56# tree /tmp
/tmp
|-- mysqld3305.socket
|-- mysqld3309.socket
|-- mysqld3309.socket.lock
|-- mysqlx.sock
`-- mysqlx.sock.lock

0 directories, 5 files
root@edu:/usr/local/mysql56#

登录MySQL5.6实例

登录MySQL5.6的实例,指定socket文件的目录,使用空密码登录,然后修改root用户的密码也为root。

root@edu:/usr/local/mysql56# mysql -uroot -p"" --socket=/tmp/mysqld3305.socket
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.6.51 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> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+
4 rows in set (0.01 sec)

mysql> alter user 'root'@'localhost' identified by 'root';
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'identified by 'root'' at line 1
mysql> set password=password('root');
Query OK, 0 rows affected (0.00 sec)

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

mysql> exit;
Bye
root@edu:/usr/local/mysql56#

总结

以上,我们就完成了在一台服务器上面安装多个MySQL5.7的实例,用不同的端口号来区分不同的数据库实例;然后又安装一个MySQL8.0的数据库实例;最后用部署了一个MySQL5.6版本的实例。

其中需要注意的是:在初始化每一个不同版本的数据库实例的时候,记得要到对应的数据库版本的basedir目录下面去初始化,并且在初始化的是,为其制定对应的数据库文件存储的目录。5.6版本的MySQL和5.7、8.0版本的MySQL在初始化的时候,命令稍微有点不同,这一点需要注意,另外5.6版本的MySQL没有默认的root密码,这个也要注意一下。

相关推荐

Java 环境安装详细指南(java环境安装步骤)

前言...

学习笔记-Linux JDK - 安装&amp;配置

前提条件#检查是否存在JDKrpm-qa|grepjava#删除现存JDKyum-yremovejava*安装OracleJDK不分系统...

Ubuntu16.04.1安装Java8(ubuntu安装java的命令)

上篇文章讲解了怎么在Windows下安装Java8《Windows10安装Java8》,这里讲解下怎么在Linux下安装Java。由于之前已经安装了Ubuntu16.04.1《...

Ubuntu 下安装 JDK17(ubuntu安装jdk1.7)

JavaSE17Ubuntu下JDK的安装本文主要针对Ubuntu的环境进行Java17的JDK安装。下载地址:...

Ubuntu安装JDK(ubuntu安装jdk报错)

在Ubuntu系统上安装JDK8u441版本,可以通过多种方式实现,包括使用官方JDK的PPA仓库、下载JDK的.tar.gz文件手动安装,或者使用第三方PPA仓库如WebUpd8。以下是通过JDK...

前端资源-实用的JS插件(前端浏览器插件)

现在前端资源越来越多,有创意十足的,有实用性高的,这些对于设计师和前端人员来说都是不错的灵感和资源,所以我们可多关注这些信息,对自己的专业技术有也会帮助的。今天设计达人网为大家分享有:页面进度条、图像...

图片延迟加载,你会使用吗?给你推荐几款插件,快来学习吧

图片延迟加载延迟加载就是当真正需要的时候,才执行加载操作。延迟加载作为Web前端性能优化的一种措施,已经越来越多的应用到各种程序中,而图片的延迟加载作为使用是最广泛的一种,更应该被我们掌握,今天我就给...

突发!Vite 插件惊现图片处理黑科技

【AlarmLevel】趣味【AlarmTitle】突发!Vite插件惊现图片处理黑科技【AlarmOverview】就在昨天,GitHub上一款名为vite-plugin-imagemi...

盘点前端程序员制作网站的常用工具

网站制作时,为了能够更快速、高效地完成任务,往往需要网站制作工具来进行辅助。尤其是前端程序员,五花八门的网站制作工具。今天就来盘点前端程序员一般开发网站程序时使用的那类网站制作工具。...

MyBatis 插件原理与实战(mybatis好用的插件idea)

文章导读MyBatis插件原理与实战什么是插件?...

VisBug:助力前端开发的浏览器插件

作为前端开发者相信肯定有遇到过以下场景:...

前端插件-unplugin-auto-import真的香香

没用这个插件前:你在Vue3中写了50个组件,每个文件开头都要重复这堆代码:import{ref,computed}from'vue'import{useRoute,...

VSCode中值得推荐的常用的16个高效前端插件「主题篇」(一)

VSCode是我们前端开发的一个强大的IDE,所以选择趁手好用的插件是提高开发效率,然后剩下的时间用来摸鱼是很有必要滴。主题篇(16)VSCodeGreatIcons...

支持快速集成的前端网站反馈小插件

大家好,我是章鱼猫。...

很香的几款开源免费的流程设计器(开源流程图设计器)

1、LogicFlow(1)介绍:LogicFlow是一款流程图编辑框架,提供了一系列流程图交互、编辑所必需的功能和灵活的节点自定义、插件等拓展机制。LogicFlow支持前端研发自定义开发各种逻...

取消回复欢迎 发表评论: