diff --git a/README.md b/README.md index 451b5b2..f312d2f 100644 --- a/README.md +++ b/README.md @@ -58,9 +58,10 @@ More tips: Also see: - [requirements and limitations](doc/requirements-and-limitations.md) +- [common questions](doc/questions.md) - [what if?](doc/what-if.md) - [the fine print](doc/the-fine-print.md) -- [Questions](https://github.com/github/gh-ost/issues?q=label%3Aquestion) +- [Community questions](https://github.com/github/gh-ost/issues?q=label%3Aquestion) ## What's in a name? diff --git a/doc/questions.md b/doc/questions.md new file mode 100644 index 0000000..44fe49d --- /dev/null +++ b/doc/questions.md @@ -0,0 +1,26 @@ +# How? + +### How does the cut-over work? Is it really atomic? + +The cut-over phase, where the original table is swapped away, and the _ghost_ table takes its place, is an atomic, blocking, controlled operation. + +- Atomic: the tables are swapped together. There is no gap where your table does not exist. +- Blocking: all app queries involving the migrated (original) table are either operate on the original table, or are blocked, or proceed to operate on the _new_ table (formerly the _ghost_ table, now swapped in). +- Controlled: the cut-over times out at pre-defined threshold, and is atomically aborted, then re-attempted. Cut-over only takes place when no lags are present, and otherwise no throttling reason is found. Cut-over step itself gets high priority and is never throttled. + +Read more on [cut-over](cut-over.md) and on the [cut-over design Issue](https://github.com/github/gh-ost/issues/82) + + +# Is it possible to? + +### Is it possible to add a UNIQUE KEY? + +Adding a `UNIQUE KEY` is possible, in the condition that no violation will occur. That is, you must make sure there aren't any violating rows on your table before, and during the migration. + +At this time there is no equivalent to `ALTER IGNORE`, where duplicates are implicitly and silently thrown away. The MySQL `5.7` docs say: + +> As of MySQL 5.7.4, the IGNORE clause for ALTER TABLE is removed and its use produces an error. + +It is therefore unlikely that `gh-ost` will support this behavior. + +# Why