The MySQL keynote at Oracle Open World 2016 announced the immediate availability of the MySQL Cloud Service, part of the larger Oracle Cloud offering. You can evaluate this now with a trial copy at cloud.oracle.com/mysql . MySQL server product manager Morgan Tocker gave two presentations at the event including a deep dive session.
This is the first release of the MySQL cloud service. As with all first releases there are some highlights and some pipeline features. All major cloud providers have MySQL offerings. AWS RDS (traditional, MAZ and Aurora) GCP Cloud SQL and Azure MySQL App Service . Users of OpenStack have Trove for comparison. I am not going to be evaluating features between cloud offerings in this post.
Highlights
The differentiating highlights as I see them from the presentation. I will provide a followup blog on actual usage at a later time.
- MySQL 5.7
- MySQL Enterprise Edition (a key difference with other cloud providers)
- MySQL Enterprise features like Firewall, Thread Pool, Auditing etc
- MySQL Enterprise support is included in price
- MySQL Enterprise Monitor (MEM) is available and included in price
- SSH access to machine
- SSH access is a non-privileged user (opc). This shows and intention on security first policy.
- Separated partitioning in OS/MySQL disk layout
- ZFS. (Nice, I have missed using this)
- Optimized partition workloads different for data and sequential logging
- Two predefined backup policies, ZFS appliance (7 day retention) and cloud storage (30 day retention)
- The managed backup philosophy is a weekly full backup, and daily incrementals
- Sane default MySQL configuration (my.cnf)
- Patching notification and capability. Automated backup before patching, and rollback capability
-
The Ksplice Oracle UEK functionality for improved host uptime with security vulnerabilities or kernel improvements
Observations
Features and functionality I see missing from V1 during this presentation. Some are features I would like to see, some are just observations, and some are likely present features but not discussed. I will leave it up the reader to decide which is which.
- No MySQL 5.6. There was mention of supporting two versions in future moving forward (i.e. 5.7 and 8)
- Separated MEM configuration and management. See my later thoughts on this.
- MySQL topologies and easy to apply templates, including the future MySQL InnoDB Cluster
- A longer archive storage retention capability policy for backups and/or binary logs (e.g. for compliance reasons)
- The size of the pre-defined dedicated logging partition and binary logging may be problematic for longer retention capacity
- Provisioned IOPS capacity or performance guarantees for Disk I/O
- An ability to define MySQL configuration templates (e.g. dev, test, prod, master, slave etc) and be able to select these for a new instance deployment. You can of course manage this after the fact manually.
- The compute workloads are more generic at present. There appears to be no optimized disk, network or CPU variants.
-
Improved key management being able to select an already defined SSH public key (e.g. with another instance)
The details
The MySQL Cloud Service takes the hard parts out of managing MySQL. This is deployed in the Oracle Public Cloud, leveraging the fault-tolerant regional deployments in place. This Database as a Service (PaaS) helps to remove those annoying pieces of administration including backups, patches, monitoring etc. Powered by MySQL 5.7 Enterprise edition (the only cloud provider to offer this), the cloud system version in use is identical to the downloadable on-premise version. The Cloud service offers an initially optimized MySQL configuration of my.cnf to begin with, i.e. improvements on 5.7 defaults, and has variety of compute workload sizes to choose from. Storage is a ZFS appliance, but there is no information on provisioned IOPS for intensive workloads. You can use the web interface or REST API endpoints to create, deploy and manage your cloud instances. The REST API endpoints were not demonstrated in this session.
The predefined disk layout for storage is a very sane configuration. The Operating System (Oracle Unbreakable Linux 6 ) has a dedicated partition, (not part of sizing). There is a dedicated and throughput optimized ZFS LUN for data (what you size with the setup), a dedicated and latency optimized ZFS LUN for binary and InnoDB logs (which appears not initially sizable at present) and a dedicated ZFS LUN for backups. There is also a secondary backup storage capacity by default in Cloud Storage.
The UI interface provides the capability to configure a MEM server and a MEM client. To conserve presentation time Morgan consolidated these into his initial demo instance. I feel there is room here to optimize the initial setup and to separate out the “management” server capabilities, e.g. selecting your MEM configuration, and by default offering just the MEM client authentication (if MEM server is configured). For users not familiar with MySQL Enterprise features separating the definition and management in the initial creation stage is an optimization to remove complexity. There may even be an option for a getting started quick setup step that can provision your MEM setup in a dedicated instance when there is none detected or with a new account. Here is the flip side. An inexperienced user starting out may launch a MEM server with several test instances because the initial UI setup offers these as input fields, this is not the goal when managing multiple servers. The current version of MEM shown was 3.2, with 3.3 planned. Version 3.3. includes it’s own web interface for backup management.
Some things that are not in the initial release but I’m sure are on the roadmap. One is an upsize and downsize optimization. It would appear via the demo, that when a compute size modification occurs, the existing MySQL instance is shutdown and the VM is shutdown. A new VM is provisioned using the setup and disk partitions of the prior VM. An optimization is to provision a new VM, startup MySQL, then stop MySQL on new, stop on old, unmount on old, mount on new, and start MySQL. This removes the downtime in the VM provisioning step. Ideally I’d like to see the capability to perform this on a slave, and promote a slave more seamlessly. Practically however, this has many more moving pieces than in theory and so the future use MySQL router is a solution. The upcoming MySQL InnoDB cluster will also suffer from the complexity of resizing and uptime availability, especially when nodes are of varying compute sizes. As mentioned, I would like to see pre defined MySQL configurations. I would also like the option to pre-create multiple user authentications for instances, rather than having to specific one each time. I can see for a class of servers, e.g. a load test environment of a master/slave setup, and an application with several MySQL accounts, a means of bulk user and permission management.
Under the Hood Morgan talked about the InnoDB IO configuration optimizations, the number of IO Threads, use of O_DIRECT, the redo log size and buffer pool optimized to compute shape. The thread pool is enabled by default. The same considerations are in place for the operating system, Oracle Linux 6 UEK, MySQL task priority, memlock, and ext4 filesystem.
Again, those unfamiliar with MySQL Enterprise features will need greater help and UI help understanding the features, capabilities and configuration of Firewall, Encryption, Authentication, Audit, Monitor, Backup and Thread Pool.
The SSH access is what gives this first release control to be flexible. You can modify the MySQL configuration, incorporate configuration management processes. You can utilize on system database restore capabilities. You can monitor physical resource utilizations. I am unsure of the total control of changing (or breaking the system and the kernel).
There was a lot to digest in the 45 minute practical demonstration session. I am sure as with more reading and evaluation there will be more to share. As the roadmap for MySQL InnoDB cluster develops I can see there being a good cadence on new features and functionality released for the MySQL Cloud Service.
My Live Tweets (as the presentation was happening)
- #MySQL Cloud Service features 5.7 enterprise edition, identical to download version. Optimized configuration, compute, storage #oow16 @morgo
- #MySQL Cloud Service offers Enterprise Monitor by default, server SSH access, optimized MySQL configuration for InnoDB/Disk layout #oow16
- #MySQL Cloud Service storage uses ZFS appliance. Throughput optimized LUN for data, latency optimized LUN for logs. Nice! #oow16 @morgo
- #MySQL Cloud Service backup defaults. One copy on local ZFS appliance for 7 days. Second redundant copy on cloud storage for 30 days. #oow16
- #MySQL Cloud Service storage uses ZFS appliance. Throughput optimized LUN for data, latency optimized LUN for logs. Nice! #oow16 @morgo
- #MySQL Cloud Service offers Enterprise Monitor by default, server SSH access, optimized MySQL configuration for InnoDB/Disk layout #oow16
-
- The compute workloads are more generic at present. There appears to be no optimized disk, network or CPU variants.
- An ability to define MySQL configuration templates (e.g. dev, test, prod, master, slave etc) and be able to select these for a new instance deployment. You can of course manage this after the fact manually.
- Provisioned IOPS capacity or performance guarantees for Disk I/O
-
- Patching notification and capability. Automated backup before patching, and rollback capability
- Sane default MySQL configuration (my.cnf)
- The managed backup philosophy is a weekly full backup, and daily incrementals