FDW для MySQL

1. Подготовка среды MySQL

Среда MySQL:

Host: 127.0.0.1
Port: 3306
User: root
Database: test

Теперь создайте тестовую таблицу:

mysql> CREATE TABLE test(c1 int primary key, c2 int);
Query OK, 0 rows affected (0.01 sec)

Поскольку таблицы InnoDB в MySQL должны иметь первичный ключ, чтобы разрешить запись через mysql_fdw, c1 определён как первичный ключ.

Добавьте тестовые данные:

mysql> INSERT INTO test VALUES(0,0),(1,1),(2,2);
Query OK, 3 rows affected (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 0

2. Установка mysqlclient и общих библиотек

2.1 Установка mysqlclient

Примечание
Приведённые ниже команды установки являются примерами. Названия RPM-пакетов могут отличаться в различных yum-репозиториях. Скачайте версию MySQL, подходящую для вашей системы. Не копируйте и не выполняйте эти команды без проверки.

Примечание
Конфигурация и установка должны быть выполнены на каждом узле кластера.

Выполните команду установки с правами sudo или от имени пользователя root:

sudo yum install -y rh-mysql57-mysql

Для оффлайн-сред скачайте следующие три RPM-пакета с официального сайта MySQL (common, libs, client). Затем установите их с помощью следующих команд:

sudo rpm -ivh mysql-community-client-8.0.11-1.el7.x86_64.rpm --nodeps
sudo rpm -ivh mysql-community-common-8.0.11-1.el7.x86_64.rpm --nodeps
sudo rpm -ivh mysql-community-libs-8.0.11-1.el7.x86_64.rpm --nodeps

2.2 Настройка общих библиотек

Создайте символическую ссылку из libmysqlclient.so в каталог YMatrix lib:

ln -s /lib64/mysql/libmysqlclient.so.18 /opt/ymatrix/matrixdb5/lib/libmysqlclient.so

Добавьте путь libmysqlclient.so в конфигурационный файл:

echo "/lib64/mysql/libmysqlclient.so.18" >> /etc/ld.so.conf

3. Создание FDW в YMatrix

Войдите в YMatrix и используйте mysql_fdw для подключения к ранее созданной таблице MySQL.

Сначала создайте расширение mysql_fdw:

mxadmin=# CREATE EXTENSION mysql_fdw;
CREATE EXTENSION

Создайте описание сервера для MySQL:

mxadmin=# CREATE SERVER server_mysql FOREIGN DATA WRAPPER mysql_fdw OPTIONS (host '127.0.0.1', port '3306');
CREATE SERVER

Создайте отображение пользователя:

mxadmin=# CREATE USER MAPPING FOR mxadmin SERVER server_mysql OPTIONS (username 'root', password '123456');
CREATE USER MAPPING

Создайте внешнюю таблицу:

mxadmin=# CREATE FOREIGN TABLE ext_mysql (c1 int, c2 int) SERVER server_mysql OPTIONS (dbname 'test', table_name 'test');
CREATE FOREIGN TABLE

4. Чтение и запись данных с использованием mysql_fdw

После успешного создания внешней таблицы вы можете читать и записывать данные в таблицу MySQL test, обращаясь непосредственно к внешней таблице.

4.1 Запрос данных

Следующий запрос показывает, что данные во внешней таблице совпадают с исходной таблицей:

mxadmin=# SELECT * FROM ext_mysql;
 c1 | c2
----+----
  0 |  0
  1 |  1
  2 |  2
(3 rows)

4.2 Вставка данных

Вставьте данные во внешнюю таблицу:

mxadmin=# INSERT INTO ext_mysql VALUES(3,3);
INSERT 0 1

После вставки подключитесь к MySQL и проверьте данные:

mysql> SELECT * FROM test;
+----+------+
| c1 | c2   |
+----+------+
|  0 |    0 |
|  1 |    1 |
|  2 |    2 |
|  3 |    3 |
+----+------+
4 rows in set (0.00 sec)

Данные успешно записаны в таблицу MySQL test.