47
© MariaDB Corporation Ab 1

© MariaDB Corporation Ab 1 - SCALE yo… · © MariaDB Corporation Ab Spider Storage Engine • Developed by Kentoku Shiba • Storage engine "partitions“ tables across multiple

  • Upload
    others

  • View
    6

  • Download
    0

Embed Size (px)

Citation preview

Page 1: © MariaDB Corporation Ab 1 - SCALE yo… · © MariaDB Corporation Ab Spider Storage Engine • Developed by Kentoku Shiba • Storage engine "partitions“ tables across multiple

© MariaDB Corporation Ab 1

Page 2: © MariaDB Corporation Ab 1 - SCALE yo… · © MariaDB Corporation Ab Spider Storage Engine • Developed by Kentoku Shiba • Storage engine "partitions“ tables across multiple

© SkySQL Corporation Ab. Company Confidential.

Sharing your data with Spider

Max [email protected]

@maxmether

Page 3: © MariaDB Corporation Ab 1 - SCALE yo… · © MariaDB Corporation Ab Spider Storage Engine • Developed by Kentoku Shiba • Storage engine "partitions“ tables across multiple

© SkySQL Corporation Ab. Company Confidential.

Who is Max?

20.08.2014

Page 4: © MariaDB Corporation Ab 1 - SCALE yo… · © MariaDB Corporation Ab Spider Storage Engine • Developed by Kentoku Shiba • Storage engine "partitions“ tables across multiple

© MariaDB Corporation Ab

What is Sharding?

"A database shard is a horizontal partition of data in a database or search engine. Each

individual partition is referred to as a shard or database shard"

4

Page 5: © MariaDB Corporation Ab 1 - SCALE yo… · © MariaDB Corporation Ab Spider Storage Engine • Developed by Kentoku Shiba • Storage engine "partitions“ tables across multiple

© MariaDB Corporation Ab

Why Shard?

• The resources of one machine is not enough!• Read scaling can be achieved through master-

slave replication• Replication however only scales reads; every server still

has to write every single change

• In order to achieve write scalability something else is needed• Sharding partitions the data into different “shards”• Shards can be stored on different servers

• The sharding algorithm can have a huge impact on performance

5

Page 6: © MariaDB Corporation Ab 1 - SCALE yo… · © MariaDB Corporation Ab Spider Storage Engine • Developed by Kentoku Shiba • Storage engine "partitions“ tables across multiple

© MariaDB Corporation Ab

Disadvantages with Sharding

• Disadvantages with Sharding include:• Increased complexity of SQL • Management complexity• Multiple points of failure • Failover more complex• Backups more complex • Operational complexity added

6

Page 7: © MariaDB Corporation Ab 1 - SCALE yo… · © MariaDB Corporation Ab Spider Storage Engine • Developed by Kentoku Shiba • Storage engine "partitions“ tables across multiple

© MariaDB Corporation Ab

When do we need Sharding?

•Large Datasets

• I/O- and CPU-load is the bottleneck

• Long execution times for queries

• Effects creating indexes, statistics, maintenance of tables, ...

•When replication is not a solution

•When per instance partitioning does not help

7

Page 8: © MariaDB Corporation Ab 1 - SCALE yo… · © MariaDB Corporation Ab Spider Storage Engine • Developed by Kentoku Shiba • Storage engine "partitions“ tables across multiple

© MariaDB Corporation Ab

Replication for Scaling

8

Master Slave

Slave

Slave

Read

Write

• All writes go to MASTER• Reads can be scaled on slaves

Page 9: © MariaDB Corporation Ab 1 - SCALE yo… · © MariaDB Corporation Ab Spider Storage Engine • Developed by Kentoku Shiba • Storage engine "partitions“ tables across multiple

© MariaDB Corporation Ab

Replication or Sharding?

•Master/Slave-Replication

• Scaling for reads with a large number of connects or queries

• Useful for scenarios with a heavy read ratio

• Not the solution when you have long execution times for single queries and large data sets

• Write load cannot be scaled

• Each server needs to contain all data

9

Page 10: © MariaDB Corporation Ab 1 - SCALE yo… · © MariaDB Corporation Ab Spider Storage Engine • Developed by Kentoku Shiba • Storage engine "partitions“ tables across multiple

© MariaDB Corporation Ab

MariaDB

P3

P2

Partitioning for Scaling?

10

P1Write

Write

Write

Read

Read

Read

Page 11: © MariaDB Corporation Ab 1 - SCALE yo… · © MariaDB Corporation Ab Spider Storage Engine • Developed by Kentoku Shiba • Storage engine "partitions“ tables across multiple

© MariaDB Corporation Ab

Partitioning Types

• RANGE and RANGE COLUMNS PartitioningPARTITION BY RANGE (store_id) (

PARTITION p0 VALUES LESS THAN (1000),PARTITION p1 VALUES LESS THAN (2000),PARTITION p2 VALUES LESS THAN (3000),PARTITION p3 VALUES LESS THAN MAXVALUE);

• LIST and LIST COLUMNS PartitioningPARTITION BY LIST(store_id) (

PARTITION pNorth VALUES IN (3,5,6,9,17), PARTITION pEast VALUES IN (1,2,10,11,19,20), PARTITION pWest VALUES IN (4,12,13,14,18)):

• HASH PartitioningPARTITION BY HASH(store_id)

PARTITIONS 4;

• KEY and LINEAR KEY Partitioning

11

Page 12: © MariaDB Corporation Ab 1 - SCALE yo… · © MariaDB Corporation Ab Spider Storage Engine • Developed by Kentoku Shiba • Storage engine "partitions“ tables across multiple

© MariaDB Corporation Ab

Partitioning vs. Sharding

•Partitioning allows

• Reducing the data set for queries, when an effective partitioning rule can be defined

• Separating archive data and active data

• Distribute I/O-Load on multiple Disks

•Resources of an instance need to be shared (CPU, RAM, Kernel-Process, ...)

•Locks are still per table

12

Page 13: © MariaDB Corporation Ab 1 - SCALE yo… · © MariaDB Corporation Ab Spider Storage Engine • Developed by Kentoku Shiba • Storage engine "partitions“ tables across multiple

© MariaDB Corporation Ab

How to do Sharding

•Sharding is database partitioning across multiple instances

•Implementation of sharding using

• Application logic

• Connectors

• Proxies: MySQL Proxy, MySQL Fabric,MariaDB MaxScale

• Spider storage engine

13

Page 14: © MariaDB Corporation Ab 1 - SCALE yo… · © MariaDB Corporation Ab Spider Storage Engine • Developed by Kentoku Shiba • Storage engine "partitions“ tables across multiple

© MariaDB Corporation Ab

Where can you shard?

14

Application

Proxy

DB-Server

Shard

Page 15: © MariaDB Corporation Ab 1 - SCALE yo… · © MariaDB Corporation Ab Spider Storage Engine • Developed by Kentoku Shiba • Storage engine "partitions“ tables across multiple

© MariaDB Corporation Ab

Where can you shard?

15

Application

Proxy

DB-Server

Shard

Page 16: © MariaDB Corporation Ab 1 - SCALE yo… · © MariaDB Corporation Ab Spider Storage Engine • Developed by Kentoku Shiba • Storage engine "partitions“ tables across multiple

© MariaDB Corporation Ab

Where can you shard?

16

Application

Proxy

DB-ServerShard

Page 17: © MariaDB Corporation Ab 1 - SCALE yo… · © MariaDB Corporation Ab Spider Storage Engine • Developed by Kentoku Shiba • Storage engine "partitions“ tables across multiple

© MariaDB Corporation Ab

Spider Storage Engine

Page 18: © MariaDB Corporation Ab 1 - SCALE yo… · © MariaDB Corporation Ab Spider Storage Engine • Developed by Kentoku Shiba • Storage engine "partitions“ tables across multiple

© MariaDB Corporation Ab

Storage Engine Architecture

18

OPERATING SYSTEM / FILE SYSTEM

Application

CONNECTORS C

INTERNALSREPLICATION PLUG-INS

STORAGE ENGINE API

XtraDB InnoDB Connect Cassandra TokuDB Spider...

Par

alle

l Sla

ve

GTI

D

Mul

ti-S

ourc

e Connection Pool

SQL Interface

Parser

Optimiser

Cache/BufferBin

Log

AP

I

PerformanceNoSQL / InteroperabioityStandard

MariaDB

Authentication

Auditing

HandlerSocket

JDBC ODBC ...

Page 19: © MariaDB Corporation Ab 1 - SCALE yo… · © MariaDB Corporation Ab Spider Storage Engine • Developed by Kentoku Shiba • Storage engine "partitions“ tables across multiple

© MariaDB Corporation Ab

Spider Storage Engine

• Developed by Kentoku Shiba

• Storage engine "partitions“ tablesacross multiple database server instances

• Based on partitions with integrated sharding

• Virtual view on tables distributed across Instances

• Supports XA transactions

• Transactional storage engine

• Provides scale-outin combination with HA

• Can also use other HA

19

Application

Customer

A-HI-PQ-Z

Spider

Customet

A-H

Shard 1

Customer

I-P

Shard 2

Customer

Q-Z

Shard 3

Page 20: © MariaDB Corporation Ab 1 - SCALE yo… · © MariaDB Corporation Ab Spider Storage Engine • Developed by Kentoku Shiba • Storage engine "partitions“ tables across multiple

© MariaDB Corporation Ab

Spider Architecture

20

Application

Customer

A-H

I-P

Q-Z

Spider

Customet

A-H

Shard 1

Customer

I-P

Shard 2

Customer

Q-Z

Shard 3

No data stored for SPIDER table

Only the needed partitions stored on each node

Page 21: © MariaDB Corporation Ab 1 - SCALE yo… · © MariaDB Corporation Ab Spider Storage Engine • Developed by Kentoku Shiba • Storage engine "partitions“ tables across multiple

© MariaDB Corporation Ab

Spider Internals

• When a Spider table is created it creates a link to the remote table

• The linked table can have any engine• The linked table can use partitioning• The remote server is not spider aware• You can have multiple Spider nodes for the same

underlying tables

21

Page 22: © MariaDB Corporation Ab 1 - SCALE yo… · © MariaDB Corporation Ab Spider Storage Engine • Developed by Kentoku Shiba • Storage engine "partitions“ tables across multiple

© MariaDB Corporation Ab

General Concept for Spider Engine

• Application with connection to Spider proxy node

• CREATE TABLE spider (... ) ENGINE=SPIDER ...

•No data in Spider-Proxy

• CREATE TABLE spider (... ) ENGINE=INNODB ...

•Data in backend22

Application

Spider Proxy-Node

Backend-Node

dfdf

Page 23: © MariaDB Corporation Ab 1 - SCALE yo… · © MariaDB Corporation Ab Spider Storage Engine • Developed by Kentoku Shiba • Storage engine "partitions“ tables across multiple

© MariaDB Corporation Ab

Backend 1

Spider as a Federation

23

Application

Spider

Table 1

Application

Tabelle1

Backend

Table 1

Spider

Table 1

Table 1

Backend 2

Table 1

Page 24: © MariaDB Corporation Ab 1 - SCALE yo… · © MariaDB Corporation Ab Spider Storage Engine • Developed by Kentoku Shiba • Storage engine "partitions“ tables across multiple

© MariaDB Corporation Ab

Sharding using Spider

24

Backend 2

Application

Spider

Backend 3

T1P1

P2

P3

T1 P2 T1

P3

Backend 1

T1P1

XA 2 PC

Page 25: © MariaDB Corporation Ab 1 - SCALE yo… · © MariaDB Corporation Ab Spider Storage Engine • Developed by Kentoku Shiba • Storage engine "partitions“ tables across multiple

© MariaDB Corporation Ab

Sharding with Spider and HA

25

Backend 2

Application

Spider

Backend 3

T1P1

P2

P3

T1 P2 T1

P3

Backend 1

T1P1

XA 2 PC

P2

P3

P1

Page 26: © MariaDB Corporation Ab 1 - SCALE yo… · © MariaDB Corporation Ab Spider Storage Engine • Developed by Kentoku Shiba • Storage engine "partitions“ tables across multiple

© MariaDB Corporation Ab

Spider Availability

• Since Version 10.0.4 included in MariaDB• Spider 3.0• Spider 3.2.11 in MariaDB 10.0.14

• Spider with MySQL Server • http://spiderformysql.com/download_spider.

html• INSTALL PLUGIN spider SONAME 'ha_spider.so';

26

Page 27: © MariaDB Corporation Ab 1 - SCALE yo… · © MariaDB Corporation Ab Spider Storage Engine • Developed by Kentoku Shiba • Storage engine "partitions“ tables across multiple

© MariaDB Corporation Ab

Spider Installation

• Installation

• Spider will be shown as active Storage Engine

27

mysql -uroot -p < /usr/share/mysql/install_spider.sql

SELECT engine, support, transactions, xa FROM information_schema.engines;+--------------------+---------+--------------+------+| engine | support | transactions | xa |+--------------------+---------+--------------+------+| SPIDER | YES | YES | YES || CSV | YES | NO | NO |

Page 28: © MariaDB Corporation Ab 1 - SCALE yo… · © MariaDB Corporation Ab Spider Storage Engine • Developed by Kentoku Shiba • Storage engine "partitions“ tables across multiple

© MariaDB Corporation Ab

Spider System Tables

• Spider creates tables in the system schema (mysql)

28

MariaDB> show tables like 'spider%';+---------------------------+| Tables_in_mysql (spider%) |+---------------------------+| spider_link_failed_log || spider_link_mon_servers || spider_tables || spider_xa || spider_xa_failed_log || spider_xa_member |+---------------------------+6 rows in set (0.00 sec)

Page 29: © MariaDB Corporation Ab 1 - SCALE yo… · © MariaDB Corporation Ab Spider Storage Engine • Developed by Kentoku Shiba • Storage engine "partitions“ tables across multiple

© MariaDB Corporation Ab

Spider Variables

• 93 Spider system variables will be added

• 4 Spider status values will be added

• More Spider variables related to tables using CREATE TABLE• In MariaDB use COMMENT• In MySQL use CONNECTION

29

MariaDB> show global variables like 'spider%’;

MariaDB> show global status like 'spider%’;

Page 30: © MariaDB Corporation Ab 1 - SCALE yo… · © MariaDB Corporation Ab Spider Storage Engine • Developed by Kentoku Shiba • Storage engine "partitions“ tables across multiple

© MariaDB Corporation Ab

Spider UDFs

• Spider UDFs will be added• SPIDER_DIRECT_SQL

• Execute SQL on backend server• SPIDER_BG_DIRECT_SQL

• Execute background SQL statement on backend server

• SPIDER_COPY_TABLES• SPIDER_FLUSH_TABLE_MON_CACHE

• Reset Spider monitoring information

30

Page 31: © MariaDB Corporation Ab 1 - SCALE yo… · © MariaDB Corporation Ab Spider Storage Engine • Developed by Kentoku Shiba • Storage engine "partitions“ tables across multiple

© MariaDB Corporation Ab

Simple Spider Example

• Table definition on Spider proxy node

• Table definition on backend nodes

31

CREATE TABLE spiderfederation(id INT NOT NULL, code VARCHAR(10), PRIMARY KEY(id))ENGINE=SPIDER COMMENT 'host "192.168.56.21", user "backend", password "backend", port "3306"';

CREATE TABLE spiderfederation(id INT NOT NULL, code VARCHAR(10), PRIMARY KEY(id))ENGINE=INNODB;

Page 32: © MariaDB Corporation Ab 1 - SCALE yo… · © MariaDB Corporation Ab Spider Storage Engine • Developed by Kentoku Shiba • Storage engine "partitions“ tables across multiple

© MariaDB Corporation Ab

Spider Example with Sharding

• Table definition on Spider proxy node

32

CREATE TABLE sharding(id INT NOT NULL, code VARCHAR(10), PRIMARY KEY(id))ENGINE=SPIDER COMMENT='user "backend", password "backend", port "3306", table "sharding"'PARTITION BY RANGE(id)(

PARTITION p1 VALUES LESS THAN (100000)COMMENT 'host "192.168.56.21"',PARTITION p2 VALUES LESS THAN (200000) COMMENT 'host "192.168.56.22"',PARTITION p3 VALUES LESS THAN MAXVALUECOMMENT 'host "192.168.56.23"'

);

Page 33: © MariaDB Corporation Ab 1 - SCALE yo… · © MariaDB Corporation Ab Spider Storage Engine • Developed by Kentoku Shiba • Storage engine "partitions“ tables across multiple

© MariaDB Corporation Ab

Spider Example with Sharding

• Table definition on backend nodes

33

CREATE TABLE sharding(id INT NOT NULL, code VARCHAR(10), PRIMARY KEY(id))ENGINE=INNODB;

Page 34: © MariaDB Corporation Ab 1 - SCALE yo… · © MariaDB Corporation Ab Spider Storage Engine • Developed by Kentoku Shiba • Storage engine "partitions“ tables across multiple

© MariaDB Corporation Ab

Spider Example with Sharding

• Insert on proxy

• Shard 1

34

MariaDB> insert into sharding values (90002,"shard1"),(100100,"shard2"),(200050,"shard3");Query OK, 3 rows affected (0.04 sec)Records: 3 Duplicates: 0 Warnings: 0

MariaDB> select * from sharding;+-------+--------+| id | code |+-------+--------+| 90002 | shard1 |+-------+--------+1 rows in set (0.00 sec)

Page 35: © MariaDB Corporation Ab 1 - SCALE yo… · © MariaDB Corporation Ab Spider Storage Engine • Developed by Kentoku Shiba • Storage engine "partitions“ tables across multiple

© MariaDB Corporation Ab

Spider Example with Sharding

• Shard 2

• Shard 3

35

MariaDB> select * from sharding;+--------+--------+| id | code |+--------+--------+| 100100 | shard2 |+--------+--------+1 rows in set (0.00 sec)

MariaDB> select * from sharding;+--------+--------+| id | code |+--------+--------+| 200050 | shard3 |+--------+--------+

Page 36: © MariaDB Corporation Ab 1 - SCALE yo… · © MariaDB Corporation Ab Spider Storage Engine • Developed by Kentoku Shiba • Storage engine "partitions“ tables across multiple

© MariaDB Corporation Ab

No Automatic Rollback

36

MariaDB> begin;Query OK, 0 rows affected (0.00 sec)

MariaDB> insert into sharding values (90003,"shard1");Query OK, 1 row affected (0.01 sec)

MariaDB> insert into sharding values (100101,"shard2");Query OK, 1 row affected (0.00 sec)

MariaDB> insert into sharding values (200051,"shard3");ERROR 1429 (HY000): Unable to connect to foreign data source: 192.168.56.23MariaDB> commit;Query OK, 0 rows affected (0.01 sec)

Page 37: © MariaDB Corporation Ab 1 - SCALE yo… · © MariaDB Corporation Ab Spider Storage Engine • Developed by Kentoku Shiba • Storage engine "partitions“ tables across multiple

© MariaDB Corporation Ab

Replicating From Spider

37

Backend 2

Application

Spider

Backend 3

T1P1P2P3

T1 P2 T1P3

Backend 1

T1P1

Slave

T1P1

P2

P3

Replication

• Replication from Spider proxy to slave

• Spider proxy binary log includes the Transactions

• No direct writes on backend tables

Page 38: © MariaDB Corporation Ab 1 - SCALE yo… · © MariaDB Corporation Ab Spider Storage Engine • Developed by Kentoku Shiba • Storage engine "partitions“ tables across multiple

© MariaDB Corporation Ab

Replicating from Backend

38

Backend 2

Application

Spider

Backend 3

T1

T2 T3

Backend 1

T1

Slave

• Replication from backend withmulti-source replication

• When federation setup and writes to backend are used

Replication

T2 T3

T1 T2 T2

Application

Page 39: © MariaDB Corporation Ab 1 - SCALE yo… · © MariaDB Corporation Ab Spider Storage Engine • Developed by Kentoku Shiba • Storage engine "partitions“ tables across multiple

© MariaDB Corporation Ab

Clustering and High Availability

• Spider supports HA internally• Commit and rollback across all backends• Multiplexing to replicas using 2PC• Split-Brain-Resolution based on quorum

• You can also use other techniques for HA on the backend servers• Galera• Replication• DRBD

39

Page 40: © MariaDB Corporation Ab 1 - SCALE yo… · © MariaDB Corporation Ab Spider Storage Engine • Developed by Kentoku Shiba • Storage engine "partitions“ tables across multiple

© MariaDB Corporation Ab

Clustering and High Availability Example

CREATE TABLE backend.sbtest

(

id int(10) unsigned NOT NULL AUTO_INCREMENT,

k int(10) unsigned NOT NULL DEFAULT '0',

c char(120) NOT NULL DEFAULT '',

pad char(60) NOT NULL DEFAULT '',

PRIMARY KEY (id),

KEY k (k) )

ENGINE=spider COMMENT='wrapper "mysql", table "sbtest"'

PARTITION BY KEY (id) (

PARTITION pt1 COMMENT = 'srv "backend1 backend2_rpl" mbk "2", mkd "2",

msi "5054", link_status "0 0"',

PARTITION pt2 COMMENT = 'srv "backend2 backend1_rpl" mbk "2", mkd "2",

msi "5054", link_status "0 0" ') ;

40

Page 41: © MariaDB Corporation Ab 1 - SCALE yo… · © MariaDB Corporation Ab Spider Storage Engine • Developed by Kentoku Shiba • Storage engine "partitions“ tables across multiple

© MariaDB Corporation Ab

Clustering and High Availability Example

CREATE SERVER mon

FOREIGN DATA WRAPPER mysql

OPTIONS(

HOST '192.168.0.201’,

DATABASE 'backend',

USER 'skysql',

PASSWORD 'skyvodka',

PORT 5054

);

INSERT INTO `mysql`.`spider_link_mon_servers` VALUES

('%','%','%',5054,'mon',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,

NULL,0,NULL,NULL);

SELECT spider_flush_table_mon_cache();

41

Page 42: © MariaDB Corporation Ab 1 - SCALE yo… · © MariaDB Corporation Ab Spider Storage Engine • Developed by Kentoku Shiba • Storage engine "partitions“ tables across multiple

© MariaDB Corporation Ab

Spider and Performance

• Reading• Simple queries generally faster• Queries spanning all shards can be slower if

conditions not pushed down• Joins and complex queries can be a lot slower

• Performance optimizations available through spider functions and options

• Writing• INSERTS Generally faster as each node is independent• UPDATES depend on reads to get to rows so depends

42

Page 43: © MariaDB Corporation Ab 1 - SCALE yo… · © MariaDB Corporation Ab Spider Storage Engine • Developed by Kentoku Shiba • Storage engine "partitions“ tables across multiple

© MariaDB Corporation Ab

Spider Features

• Complete list onhttps://mariadb.com/kb/en/mariadb/documentation/storage-engines/spider/spider-feature-matrix/

• Performance• Index condition pushdown (MariaDB 10)• Engine condition pushdown for federated setup• Engine condition pushdown for shards setup

(MariaDB 10) • Batched key access• Support for handler socket• Map reduced for ORDER BY ... LIMIT 43

Page 44: © MariaDB Corporation Ab 1 - SCALE yo… · © MariaDB Corporation Ab Spider Storage Engine • Developed by Kentoku Shiba • Storage engine "partitions“ tables across multiple

© MariaDB Corporation Ab

Good To Know

• DDL statements will not be synchronized• Efficiency of sharding depends on the partitioning

rule• Sub-Partitions can be used for the backend nodes

• Query cache needs to be deactivated

• Log files per Instance• Central syslog makes sense for Audit Plugin• User privileges - Authentication Plugin?• Spider storage engine is BETA

44

Page 45: © MariaDB Corporation Ab 1 - SCALE yo… · © MariaDB Corporation Ab Spider Storage Engine • Developed by Kentoku Shiba • Storage engine "partitions“ tables across multiple

© MariaDB Corporation Ab

More Information

•https://mariadb.com/kb/en/mariadb/documentation/storage-engines/spider/

•https://mariadb.org

•http://spiderformysql.com/

•http://bazaar.launchpad.net/~kentokushiba/spiderformysql/spider-2.0-doc/files/head:/en/

45

Page 46: © MariaDB Corporation Ab 1 - SCALE yo… · © MariaDB Corporation Ab Spider Storage Engine • Developed by Kentoku Shiba • Storage engine "partitions“ tables across multiple

© SkySQL Corporation Ab. Company Confidential.

Questions ?

Max [email protected]

@maxmether

Page 47: © MariaDB Corporation Ab 1 - SCALE yo… · © MariaDB Corporation Ab Spider Storage Engine • Developed by Kentoku Shiba • Storage engine "partitions“ tables across multiple

© MariaDB Corporation Ab

Thanks!

"MySQL is a registered trademark of Oracle and/or its affiliates. Other names may be trademarks of their respective owners SkySQL is not affiliated with MySQL."