同步链路手册-Oracle链路限制、数据库配置和账号授权

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: DTS链路手册-Oracle篇-Oracle链路限制、数据库配置和账号授权

数据库限制和数据库配置

自建Oracle为源

数据库限制

数据库版本、架构限制

  • 支持Oracle数据库版本有10G、11G、12C、18C和19C。
  • 支持单节点、rac实例架构。
  • 支持12C及以上版本的租户式和非租户式架构;

数据库配置限制

  • 增量限制
  • 数据库已开启ARCHIVELOG(归档模式),并且必须保证归档日志保留3天以上。
  • 数据库已开启Supplemental Logging。

数据库接入方式限制

  • 支持自建Oracle数据库的公、私网ip接入。
  • 支持RAC架构下ScanIP、单节点的VIP或者物理IP接入。
  • 支持专线的方式接入,其中不支持RAC节点ScanIP专线接入。
  • 支持ADG主、备库方式接入。
  • 支持AWS RDS4Oracle为源接入。

迁移对象限制

  • 待迁移的表需具备主键或唯一约束,且字段具有唯一性,否则可能会导致同步链路延迟、甚至目标数据库中出现重复数据。
  • 如果您的自建Oracle版本为12c及以上,待迁移表的名称长度需不超过30个字节。

其他限制

  • 执行数据迁移前需评估源库和目标库的性能,同时建议业务低峰期执行数据迁移。否则全量数据迁移时,DTS会占用源库一定读资源,可能导致数据库的负载上升。
  • Oracle为源支持写入字符集与数据库字符集不一致的场景,需要额外设置参数source.column.encoding。

数据库配置

Oracle为源链路全量迁移无需在源库执行特殊配置。

Oracle为源的增量链路,需要抓取、解析源端日志以获取增量变更,需要客户在Oracle数据库中完成如下配置。

1)开启日志归档模式

DTS增量运行过程中,需要抓取源库online redolog或者archived redolog(如果online redolog找不到需要的增量日志,会自动查找archived redolog),因此需要在源库开启日志归档模式,如下介绍了检查、开启归档日志的步骤。

第一步:检查源库是否已经开启归档模式(如果已经开启跳过后续步骤)

archive log list;

第二步:mount方式重启数据库(此过程需要重启数据库,客户根据实际情况操作)

shutdown immediate;
startup mount;

第三步:开启日志归档模式

alter database archivelog;
alter database open;

第四步:检查日志归档配置是否生效

archive log list;

2)开启补充日志

DTS在增量同步时,还需要开启源库补充日志。目前DTS支持开启库级别补充日志和仅开启表级别补充日志两种模式,开启库级别补充日志,DTS任务运行更为稳定;开启表级别补充日志,不支持整库迁移中新建未开启补充日志的表,则更节约源Oracle数据库的磁盘空间。

模式一:检查、开启库级别补充日志:

检查库级别补充日志是否开启
SELECT supplemental_log_data_min, supplemental_log_data_pk,supplemental_log_data_ui FROM v$database;
开启库级最小补充日志
alter database add supplemental log data;
开启库级主键、唯一键补充日志:
alter database add supplemental log data (primary key,unique index) columns;
检查库级别补充日志是否开启
SELECT supplemental_log_data_min, supplemental_log_data_pk, supplemental_log_data_ui FROM v$database;

模式二:开启表级别补偿日志:

开启库级最小补充日志
alter database add supplemental log data;
开启库级主键、唯一键补充日志:
alter database add supplemental log data (primary key,unique index) columns;
开启表级补充日志(两者选其一) :
  1.alter table table_name add supplemental log data (primary key) columns;
  2.alter table table_name add supplemental log data (all) columns;

AWS RDS4Oracle为源

AWS RDS4Oracle为源数据库限制与自建Oracle一致,目前仅支持10G、11G、12C、18C、19C版本(12C以上版本仅支持非租户式架构)。但是DTS增量迁移在数据库配置上有所区别,如下详细介绍配置操作。

数据库配置

1)开启日志归档模式

第一步:查看并设置归档日志保留时间

exec rdsadmin.rdsadmin_util.show_configuration;
exec rdsadmin.rdsadmin_util.set_configuration('archivelog retention hours', 72)

2)开启补充日志

AWS RDS4Oracle为源链路同样支持两种模式:库级别和表级别补充日志。

模式一:检查、开启库级别补充日志:

检查库级别补充日志是否开启
SELECT supplemental_log_data_min, supplemental_log_data_pk,supplemental_log_data_ui FROM v$database;
打开强制日志模式。
exec rdsadmin.rdsadmin_util.force_logging(p_enable => true);
开启库级主键、唯一键补充日志
exec rdsadmin.rdsadmin_util.alter_supplemental_logging('ADD', 'PRIMARY KEY');
exec rdsadmin.rdsadmin_util.alter_supplemental_logging('ADD', 'UNIQUE');

模式二:开启表级别补偿日志:

开启表级别全字段补充日志
exec rdsadmin.rdsadmin_util.alter_supplemental_logging('ADD', 'ALL');
开启表级别主键补充日志
exec rdsadmin.rdsadmin_util.alter_supplemental_logging('ADD', 'PRIMARY KEY');

Oracle为目标

链路限制

数据库版本、架构限制

1.支持Oracle数据库版本有10G、11G、12C、18C和19C。

2.支持单节点、rac实例架构。

3.支持12C及以上版本的租户式和非租户式架构;

数据库接入方式限制

1.支持自建Oracle数据库的公、私网ip接入。

2.支持RAC架构下ScanIP、单节点的VIP或者物理IP接入。

3.支持专线的方式接入,其中不支持RAC节点ScanIP专线接入。

4.支持ADG主、备库方式接入。

5.支持AWS RDS4Oracle为源接入。

其他限制

1.执行数据迁移前需评估目标库的性能,同时建议业务低峰期执行数据迁移。否则全量数据迁移时,DTS会占用目标库一定网络资源和写资源,可能导致数据库的负载上升。

2.由于DTS全量数据迁移并发执行insert操作,会导致目标数据库表产生部分碎片,因此全量迁移完成后目标数据库存储空间会比源实例库大。

数据库配置

Oracle为目标库的链路,全量迁移、增量迁移无需在目标库执行特殊配置。

数据库账号权限准备

Oracle作为源

DTS迁移过程中,需要创建数据采集账号并授权。结构和全量迁移,需要给数据采集账号授予DBA角色或者精细化授权,增量迁移需要抓取源端日志,需要授予DBA角色或者精细授权。下面介绍了这授权和验证命令。

结构迁移

全量迁移

增量迁移

  • DBA角色
  • 精细授权
  • DBA角色
  • 精细授权
  • 非租户式架构授予DBA角色
  • 精细授权

结构迁移、全量、增量授予DBA权限

#创建数据库账号(以rdsdt_dtsacct为例)并进行授权
create user rdsdt_dtsacct identified by rdsdt_dtsacct;
grant create session to rdsdt_dtsacct;
grant connect to rdsdt_dtsacct;
grant dba to rdsdt_dtsacct;
#rdsdt_dtsacct账号登陆,检查是否授权完成
select * from user_tab_privs;              --授予权限:create session
select granted_role from user_role_privs;  --授予角色:connect、dba

结构迁移、全量精细授权

#创建数据库账号(以rdsdt_dtsacct为例)并进行授权
-- 创建账号
create user rdsdt_dtsacct identified by rdsdt_dtsacct;
grant create session to rdsdt_dtsacct;
-- 授予角色
grant connect to rdsdt_dtsacct;
grant select_catalog_role to rdsdt_dtsacct;
校验命令(使用新建账号登陆):select * from user_role_privs;
-- 授予系统权限
grant select any table to rdsdt_dtsacct;
校验命令(使用新建账号登陆):select * from user_sys_privs;    --

增量迁移精细授权

不同版本、架构、接入方式,授权方式存在差异,下面分别给出了增量精细化授权操作。

Oracle 10G~11G

#创建数据库账号(以rdsdt_dtsacct为例)并进行授权
-- 创建账号
create user rdsdt_dtsacct identified by rdsdt_dtsacct;
grant create session to rdsdt_dtsacct;
-- 授予角色
grant connect to rdsdt_dtsacct;
grant select_catalog_role to rdsdt_dtsacct;
校验命令(使用新建账号登陆):select * from user_role_privs;
-- 授予系统权限
grant select any table to rdsdt_dtsacct;
grant select any transaction to rdsdt_dtsacct;
校验命令(使用新建账号登陆):select * from user_sys_privs;
-- 授予对象权限
-- 普通对象
grant select on all_objects to rdsdt_dtsacct;
grant select on all_tab_cols to rdsdt_dtsacct;
grant select on dba_registry to rdsdt_dtsacct;
grant execute on sys.dbms_logmnr to rdsdt_dtsacct;
-- 系统视图
grant select on v_$log to rdsdt_dtsacct;
grant select on v_$logfile to rdsdt_dtsacct;
grant select on v_$standby_log to rdsdt_dtsacct;    -- ADG备库接入,需要给予该视图权限;主库接入不需要
grant select on v_$archived_log to rdsdt_dtsacct;
grant select on v_$parameter to rdsdt_dtsacct;
grant select on v_$database to rdsdt_dtsacct;
grant select on v_$active_instances to rdsdt_dtsacct;
grant select on v_$instance to rdsdt_dtsacct;
grant select on v_$logmnr_contents to rdsdt_dtsacct;
-- 系统基表
grant select on sys.USER$ to rdsdt_dtsacct;
grant select on sys.OBJ$ to rdsdt_dtsacct;
grant select on sys.COL$ to rdsdt_dtsacct;
grant select on sys.IND$ to rdsdt_dtsacct;
grant select on sys.ICOL$ to rdsdt_dtsacct;
grant select on sys.CDEF$ to rdsdt_dtsacct;
grant select on sys.CCOL$ to rdsdt_dtsacct;
grant select on sys.TABPART$ to rdsdt_dtsacct;
grant select on sys.TABSUBPART$ to rdsdt_dtsacct;
grant select on sys.TABCOMPART$ to rdsdt_dtsacct;
校验命令(使用新建账号登陆):select * from user_tab_privs;

Oracle 12G~19G(非租户式)

#创建数据库账号(以rdsdt_dtsacct为例)并进行授权
-- 创建账号
create user rdsdt_dtsacct IDENTIFIED BY rdsdt_dtsacct;
grant create session to rdsdt_dtsacct;
-- 授予角色
grant connect to rdsdt_dtsacct;
grant select_catalog_role to rdsdt_dtsacct;
grant logmining to rdsdt_dtsacct;
grant execute_catalog_role to rdsdt_dtsacct;
校验命令(使用新建账号登陆):select * from user_role_privs;
-- 授予系统权限
grant select any table to rdsdt_dtsacct;
grant select any transaction to rdsdt_dtsacct;
校验命令(使用新建账号登陆):select * from user_sys_privs;
-- 授予对象权限
-- 普通对象
grant select on all_objects to rdsdt_dtsacct;
grant select on all_tab_cols to rdsdt_dtsacct;
grant select on dba_registry to rdsdt_dtsacct;
grant execute on sys.dbms_logmnr to rdsdt_dtsacct;
-- 系统视图
grant select on v_$log to rdsdt_dtsacct;
grant select on v_$logfile to rdsdt_dtsacct;
grant select on v_$standby_log to rdsdt_dtsacct;    -- ADG备库接入,需要给予该视图权限;主库接入不需要
grant select on v_$archived_log to rdsdt_dtsacct;
grant select on v_$parameter to rdsdt_dtsacct;
grant select on v_$database to rdsdt_dtsacct;
grant select on v_$active_instances to rdsdt_dtsacct;
grant select on v_$instance to rdsdt_dtsacct;
grant select on v_$logmnr_contents to rdsdt_dtsacct;
-- 系统基表
grant select on sys.USER$ to rdsdt_dtsacct;
grant select on sys.OBJ$ to rdsdt_dtsacct;
grant select on sys.COL$ to rdsdt_dtsacct;
grant select on sys.IND$ to rdsdt_dtsacct;
grant select on sys.ICOL$ to rdsdt_dtsacct;
grant select on sys.CDEF$ to rdsdt_dtsacct;
grant select on sys.CCOL$ to rdsdt_dtsacct;
grant select on sys.TABPART$ to rdsdt_dtsacct;
grant select on sys.TABSUBPART$ to rdsdt_dtsacct;
grant select on sys.TABCOMPART$ to rdsdt_dtsacct;
校验命令(使用新建账号登陆):select * from user_tab_privs;

Oracle 12G~19G(租户式)

#切换至PDB,创建数据库账号(以rdsdt_dtsacct为例)并进行授权
alter session set container = <ORCLPDB1>;
-- 创建账号
create user rdsdt_dtsacct identified by rdsdt_dtsacct;
grant create session to rdsdt_dtsacct;
-- 授予角色
grant connect to rdsdt_dtsacct;
grant select_catalog_role to rdsdt_dtsacct;
grant logmining TO rdsdt_dtsacct;
grant execute_catalog_role to rdsdt_dtsacct;
校验命令(使用新建账号登陆):select * from user_role_privs;
-- 授予系统权限
grant select any table to rdsdt_dtsacct;
grant select any transaction to rdsdt_dtsacct;
校验命令(使用新建账号登陆):select * from user_sys_privs;
-- 授予对象权限
-- 普通对象
grant select on all_objects to rdsdt_dtsacct;
grant select on all_tab_cols to rdsdt_dtsacct;
grant select on dba_registry to rdsdt_dtsacct;
grant execute on sys.dbms_logmnr to rdsdt_dtsacct;
-- 系统视图
grant select on v_$pdbs to rdsdt_dtsacct;
grant select on v_$log to rdsdt_dtsacct;
grant select on v_$logfile to rdsdt_dtsacct;
grant select on v_$standby_log to rdsdt_dtsacct;    -- ADG备库接入,需要给予该视图权限;主库接入不需要
grant select on v_$archived_log to rdsdt_dtsacct;
grant select on v_$parameter to rdsdt_dtsacct;
grant select on v_$database to rdsdt_dtsacct;
grant select on v_$active_instances to rdsdt_dtsacct;
grant select on v_$instance to rdsdt_dtsacct;
grant select on v_$logmnr_contents to rdsdt_dtsacct;
-- 系统基表
grant select on sys.USER$ to rdsdt_dtsacct;
grant select on sys.OBJ$ to rdsdt_dtsacct;
grant select on sys.COL$ to rdsdt_dtsacct;
grant select on sys.IND$ to rdsdt_dtsacct;
grant select on sys.ICOL$ to rdsdt_dtsacct;
grant select on sys.CDEF$ to rdsdt_dtsacct;
grant select on sys.CCOL$ to rdsdt_dtsacct;
grant select on sys.TABPART$ to rdsdt_dtsacct;
grant select on sys.TABSUBPART$ to rdsdt_dtsacct;
grant select on sys.TABCOMPART$ to rdsdt_dtsacct;
校验命令(使用新建账号登陆):select * from user_tab_privs;
#切换至CDB$ROOT,并在如下两种方式选其一,进行账号创建并授权
alter session set container = <CDB$ROOT>;
方式一:创建C##开头的全局账号(以C##rdsdt_dtsacct为例)并进行授权
create user c##rdsdt_dtsacct identified by rdsdt_dtsacct;
grant create session to c##rdsdt_dtsacct;
grant connect to c##rdsdt_dtsacct;
grant logmining to c##rdsdt_dtsacct;
grant execute_catalog_role to c##rdsdt_dtsacct;
grant select on v_$logmnr_contents to c##rdsdt_dtsacct;
grant execute on sys.dbms_logmnr to c##rdsdt_dtsacct;
grant select on v$database to rdsdt_dtsacct;
方式二:创建数据库账号(以rdsdt_dtsacct为例)并进行授权(如使用方式二,则您需要修改Oracle数据库的默认参数)
alter session set "_ORACLE_SCRIPT"=true;
create user rdsdt_dtsacct identified by rdsdt_dtsacct;
grant create session to rdsdt_dtsacct;
grant connect to rdsdt_dtsacct;
grant logmining to rdsdt_dtsacct;
grant execute_catalog_role to rdsdt_dtsacct;
grant select on v_$logmnr_contents to rdsdt_dtsacct;
grant execute on sys.dbms_logmnr to rdsdt_dtsacct;

AWS RDS4Oracle 10G、11G、12C、18C、19C(非租户)接入方式

#创建数据库账号(以RDSDT_DTSACCT为例)并进行授权
create user rdsdt_dtsacct identified by rdsdt_dtsacct;
grant create session to rdsdt_dtsacct;
-- 授予角色
grant connect to rdsdt_dtsacct;
grant logmining to rdsdt_dtsacct;
grant execute_catalog_role to rdsdt_dtsacct;
校验命令(使用新建账号登陆):select * from user_role_privs;
-- 授予系统权限
grant select any table to rdsdt_dtsacct;
grant select any transaction to rdsdt_dtsacct;
校验命令(使用新建账号登陆):select * from user_sys_privs;
-- 授予对象权限
-- 系统视图
exec rdsadmin.rdsadmin_util.grant_sys_object('V_$LOGMNR_LOGS','RDSDT_DTSACCT','SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('ALL_OBJECTS','RDSDT_DTSACCT','SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('ALL_TAB_COLS','RDSDT_DTSACCT','SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('DBA_REGISTRY','RDSDT_DTSACCT','SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('V_$LOG','RDSDT_DTSACCT','SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('V_$LOGFILE','RDSDT_DTSACCT','SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('V_$ARCHIVED_LOG','RDSDT_DTSACCT','SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('V_$PARAMETER','RDSDT_DTSACCT','SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('V_$DATABASE','RDSDT_DTSACCT','SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('V_$ACTIVE_INSTANCES','RDSDT_DTSACCT','SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('V_$INSTANCE','RDSDT_DTSACCT','SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('V_$LOGMNR_CONTENTS','RDSDT_DTSACCT','SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('DBMS_LOGMNR','RDSDT_DTSACCT','EXECUTE');
-- 系统基表
exec rdsadmin.rdsadmin_util.grant_sys_object('USER$','RDSDT_DTSACCT','SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('OBJ$','RDSDT_DTSACCT','SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('COL$','RDSDT_DTSACCT','SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('IND$',  'RDSDT_DTSACCT','SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('ICOL$','RDSDT_DTSACCT','SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('CDEF$','RDSDT_DTSACCT','SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('CCOL$','RDSDT_DTSACCT','SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('TABPART$','RDSDT_DTSACCT','SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('TABSUBPART$','RDSDT_DTSACCT','SELECT');
exec rdsadmin.rdsadmin_util.grant_sys_object('TABCOMPART$','RDSDT_DTSACCT','SELECT');
校验命令(使用新建账号登陆):select * from user_tab_privs;

Oracle作为目标

DTS迁移过程中,需要创建数据复制账号并授权,结构迁移需要给数据采集账号授予DBA角色,全量迁移和增量迁移需要给数据采集账号授予resource角色。

结构迁移

全量迁移

增量迁移

DBA角色

resource角色

resource角色

结构迁移授予DBA权限

#创建数据库账号(以rdsdt_dtsacct为例)并进行授权
create user rdsdt_dtsacct identified by rdsdt_dtsacct;
grant create session to rdsdt_dtsacct;
grant connect to rdsdt_dtsacct;
grant dba to rdsdt_dtsacct;
#rdsdt_dtsacct账号登陆,检查是否授权完成
select * from user_tab_privs;              --授予权限:create session
select granted_role from user_role_privs;  --授予角色:connect、dba

全量迁移、增量迁移授予resoure权限

#创建数据库账号(以rdsdt_dtsacct为例)并进行授权
create user rdsdt_dtsacct identified by rdsdt_dtsacct;
grant create session to rdsdt_dtsacct;
grant connect to rdsdt_dtsacct;
grant resource to rdsdt_dtsacct;
#rdsdt_dtsacct账号登陆,检查是否授权完成
select * from user_tab_privs;              --授予权限:create session
select granted_role from user_role_privs;  --授予角色:connect、resource


相关文章
|
2天前
|
缓存 关系型数据库 MySQL
高并发架构系列:数据库主从同步的 3 种方案
本文详解高并发场景下数据库主从同步的三种解决方案:数据主从同步、数据库半同步复制、数据库中间件同步和缓存记录写key同步,旨在帮助解决数据一致性问题。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
高并发架构系列:数据库主从同步的 3 种方案
|
6天前
|
SQL Oracle 关系型数据库
Oracle数据库优化方法
【10月更文挑战第25天】Oracle数据库优化方法
17 7
|
6天前
|
Oracle 关系型数据库 数据库
oracle数据库技巧
【10月更文挑战第25天】oracle数据库技巧
11 6
|
6天前
|
存储 Oracle 关系型数据库
Oracle数据库优化策略
【10月更文挑战第25天】Oracle数据库优化策略
11 5
|
11天前
|
算法 大数据 数据库
云计算与大数据平台的数据库迁移与同步
本文详细介绍了云计算与大数据平台的数据库迁移与同步的核心概念、算法原理、具体操作步骤、数学模型公式、代码实例及未来发展趋势与挑战。涵盖全量与增量迁移、一致性与异步复制等内容,旨在帮助读者全面了解并应对相关技术挑战。
20 3
|
12天前
|
存储 Oracle 关系型数据库
数据库数据恢复—Oracle ASM磁盘组故障数据恢复案例
Oracle数据库数据恢复环境&故障: Oracle ASM磁盘组由4块磁盘组成。Oracle ASM磁盘组掉线 ,ASM实例不能mount。 Oracle数据库故障分析&恢复方案: 数据库数据恢复工程师对组成ASM磁盘组的磁盘进行分析。对ASM元数据进行分析发现ASM存储元数据损坏,导致磁盘组无法挂载。
|
20天前
|
存储 关系型数据库 MySQL
Mysql(4)—数据库索引
数据库索引是用于提高数据检索效率的数据结构,类似于书籍中的索引。它允许用户快速找到数据,而无需扫描整个表。MySQL中的索引可以显著提升查询速度,使数据库操作更加高效。索引的发展经历了从无索引、简单索引到B-树、哈希索引、位图索引、全文索引等多个阶段。
55 3
Mysql(4)—数据库索引
|
5天前
|
关系型数据库 MySQL Linux
在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。
本文介绍了在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。同时,文章还对比了编译源码安装与使用 RPM 包安装的优缺点,帮助读者根据需求选择最合适的方法。通过具体案例,展示了编译源码安装的灵活性和定制性。
37 2
|
8天前
|
存储 关系型数据库 MySQL
MySQL vs. PostgreSQL:选择适合你的开源数据库
在众多开源数据库中,MySQL和PostgreSQL无疑是最受欢迎的两个。它们都有着强大的功能、广泛的社区支持和丰富的生态系统。然而,它们在设计理念、性能特点、功能特性等方面存在着显著的差异。本文将从这三个方面对MySQL和PostgreSQL进行比较,以帮助您选择更适合您需求的开源数据库。
38 4
|
14天前
|
存储 关系型数据库 MySQL
如何在MySQL中创建数据库?
【10月更文挑战第16天】如何在MySQL中创建数据库?

推荐镜像

更多