暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

解锁磐维数据库技能:轻松操作外部表,实现数据自由穿梭

原创 飞天 2025-05-07
360

1、外部表介绍

在磐维数据库中,用户可以将外部数据源(如文件系统、外部表、视图等)的数据映射为数据库中的一张表,并对其进行查询、连接和并行操作等,就像对普通表进行操作一样,从而实现跨数据库的数据访问。通过这种方式,可以方便地整合不同数据库系统中的数据,实现数据的共享和协同工作。

下面讲述在磐维数据库中操作远程mysql数据库表的全部过程,希望对大家有所帮助!

2、环境说明

主机名 ip地址 OS版本 内存、CPU 数据库
node1 192.*.*.60 Centos7.9 4G 、 1个双核 磐维PanWeiDB_V2.0-S3.1.0_B01版本
node2 192.*.*.20 Centos7.9 4G 、 1个双核 mysql 8.0.39版本

3、环境准备

3.1 外部(mysql)服务器上操作

3.1.1.准备测试用户 mysql> create user extuser1 identified by '******'; Query OK, 0 rows affected (0.02 sec) 3.1.2.准备测试表 mysql> create table testdb.exttab( -> id int, -> name varchar(10) -> ); Query OK, 0 rows affected (0.05 sec) mysql> insert into testdb.exttab values(1,'a'); insert into testdb.exttab values(2,'b'); Query OK, 1 row affected (0.02 sec) mysql> insert into testdb.exttab values(2,'b'); Query OK, 1 row affected (0.00 sec) mysql> insert into testdb.exttab values(3,'c'); Query OK, 1 row affected (0.01 sec) mysql> select * from testdb.exttab; +------+------+ | id | name | +------+------+ | 1 | a | | 2 | b | | 3 | c | +------+------+ 3 rows in set (0.02 sec) mysql> 3.1.3 授权 mysql> GRANT ALL PRIVILEGES ON testdb.exttab TO 'extuser1'@'%' WITH GRANT OPTION; Query OK, 0 rows affected (0.01 sec) mysql> FLUSH PRIVILEGES; Query OK, 0 rows affected (0.00 sec) mysql>

3.2 本地(磐维)服务器上操作

3.2.1.准备测试用户和数据库 postgres=# CREATE DATABASE ywdb; CREATE DATABASE postgres=# \c ywdb Non-SSL connection (SSL connection is recommended when requiring high-security) You are now connected to database "ywdb" as user "omm". ywdb=# create user localuser password '******'; CREATE ROLE ywdb=# alter user localuser sysadmin;

4、创建外部表

4.1 创建mysql_fdw扩展

[omm@node1 ~]$ gsql -d ywdb -p 17700 -U localuser -r Password for user localuser: gsql ((PanWeiDB_V2.0-S3.1.0_B01) compiled at 2024-12-19 11:44:29 commit 5d08dc9 ) Non-SSL connection (SSL connection is recommended when requiring high-security) Type "help" for help. ywdb=> CREATE EXTENSION mysql_fdw; CREATE EXTENSION ywdb=>
4.2 创建远程(外部)服务器对象,定义主机地址、端口、数据库名 ywdb=> CREATE SERVER mysql_server FOREIGN DATA WRAPPER mysql_fdw OPTIONS (host '192.*.*.20', port '3306', dbname 'testdb'); ERROR: invalid option "dbname" HINT: Valid options in this context are: host, port, init_command, secure_auth, use_remote_estimate, ssl_key, ssl_cert, ssl_ca, ssl_capath, ssl_cipher ywdb=> CREATE SERVER mysql_server FOREIGN DATA WRAPPER mysql_fdw OPTIONS (host '192.*.*.20', port '3306'); CREATE SERVER ywdb=>

4.3 创建用户到一个外部服务器的新映射

ywdb=> CREATE USER MAPPING FOR localuser SERVER mysql_server OPTIONS (username 'extuser1', password 'Wel%1234'); CREATE USER MAPPING ywdb=>

4.4 创建外部表

ywdb=> CREATE FOREIGN TABLE F_A( id INT, name VARCHAR(10) ) SERVER mysql_server OPTIONS (dbname 'testdb',TABLE_NAME 'exttab'); CREATE FOREIGN TABLE ywdb=> \d List of relations Schema | Name | Type | Owner | Storage -----------+-------------------------------+---------------+-----------+--------- localuser | F_A | foreign table | localuser | public | pg_type_nonstrict_basic_value | view | omm | public | pw_login_info | view | omm | (3 rows)

5、访问外部表

ywdb=> select * from F_A; id | name ----+------ 1 | a 2 | b 3 | c (3 rows) ywdb=>

6、碰到的问题

6.1 磐维数据库中创建user mapping报错:

ywdb=> CREATE USER MAPPING FOR localuser SERVER mysql_server OPTIONS (username 'extuser1', password '******'); ERROR: syntax error at or near "FOR" LINE 1: CREATE USER MAPPING FOR localuser SERVER mysql_server OPTION... --查看语法 postgres=# \h create user mapping Command: CREATE USER MAPPING Description: define a new mapping of a user to a foreign server Syntax: CREATE USER MAPPING FOR panweidb_user SERVER server_name OPTIONS( username 'user name', password 'user password' ); 说明:当在OPTIONS中出现password选项时,需要保证openGauss每个节点的$GAUSSHOME/bin目录下存在usermapping.key.cipher和usermapping.key.rand文件,如果不存在这两个文件,请使用gs_guc工具生成并使用gs_ssh工具发布到openGauss每个节点的$GAUSSHOME/bin目录下。 用户的口令会加密后保存到系统表PG_USER_MAPPING中,加密时需要使用usermapping.key.cipher和usermapping.key.rand作为加密密码文件和加密因子。首次使用前需要通过如下命令创建这两个文件,并将这两个文件放入各节点目录$GAUSSHOME/bin,且确保具有读权限。gs_ssh工具可以协助您快速将文件放入各节点对应目录下。 生成usermapping.key.cipher和usermapping.key.rand文件: [omm@node1 ~]$ gs_ssh -c "gs_guc generate -o usermapping -S default -D $GAUSSHOME/bin" 其中-S参数指定default时会随机生成密码,用户也可为-S参数指定密码,此密码用于保证生成密码文件的安全性和唯一性,用户无需保存或记忆。其他参数详见《工具与命令参考》中“服务端工具 > gs_guc工具说明。 参考文章:https://blog.csdn.net/weixin_53596073/article/details/140945228 --再次执行CREATE USER MAPPING ywdb=> CREATE USER MAPPING FOR localuser SERVER mysql_server OPTIONS (username 'extuser1', password '******'); ERROR: syntax error at or near "FOR" LINE 1: CREATE USER MAPPING FOR localuser SERVER mysql_server OPTION... 临时解决办法: ywdb=> set b_format_behavior_compat_options='set_keyword_as_colname, b_format_escape,enable_user_as_keyword'; SET 长期解决办法: 修改数据库的postgresql.conf文件加入: b_format_behavior_compat_options='set_keyword_as_colname, b_format_escape,enable_user_as_keyword'

6.2 磐维数据库访问外部表报错:

ywdb=>  select * from F_A;
ERROR:  failed to connect to MySQL: Plugin caching_sha2_password could not be loaded: /root/dependency/mariadb10.5.8/mariadb-10.5.8/mariadb/lib/plugin/caching_sha2_password.so: cannot open shared object file: Permission denied

解决办法:登录mysql数据库,执行:
mysql> ALTER USER 'extuser1'@'%' IDENTIFIED WITH mysql_native_password BY '******';
Query OK, 0 rows affected (0.03 sec)

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

mysql> 

7、参考文档

https://blog.csdn.net/weixin_53596073/article/details/140945228

关于作者:
网名:飞天,墨天轮2024年度优秀原创作者,拥有 Oracle 10g OCM 认证、PGCE认证、MySQL 8.0 OCP认证以及OBCA、KCP、KCSM、ACP、磐维等众多国产数据库认证证书,目前从事Oracle、Mysql、PostgresSQL、磐维数据库管理运维工作,喜欢结交更多志同道合的朋友,热衷于研究、分享数据库技术。
微信公众号:飞天online
墨天轮:https://www.modb.pro/u/15197
如有任何疑问,欢迎大家留言,共同探讨~~~

最后修改时间:2025-05-08 14:59:48
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论