يتيح الاتصال بقواعد البيانات على خادم MySQL بعيد وتنفيذ استعلامات INSERT وSELECT لتبادل البيانات بين ClickHouse وMySQL.
يترجم محرك قاعدة البيانات MySQL الاستعلامات إلى خادم MySQL، مما يتيح لك تنفيذ عمليات مثل SHOW TABLES أو SHOW CREATE TABLE.
لا يمكنك تنفيذ الاستعلامات التالية:
RENAMECREATE TABLEALTER
إنشاء قاعدة بيانات
CREATE DATABASE [IF NOT EXISTS] db_name [ON CLUSTER cluster]
ENGINE = MySQL('host:port', ['database' | database], 'user', 'password')
[SETTINGS enable_compression=0]معلمات المحرك
host:port— عنوان خادم MySQL.database— اسم قاعدة البيانات على الخادم البعيد.user— مستخدم MySQL.password— كلمة مرور المستخدم.
الإعدادات
enable_compression
يُفعّل ضغط zlib لاتصال بروتوكول MySQL. عند ضبطه على 1، يطلب ClickHouse ضغطًا على مستوى البروتوكول من خادم MySQL.
القيمة الافتراضية: 0.
مثال:
CREATE DATABASE mysql_db
ENGINE = MySQL('localhost:3306', 'test', 'my_user', 'user_password')
SETTINGS enable_compression = 1;TLS/SSL
تُمرَّر بيانات اعتماد الاتصال المشفّر بخادم MySQL كمفاتيح مجموعة مُسمّاة (أو كوسيطات مفتاح-قيمة):
| المعلَمة | الوصف |
|---|---|
ssl_ca_pem |
محتويات شهادة CA التي يُتحقَّق باستخدامها من شهادة خادم MySQL. |
ssl_cert_pem |
محتويات شهادة العميل، لاستخدامها في المصادقة المستندة إلى الشهادات. |
ssl_key_pem |
محتويات المفتاح الخاص المرتبط بـ ssl_cert_pem. |
القيم هي محتويات ملفات PEM المقابلة، ويمكن نسخها إلى مجموعة مُسمّاة أو إلى استعلام. وتُخفى في السجلات واستعلامات SHOW، تمامًا كما تُخفى كلمات المرور.
يمكن أيضًا تقديم بيانات الاعتماد نفسها على هيئة مسارات لملفات على الخادم، في ssl_ca وssl_cert وssl_key، ولكن فقط ضمن مجموعة مُسمّاة مُعرَّفة في ملف تهيئة الخادم؛ ولا يمكن تجاوز هذه القيمة في استعلام. يفتح الخادم هذه الملفات بصلاحياته الخاصة، لذا فإن قبول مسار من SQL سيتيح لأي مستخدم قادر على تعريف مصدر MySQL استكشاف نظام الملفات المحلي والمصادقة باستخدام شهادة ومفتاح لا يُسمح له بقراءتهما بنفسه.
دعم أنواع البيانات
| MySQL | ClickHouse |
|---|---|
| UNSIGNED TINYINT | UInt8 |
| TINYINT | Int8 |
| UNSIGNED SMALLINT | UInt16 |
| SMALLINT | Int16 |
| UNSIGNED INT, UNSIGNED MEDIUMINT | UInt32 |
| INT, MEDIUMINT | Int32 |
| UNSIGNED BIGINT | UInt64 |
| BIGINT | Int64 |
| FLOAT | Float32 |
| DOUBLE | Float64 |
| DATE | Date |
| DATETIME, TIMESTAMP | DateTime |
| BINARY | FixedString |
| POINT | Point |
| LINESTRING | LineString |
| POLYGON | Polygon |
| MULTILINESTRING | MultiLineString |
| MULTIPOLYGON | MultiPolygon |
| MULTIPOINT | MultiPoint |
| GEOMETRY | Geometry |
يُتحكَّم في تحويل الأنواع المكانية، باستثناء POINT الذي يُحوَّل دائمًا، بواسطة العلامة geometry في الإعداد mysql_datatypes_support_level، وهي مفعّلة افتراضيًا. يُعيَّن نوع العمود العام GEOMETRY إلى النوع الشامل Geometry (وهو Variant للأنواع الهندسية المحددة). ولأن هذا العمود يمكن أن يحتوي على قيمة من أي نوع فرعي، فإن قراءة قيمة لا يوجد لنوعها الفرعي مقابل في ClickHouse (GEOMETRYCOLLECTION) تؤدي إلى طرح استثناء وقت القراءة؛ ويُقبل عدم التوافق هذا مقابل استخدام نوع هندسي ملائم. تُحوَّل الأعمدة المعرّفة بالنوع GEOMETRYCOLLECTION إلى النوع String، شأنها شأن جميع أنواع بيانات MySQL الأخرى.
النوع Nullable مدعوم. يُعيَّن العمود المكاني إلى String (Nullable(String) إذا كان قابلاً للقيم الفارغة) بدلًا من نوع هندسي في ثلاث حالات: إذا كان معرّفًا بالنوع GEOMETRYCOLLECTION؛ أو إذا كانت العلامة geometry معطّلة ولم يكن النوع POINT؛ أو إذا كان العمود قابلاً للقيم الفارغة ولم يكن النوع POINT، لأن Point هو النوع الهندسي الوحيد الذي يمكن تداخله داخل Nullable. في الحالات الثلاث جميعها، تحتفظ السلسلة بالقيمة كما يعيدها MySQL تمامًا: بادئة SRID من 4 بايتات تتبعها حمولة WKB، لذا أزل هذه البايتات الأربع الأولى قبل تمريرها إلى مفكك ترميز WKB.
دعم المتغيرات العامة
لتحقيق توافق أفضل، يمكنك الإشارة إلى المتغيرات العامة بأسلوب MySQL، بالشكل @@identifier.
المتغيرات التالية مدعومة:
versionmax_allowed_packet
مثال:
SELECT @@version;أمثلة الاستخدام
جدول في MySQL:
mysql> USE test;
Database changed
mysql> CREATE TABLE `mysql_table` (
-> `int_id` INT NOT NULL AUTO_INCREMENT,
-> `float` FLOAT NOT NULL,
-> PRIMARY KEY (`int_id`));
Query OK, 0 rows affected (0,09 sec)
mysql> insert into mysql_table (`int_id`, `float`) VALUES (1,2);
Query OK, 1 row affected (0,00 sec)
mysql> select * from mysql_table;
+------+-----+
| int_id | value |
+------+-----+
| 1 | 2 |
+------+-----+
1 row in set (0,00 sec)قاعدة بيانات في ClickHouse تتبادل البيانات مع خادم MySQL:
CREATE DATABASE mysql_db ENGINE = MySQL('localhost:3306', 'test', 'my_user', 'user_password') SETTINGS read_write_timeout=10000, connect_timeout=100;SHOW DATABASES┌─name─────┐
│ default │
│ mysql_db │
│ system │
└──────────┘SHOW TABLES FROM mysql_db┌─name─────────┐
│ mysql_table │
└──────────────┘SELECT * FROM mysql_db.mysql_table┌─int_id─┬─value─┐
│ 1 │ 2 │
└────────┴───────┘INSERT INTO mysql_db.mysql_table VALUES (3,4)SELECT * FROM mysql_db.mysql_table┌─int_id─┬─value─┐
│ 1 │ 2 │
│ 3 │ 4 │
└────────┴───────┘