changelog/19.0/19.0.0/release_notes.md
Oracle has marked MySQL 5.7 end of life as of October 2023. Vitess is also dropping support for MySQL 5.7 from v19 onwards. Users are advised to upgrade to MySQL 8.0 while on v18 version of Vitess before upgrading to v19.
Vitess will however, continue to support importing from MySQL 5.7 into Vitess even in v19.
MYSQL_FLAVOR environment variable is now removed from all Docker Images.--vreplication_healthcheck_topology_refresh, --vreplication_healthcheck_retry_delay, and --vreplication_healthcheck_timeout.--vreplication_tablet_type flag is now deprecated and ignored.[!CAUTION]
If you are using incremental backups, you must remain on thevitess/liteimage, as the official MySQL image does not havemysqlbinloginstalled. See https://github.com/vitessio/vitess/issues/16281 for more information.
The mysqld binary is now deprecated in the vitess/lite Docker image and will be removed in a future release.
This means that the MySQL/Percona version specific image tags for the vitess/lite image are deprecated.
Below is a full list of available tags for v19.0.0 and their deprecation status:
| Image | Deprecated |
|---|---|
vitess/lite:v19.0.0 | NO |
vitess/lite:v19.0.0-mysql57 | YES |
vitess/lite:v19.0.0-mysql80 | YES |
vitess/lite:v19.0.0-percona57 | YES |
vitess/lite:v19.0.0-percona80 | YES |
If you are currently using vitess/lite as your mysqld image in your vitess-operator deployment we invite you to use an official MySQL image, such as mysql:8.0.30.
Below is an example of a kubernetes yaml file before and after upgrading to an official MySQL image:
# before:
# the image used here includes MySQL 8.0.30 and its binaries
mysqld:
mysql80Compatible: vitess/lite:v19.0.0-mysql80
# after:
# if we still want to use MySQL 8.0.30, we now have to use the
# official MySQL image with the 8.0.30 tag as shown below
mysqld:
mysql80Compatible: mysql:8.0.30 # or even mysql:8.0.34 for instance
Explain statement format vitess and vexplain were deprecated in v16 and removed in v19 version.
Use VExplain Statement for understanding Vitess plans.
vtctldclient ExecuteFetchAsDBA (and similarly the vtctl and vtctlclient commands) now reject multi-statement SQL with error.
For example, vtctldclient ExecuteFetchAsDBA my-tablet "stop replica; change replication source to auto_position=1; start replica will return an error, without attempting to execute any of these queries.
Previously, ExecuteFetchAsDBA silently accepted multi statement SQL. It would (attempt to) execute all of them, but:
ExecuteFetchAsDBA does allow a specific use case of multi-statement SQL, which is where all statements are in the form of CREATE TABLE or CREATE VIEW. This is to support a common pattern of schema initialization, formalized in ApplySchema --batch-size which uses ExecuteFetchAsDBA under the hood.
Prior to 19.0 VTTablet reported how much time non-streaming executions spend waiting for consolidations to occur. In 19.0, VTTablet reports a similar stat for streaming executions in /debug/vars stat Waits.Histograms.StreamConsolidations.
/debug/varsThe build version (e.g., 19.0.0-SNAPSHOT) has been added to /debug/vars, allowing users to programmatically inspect Vitess components' build version at runtime.
--tolerable-replication-lag Sub-flagA new sub-flag --tolerable-replication-lag has been added to the command PlannedReparentShard that allows users to specify the amount of replication lag that is considered acceptable for a tablet to be eligible for promotion when Vitess makes the choice of a new primary.
This feature is opt-in and not specifying this sub-flag makes Vitess ignore the replication lag entirely.
A new flag in VTOrc with the same name has been added to control the behaviour of the PlannedReparentShard calls that VTOrc issues.
Support is added for sharded multi-table delete with target on single table using multiple table join.
Example: Delete t1 from t1 join t2 on t1.id = t2.id join t3 on t1.col = t3.col where t3.foo = 5 and t2.bar = 7
More details about how it works is available in MySQL Docs
SHOW VSCHEMA KEYSPACES QueryA SQL query, SHOW VSCHEMA KEYSPACES is now supported in Vitess. This query prints the vschema information
for all the keyspaces. It is useful for seeing the foreign key mode, whether the keyspace is sharded, and if there is an
error in the VSchema for the keyspace.
An example output of the query looks like -
mysql> show vschema keyspaces;
+----------+---------+-------------+---------+
| Keyspace | Sharded | Foreign Key | Comment |
+----------+---------+-------------+---------+
| ks | true | managed | |
| uks | false | managed | |
+----------+---------+-------------+---------+
2 rows in set (0.01 sec)
FOREIGN_KEY_CHECKS is now a Vitess Aware VariableWhen VTGate receives a query to change the FOREIGN_KEY_CHECKS value for a session, instead of sending the value down to MySQL, VTGate now keeps track of the value and changes the queries by adding SET_VAR(FOREIGN_KEY_CHECKS=On/Off) style query optimizer hints wherever required.
Explain statement can handle routed table queries now. Explain is unsupported when the tables involved in the query refers more than one keyspace. Users should use VExplain Statement in those cases.
When using multi transaction mode (the default), it is possible for Vitess to successfully commit to one shard, but fail to commit to a subsequent shard, thus breaking the atomicity of a multi-shard transaction.
In v19.0, VTGate reports partial-success commits in warnings, e.g.:
mysql> commit;
ERROR 1317 (70100): target: customer.-80.primary: vttablet: rpc error: code = Aborted desc = transaction 1703182545849001001: ended at 2023-12-21 14:07:41.515 EST (exceeded timeout: 30s) (CallerID: userData1)
mysql> show warnings;
+---------+------+----------------------------------------------------------+
| Level | Code | Message |
+---------+------+----------------------------------------------------------+
| Warning | 301 | multi-db commit failed after committing to 1 shards: 80- |
+---------+------+----------------------------------------------------------+
1 row in set, 1 warning (0.00 sec)
--vtcombo-bind-host flagA new flag --vtcombo-bind-host has been added to vttestserver that allows the users to configure the bind host that vtcombo uses. This is especially useful when running vttestserver as a docker image and you want to run vtctld commands and look at the vtcombo /debug/status dashboard.
Vitess now supports the following LOCK syntax
SELECT .. FOR SHARE (NOWAIT|SKIP LOCKED)
SELECT .. FOR UPDATE (NOWAIT|SKIP LOCKED)
Vtgate can now evaluate AVG on sharded keyspaces, by using a combination of SUM/COUNT
Common table expressions that are not recursive can now be used.
with userCount as (
select id, count(*) as nr from user group by id)
select ref.col, userCount.nr
from ref join userCount on ref.user_id = userCount.id
--strict sub-flag and strict gRPC fieldA new sub-flag --strict has been added to the command ApplyVSchema vtctl command that produces an error if unknown params are found in any Vindexes. An equivalent strict field has been added to the ApplyVSchema gRPC vtctld command.
The entire changelog for this release can be found here.
The release includes 461 merged Pull Requests.
Thanks to all our contributors: @ChaitanyaD48, @EshaanAgg, @FirePing32, @GuptaManan100, @Its-Maniaco, @Maniktherana, @Manni-99, @MrFabio, @VaibhavMalik4187, @ajm188, @aparajon, @app/dependabot, @app/github-actions, @app/vitess-bot, @aquarapid, @arthurschreiber, @austenLacy, @beingnoble03, @brendar, @davidpiegza, @dbussink, @deepthi, @derekperkins, @ejortegau, @frouioui, @gerayking, @glokta1, @harshit-gangal, @iheanyi, @jwangace, @lixin963, @mattlord, @mattrobenolt, @maxenglander, @mcrauwel, @mdlayher, @olyazavr, @pbibra, @pnacht, @rajivharlalka, @ravicodelabs, @rbranson, @rohit-nayak-ps, @samanthadrago, @shlomi-noach, @skullface, @systay, @testwill, @tycol7, @vmg, @wangweicugw, @williammartin, @wlx5575