nacos 外置mysql数据库操作(docker 环境)

目录

一、外置mysql数据库原因:

二、数据库准备工作

三、构建nacos容器

四、效果展示


一、外置mysql数据库原因:

想知道nacos如何外置mysql数据库之前,我们首先要知道为什么要外置mysql数据库,或者说这样做有什么优点和好处,我将其分为以下几点:

1、数据持久性 :使⽤MySQL作为外置数据库可以确保数据被持久化存储,这对于确保服务的稳定性和数据的可靠性⾄关重要。

2、⾼可⽤性 :Nacos⽀持集群部署,⽽使⽤MySQL作为共享的数据存储可以确保集群中各个节点之间的数据⼀致性。此外,MySQL⾃⾝也⽀持⾼可⽤性和故障转移,如使⽤主从复制或集群解决⽅案,从⽽进⼀步提⾼系统的可⽤性。

3、性能优化 :使⽤nacos内置的数据库虽然能够简化部署,但是性能受到限制,外置的MySQL可以根据需要进⾏优化和扩展,满⾜更⾼的性能要求。

4、易于管理和维护:⾸先我们系统本⾝采⽤MySQL数据库,nacos外置数据库和我们系统采⽤同样的数据库可以保证技术使⽤的统⼀。简化了数据库的管理和维护⼯作,降低运维成本。

二、数据库准备工作

首先在你需要作为外置数据库的mysql中,建库,建相应的表,可以使用下图我演示的sql,也可以参考官方github文档阿里巴巴nacos

sql 复制代码
create database nacos_dev;

use nacos_dev;
CREATE TABLE `config_info` (
 `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
 `data_id` varchar(255) NOT NULL COMMENT 'data_id',
 `group_id` varchar(128) DEFAULT NULL COMMENT 'group_id',
 `content` longtext NOT NULL COMMENT 'content',
 `md5` varchar(32) DEFAULT NULL COMMENT 'md5',
 `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
 `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
 `src_user` text COMMENT 'source user',
 `src_ip` varchar(50) DEFAULT NULL COMMENT 'source ip',
 `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',
 `tenant_id` varchar(128) DEFAULT '' COMMENT '租⼾字段',
 `c_desc` varchar(256) DEFAULT NULL COMMENT 'configuration description',
 `c_use` varchar(64) DEFAULT NULL COMMENT 'configuration usage',
 `effect` varchar(64) DEFAULT NULL COMMENT '配置⽣效的描述',
 `type` varchar(64) DEFAULT NULL COMMENT '配置的类型',
 `c_schema` text COMMENT '配置的模式',
 `encrypted_data_key` text NOT NULL COMMENT '密钥',
 PRIMARY KEY (`id`),
 UNIQUE KEY `uk_configinfo_datagrouptenant` (`data_id`,`group_id`,`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info';


CREATE TABLE `config_info_aggr` (
 `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
 `data_id` varchar(255) NOT NULL COMMENT 'data_id',
 `group_id` varchar(128) NOT NULL COMMENT 'group_id',
 `datum_id` varchar(255) NOT NULL COMMENT 'datum_id',
 `content` longtext NOT NULL COMMENT '内容',
 `gmt_modified` datetime NOT NULL COMMENT '修改时间',
 `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',
 `tenant_id` varchar(128) DEFAULT '' COMMENT '租⼾字段',
 PRIMARY KEY (`id`),
 UNIQUE KEY `uk_configinfoaggr_datagrouptenantdatum`
(`data_id`,`group_id`,`tenant_id`,`datum_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='增加租⼾字段';


CREATE TABLE `config_info_beta` (
 `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
 `data_id` varchar(255) NOT NULL COMMENT 'data_id',
 `group_id` varchar(128) NOT NULL COMMENT 'group_id',
 `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',
 `content` longtext NOT NULL COMMENT 'content',
 `beta_ips` varchar(1024) DEFAULT NULL COMMENT 'betaIps',
 `md5` varchar(32) DEFAULT NULL COMMENT 'md5',
 `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
 `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
 `src_user` text COMMENT 'source user',
 `src_ip` varchar(50) DEFAULT NULL COMMENT 'source ip',
 `tenant_id` varchar(128) DEFAULT '' COMMENT '租⼾字段',
 `encrypted_data_key` text NOT NULL COMMENT '密钥',
 PRIMARY KEY (`id`),
 UNIQUE KEY `uk_configinfobeta_datagrouptenant`
(`data_id`,`group_id`,`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin
COMMENT='config_info_beta';


CREATE TABLE `config_info_tag` (
 `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
 `data_id` varchar(255) NOT NULL COMMENT 'data_id',
 `group_id` varchar(128) NOT NULL COMMENT 'group_id',
 `tenant_id` varchar(128) DEFAULT '' COMMENT 'tenant_id',
 `tag_id` varchar(128) NOT NULL COMMENT 'tag_id',
 `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',
 `content` longtext NOT NULL COMMENT 'content',
 `md5` varchar(32) DEFAULT NULL COMMENT 'md5',
 `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
 `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
 `src_user` text COMMENT 'source user',
 `src_ip` varchar(50) DEFAULT NULL COMMENT 'source ip',
 PRIMARY KEY (`id`),
 UNIQUE KEY `uk_configinfotag_datagrouptenanttag`
(`data_id`,`group_id`,`tenant_id`,`tag_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin
COMMENT='config_info_tag';




CREATE TABLE `config_tags_relation` (
 `id` bigint(20) NOT NULL COMMENT 'id',
 `tag_name` varchar(128) NOT NULL COMMENT 'tag_name',
 `tag_type` varchar(64) DEFAULT NULL COMMENT 'tag_type',
 `data_id` varchar(255) NOT NULL COMMENT 'data_id',
 `group_id` varchar(128) NOT NULL COMMENT 'group_id',
 `tenant_id` varchar(128) DEFAULT '' COMMENT 'tenant_id',
 `nid` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'nid, ⾃增⻓标识',
 PRIMARY KEY (`nid`),
 UNIQUE KEY `uk_configtagrelation_configidtag` (`id`,`tag_name`,`tag_type`),
 KEY `idx_tenant_id` (`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin
COMMENT='config_tag_relation';


CREATE TABLE `group_capacity` (
 `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
 `group_id` varchar(128) NOT NULL DEFAULT '' COMMENT 'Group ID,空字符表⽰整个集
群',
 `quota` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '配额,0表⽰使⽤默认值',
 `usage` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '使⽤量',
 `max_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个配置⼤⼩上限,单位
为字节,0表⽰使⽤默认值',
 `max_aggr_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '聚合⼦配置最⼤
个数,,0表⽰使⽤默认值',
 `max_aggr_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个聚合数据的⼦
配置⼤⼩上限,单位为字节,0表⽰使⽤默认值',
 `max_history_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '最⼤变更历史
数量',
 `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
 `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
 PRIMARY KEY (`id`),
 UNIQUE KEY `uk_group_id` (`group_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='集群、各Group容量
信息表';


CREATE TABLE `his_config_info` (
 `id` bigint(20) unsigned NOT NULL COMMENT 'id',
 `nid` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT 'nid, ⾃增标识',
 `data_id` varchar(255) NOT NULL COMMENT 'data_id',
 `group_id` varchar(128) NOT NULL COMMENT 'group_id',
 `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',
 `content` longtext NOT NULL COMMENT 'content',
 `md5` varchar(32) DEFAULT NULL COMMENT 'md5',
 `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
 `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
 `src_user` text COMMENT 'source user',
 `src_ip` varchar(50) DEFAULT NULL COMMENT 'source ip',
`op_type` char(10) DEFAULT NULL COMMENT 'operation type',
 `tenant_id` varchar(128) DEFAULT '' COMMENT '租⼾字段',
 `encrypted_data_key` text NOT NULL COMMENT '密钥',
 PRIMARY KEY (`nid`),
 KEY `idx_gmt_create` (`gmt_create`),
 KEY `idx_gmt_modified` (`gmt_modified`),
 KEY `idx_did` (`data_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='多租⼾改造';


CREATE TABLE `tenant_capacity` (
 `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
 `tenant_id` varchar(128) NOT NULL DEFAULT '' COMMENT 'Tenant ID',
 `quota` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '配额,0表⽰使⽤默认值',
 `usage` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '使⽤量',
 `max_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个配置⼤⼩上限,单位
为字节,0表⽰使⽤默认值',
 `max_aggr_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '聚合⼦配置最⼤
个数',
 `max_aggr_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个聚合数据的⼦
配置⼤⼩上限,单位为字节,0表⽰使⽤默认值',
 `max_history_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '最⼤变更历史
数量',
 `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
 `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
 PRIMARY KEY (`id`),
 UNIQUE KEY `uk_tenant_id` (`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='租⼾容量信息表';



CREATE TABLE `tenant_info` (
 `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
 `kp` varchar(128) NOT NULL COMMENT 'kp',
 `tenant_id` varchar(128) default '' COMMENT 'tenant_id',
 `tenant_name` varchar(128) default '' COMMENT 'tenant_name',
 `tenant_desc` varchar(256) DEFAULT NULL COMMENT 'tenant_desc',
 `create_source` varchar(32) DEFAULT NULL COMMENT 'create_source',
 `gmt_create` bigint(20) NOT NULL COMMENT '创建时间',
 `gmt_modified` bigint(20) NOT NULL COMMENT '修改时间',
 PRIMARY KEY (`id`),
 UNIQUE KEY `uk_tenant_info_kptenantid` (`kp`,`tenant_id`),
 KEY `idx_tenant_id` (`tenant_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='tenant_info';


CREATE TABLE `users` (
 `username` varchar(50) NOT NULL PRIMARY KEY COMMENT 'username',
 `password` varchar(500) NOT NULL COMMENT 'password',
 `enabled` boolean NOT NULL COMMENT 'enabled'
);
CREATE TABLE `roles` (
 `username` varchar(50) NOT NULL COMMENT 'username',
 `role` varchar(50) NOT NULL COMMENT 'role',
 UNIQUE INDEX `idx_user_role` (`username` ASC, `role` ASC) USING BTREE
);
CREATE TABLE `permissions` (
 `role` varchar(50) NOT NULL COMMENT 'role',
 `resource` varchar(128) NOT NULL COMMENT 'resource',
 `action` varchar(8) NOT NULL COMMENT 'action',
 UNIQUE INDEX `uk_role_permission` (`role`,`resource`,`action`) USING BTREE
);
INSERT INTO users (username, password, enabled) VALUES ('nacos',
'$2a$10$EuWPZHzz32dJN7jexM34MOeYirDdFAZm2kuWj7VEOJhhZkDrxfvUu', TRUE);
INSERT INTO roles (username, role) VALUES ('nacos', 'ROLE_ADMIN');

建好后效果如下:

三、构建nacos容器

首先需要查看docker 中 mysql的ip地址,可以通过docker inspect mysql容器名 查看,例如:

然后再通过 docker run命名来创建nacos容器并运行

sql 复制代码
docker run -d -p 8848:8848 -p 9848:9848 --name ${容器名} -e MODE=standalone -e 
JVM_XMS=256m -e JVM_XMX=256m -e SPRING_DATASOURCE_PLATFORM=mysql -e 
MYSQL_SERVICE_HOST=${mysql_ip} -e MYSQL_SERVICE_PORT=${mysql_port} -e 
MYSQL_SERVICE_DB_NAME=${nacos_db_name} -e MYSQL_SERVICE_USER=${mysql_user} -e 
MYSQL_SERVICE_PASSWORD=${mysql_password} nacos/nacos-server:v2.2.3

将容器名改为自己想要取的,mysql_ip改为刚刚查询到的ip地址,端口号为3306(注:这里不要填你宿主机映射的端口号,而是mysql本身应用启动的端口号,除非你去修改了my.cnf中配置的端口号,那你就用你改的),nacos_db_name,填刚刚我们在mysql中创建的数据库名,nacos_dev,然后就是mysql的用户名和密码,最后是镜像名,也就是你自己pull的nacos镜像。(注:填写的用户需要对刚刚创建的库有操作权限,可以使用grant命令赋权)。

四、效果展示

这里我随意添加两项配置。

然后我们来观察数据库表中是否存储有数据

可以看到我们的配置进行了持久化存储。至此我们就成功的实现了nacos外置mysql数据库!!!

感谢你能看到这,希望对你有所帮助!!!

相关推荐
烙印6013 分钟前
MyBatis原理剖析(二)
java·数据库·mybatis
RestCloud4 分钟前
如何通过ETLCloud实现跨系统数据同步?
数据库·数据仓库·mysql·etl·数据处理·数据同步·集成平台
你是狒狒吗6 分钟前
TM中,return new TransactionManagerImpl(raf, fc);为什么返回是new了一个新的实例
java·开发语言·数据库
程序员岳焱31 分钟前
Java 与 MySQL 性能优化:MySQL 慢 SQL 诊断与分析方法详解
后端·sql·mysql
Channing Lewis1 小时前
sql server如何创建表导入excel的数据
数据库·oracle·excel
秃头摸鱼侠1 小时前
MySQL安装与配置
数据库·mysql·adb
UGOTNOSHOT1 小时前
每日八股文6.3
数据库·sql
行云流水行云流水2 小时前
数据库、数据仓库、数据中台、数据湖相关概念
数据库·数据仓库
John Song2 小时前
Redis 集群批量删除key报错 CROSSSLOT Keys in request don‘t hash to the same slot
数据库·redis·哈希算法
IvanCodes2 小时前
七、Sqoop Job:简化与自动化数据迁移任务及免密执行
大数据·数据库·hadoop·sqoop