mysql_fdw 的做用: 用來在PG中快速訪問MySQL中的數據。mysql
參考鏈接: https://www.percona.com/blog/2018/08/24/postgresql-accessing-mysql-as-a-data-source-using-mysql_fdw/git
實驗版本:github
CentOS 7.5sql
Postgrsql 11.5 編譯安裝版bash
SQL 5.7 rpm版服務器
演示環境,MySQL 和 PG部署在同一臺機器上,IP地址 192.168.2.4。app
一、MySQL中帳號受權
ide
在 192.168.2.4 這個 MySQL服務器上建立相關帳號和受權 (測試的時候權限放的比較大,實際生產上要嚴格控制權限) create user dts@'%' identified by 'dts'; grant select,update,insert,delete on zabbix.* to dts@'%';
二、編譯 mysql_fdw 擴展post
# 載入環境變量 export PATH=/usr/local/pgsql-11.5/bin:$PATH # 若是mysql是編譯安裝的,這裏可能還須要載入mysql的環境變量,相似這樣 export PATH=/usr/local/mysql:$PATH(咱們mysql使用rpm安裝,默認的PATH路徑可發現,這裏就i不用export了) # 開始編譯擴展 cd /home/postgres/ git clone https://github.com/EnterpriseDB/mysql_fdw.git cd mysql_fdw make USE_PGXS=1 make USE_PGXS=1 install chown postgres.postgres /usr/local/pgsql-11.5/lib/mysql_fdw.so # 我這裏用root帳號編譯的,須要改下最終的pg文件夾下的 .so 文件的權限
而後,修改pg的配置文件, 加入 mysql_fdw這個功能性能
shared_preload_libraries = 'mysql_fdw'
而後,重啓下PG
登陸進PG
\c testdb testdb=# \d List of relations Schema | Name | Type | Owner --------+------------+-------+--------- public | inno_order | table | repuser (1 row) # 下面是參考官方github上面的教程實踐的: testdb=# CREATE EXTENSION mysql_fdw; testdb=# CREATE SERVER mysql_server_db10 FOREIGN DATA WRAPPER mysql_fdw OPTIONS (host '192.168.2.4', port '3306'); testdb=# CREATE USER MAPPING FOR postgres SERVER mysql_server_db10 OPTIONS (username 'dts', password 'dts'); testdb=# CREATE FOREIGN TABLE screens ( "screenid" bigint NOT NULL, "name" varchar(255) NOT NULL, "hsize" int NOT NULL , "vsize" int NOT NULL , "templateid" bigint DEFAULT NULL, "userid" bigint DEFAULT NULL, "private" int NOT NULL ) SERVER mysql_server_db10 OPTIONS (dbname 'zabbix', table_name 'screens'); # 注意: PG中有些字段類型與MySQL不同,須要在PG上建表的時候注意修改適配下。 testdb=# select * from screens limit 5 ; screenid | name | hsize | vsize | templateid | userid | private ----------+----------------------+-------+-------+------------+--------+--------- 3 | System performance | 2 | 3 | 10001 | | 0 4 | Zabbix server health | 2 | 3 | 10047 | | 0 5 | System performance | 2 | 2 | 10076 | | 0 6 | System performance | 2 | 2 | 10077 | | 0 7 | System performance | 2 | 2 | 10075 | | 0 (5 rows)
實驗測了下 , mysql_fdw 對於 select update delete insert 都支持,基本上性能還能接受的。
### 其它命令:
刪除外部表:
drop foreign table screens;
刪除擴展
postgres=# drop foreign table screens; postgres=# drop user mapping for postgres server mysql_server_db10 ; postgres=# drop server mysql_server_db10 ; DROP SERVER postgres=# drop extension mysql_fdw ; DROP EXTENSION