Первоначально Написано Мухаммедом Ирфаном
Обновления MySQL являются необходимыми задачами, и мы здесь, в Службе поддержки Percona, задаем множество вопросов, касающихся передовых методов обновления MySQL. В этом посте рассматриваются рекомендуемые способы обновления MySQL в различных сценариях.
Зачем нужны обновления MySQL? Причин много, и они включают в себя: доступ к новым функциям, преимущества в производительности, исправление ошибок…. Тем не менее, обновления MySQL могут быть рискованными, если они не были предварительно тщательно протестированы с вашим приложением, потому что процесс может его сломать, помешать нормальному функционированию приложения — или могут возникнуть проблемы с производительностью после обновления. Кроме того, я предлагаю следить за новыми выпусками MySQL и Percona Server — посмотрите, что изменилось в самой последней версии. Возможно, в последнем выпуске есть исправление проблемы, с которой вы столкнулись.
Обновление одной основной версии через дамп SQL:
Обновление между одной основной версией охватывает обновление с Percona Server 5.1 до 5.5 или Percona Server 5.5 до 5.6, и то же самое относится к Oracle MySQL.
Прежде всего, обновление между одной основной версией не является ни простым, ни безопасным. Сначала вы должны прочитать документацию « Обновление с предыдущих серий » здесь и здесь. В этой документации, пожалуйста, уделите особое внимание всем разделам, помеченным как « Несовместимые изменения », и проверьте, могут ли эти изменения повлиять на вас. Могут быть изменения конфигурации, а также переименованные переменные, устаревшие переменные устарели и введены новые переменные — поэтому убедитесь, что вы правильно настроили my.cnf. Для конкретных изменений Percona Server, пожалуйста, смотрите здесь и здесь для Percona Server 5.5 и Percona Server 5.6, соответственно.
Теперь есть несколько возможных подходов, которые вы можете использовать, когда один может быть более осуществимым, чем другой, в зависимости от текущей топологии репликации и общего размера данных — и один также может быть безопаснее другого. Позвольте мне показать вам процедуру обновления … пример обновления с Percona Server 5.5 до Percona Server 5.6.
В целом, существует два типа обновлений MySQL:
- Вместо того , чтобы использовать существующий каталог данных для новой основной версии MySQL, просто запустив mysql_upgrade после обновления двоичных файлов,
- Дамп SQL на старую версию, а затем восстановите его на новой версии (используя утилиту mysqldump или альтернативы, такие как mydumper ).
Также в целом второй тип безопаснее, но, как вы можете ожидать, процесс обновления MySQL будет намного медленнее.
Теоретически, самый безопасный сценарий:
- Дамп всех пользовательских грантов (используя http://www.percona.com/doc/percona-toolkit/2.2/pt-show-grants.html )
- Дамп всех данных (кроме базы данных MySQL) из MySQL 5.5 в дамп SQL и восстановления на MySQL 5.6
- Восстановить пользовательские гранты
Вот основная процедура (вы должны остановить запись приложения перед запуском).
1) Захват информации о пользователях и разрешениях. Это создаст резервную копию всех существующих пользовательских привилегий.
$ wget percona.com/get/pt-show-grants; $ perl pt-show-grants --user=root --ask-pass --flush > /root/grants.sql
2) Создайте логический дамп экземпляра 5.5, исключая базы данных mysql, information_schema и performance_schema:
$ mysql -BNe "SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME NOT IN ('mysql', 'performance_schema', 'information_schema')" | tr 'n' ' ' > /root/dbs-to-dump.sql $ mysqldump --routines --events --single-transaction --databases $(cat /root/dbs-to-dump.sql) > /root/full-data-dump.sql
3) Стоп 5.5 экземпляр.
$ service mysql stop or $ /etc/init.d/mysql stop
4) Переместите старый datadir (при условии, что / var / lib / mysql; измените в соответствии с вашими настройками):
$ mv /var/lib/mysql/ /var/lib/mysql-55
5) Установите 5.6 (просто, как если бы вы не обновлялись). Если вы не используете менеджер пакетов (yum / apt-get), вероятно, вам нужно запустить mysql_install_db и mysql_upgrade.
6) Загрузите пользователей обратно к новой обновленной версии MySQL.
$ mysql -uroot < /root/grants.sql
7) Загрузите данные обратно в новую версию MySQL.
$ mysql -e "SET GLOBAL max_allowed_packet=1024*1024*1024"; $ mysql -uroot -p --max-allowed-packet=1G < /root/full-data-dump.sql;
На данный момент все таблицы были заново созданы и загружены в MySQL 5.6, поэтому каждое двоичное представление является родным для MySQL 5.6. Вы также завершили самый чистый / самый стабильный путь обновления, и ваше приложение может возобновить обслуживание — и по этой причине стоит упомянуть, что этот путь обновления одинаков с обновлением vanila MySQL или Percona Server. Кроме того, вы можете обновить Oracle MySQL до Percona Server, например, обновив Oracle MySQL 5.5 до Percona Server 5.6. Опять же, описанный путь обновления MySQL будет таким же, как и у Percona Server, который является заменой Oracle MySQL.
«Дамп SQL» также известен как логическое резервное копирование. Это безопаснее в том смысле, что при восстановлении все таблицы будут создаваться с использованием формата новых двоичных файлов MySQL, которые вы используете, что в целом обходит проблемы совместимости. Тем не менее для больших данных, таких как данные в терабайтах, гигабайтах … это может быть очень трудоемким подходом. С другой стороны, выгрузив / перезагрузив такие большие наборы данных, вы сможете восстановить много свободного места на диске, так как табличные пространства InnoDB будут воссозданы с нуля, оптимизированы и дефрагментированы. Если данные часто обновлялись / удалялись, выгоды могут быть значительными.
Незначительная версия MySQL обновляется в той же основной версии через In-Place Upgrade:
Это подразумевает обновление в той же серии, например, MySQL 5.5.35 до MySQL 5.5.38 или Percona Server 5.6.14 до последней версии Percona Server 5.6.20.
Это называется обновлением на месте, когда вы просто устанавливаете более новый двоичный пакет, а затем запускаете сценарий mysql_upgrade , который при необходимости проверяет и обновляет системные таблицы. Тем не менее, при обновлении на месте мы настоятельно рекомендуем проверять примечания к выпуску для новых функций, исправления ошибок и т. Д. Для Percona Server 5.5 и Percona Server 5.6 примечания к выпуску можно найти здесь и здесь соответственно.
Для Percona Server у нас есть дополнительные документы, описывающие некоторые детали, когда речь идет об обновлении Percona Server с акцентом на специфические для Percona функции, которые можно найти здесь и здесь. Это также покрывает полную процедуру обновления на месте с менеджером пакетов yum / apt.
Кроме того, чтобы быть в безопасности, вы можете выполнить обновление с помощью логического дампа, используя ранее описанную процедуру с помощью mysqldump или программы mydumper — где первая выполняет параллельное резервное копирование и восстановление и логическое резервное копирование — и является наиболее безопасным подходом для обновления.
MySQL Обновите непосредственно до последней версии, пропустив одну основную версию между:
Это включает в себя обновление с MySQL 5.0 до MySQL 5.5 путем пропуска промежуточной версии 5.1 или обновления MySQL 5.1 до MySQL 5.6 путем пропуска промежуточной версии 5.5. Кроме того, это также включает в себя обновление MySQL 5.6 непосредственно с MySQL 5.0, хотя должно быть очень мало пользователей, все еще использующих MySQL версии 5.0. Это также относится к Percona Server.
Для этой темы, мы бы предположили обновление Oracle MySQL или Percona Server 5.1 напрямую до версии 5.6, пропустив одну основную версию 5.5 между ними.
Прежде всего, это серьезное обновление и огромный шаг вперед по сравнению с одной основной версией MySQL. То есть это рискованно. Обновление с использованием только двоичных файлов обновление не поддерживается, и небезопасно пропускать основные версии между ними, поэтому вы никогда не должны делать это с 5.0-> 5.5, 5.1-> 5.6 и, конечно, не для 5.0-> 5.6. Одна проблема заключается в том, что не все изменения в версиях MySQL имеют обратную совместимость. Были введены некоторые различия, которые могут повлиять как на обработку данных, так и на поведение сервера, включая язык SQL, а также внутренние компоненты сервера и систем хранения MySQL. Другое дело, что между версиями MySQL 5.0 и 5.6 был изменен ряд переменных по умолчанию, что может привести к совершенно другому, неожиданному поведению. Например, начиная с MySQL 5.5, механизм хранения по умолчанию — InnoDBи поскольку MySQL 5.6 по умолчанию InnoDB будет использовать отдельное табличное пространство для каждой таблицы, также была введена репликация GTID . Но есть еще много деталей, которые я не буду здесь перечислять. Все эти изменения описаны в документации « Обновление с предыдущих серий », как описано выше.
Стоит отметить, что обновление с помощью пропуска одной основной версии настоятельно не рекомендуется. Обновление с MySQL 5.1 до 5.6 не должно выполняться за один раз. Вместо этого я бы предложил обновить версию 5.1 до 5.5, а затем версию 5.5 до 5.6 и запускать mysql_upgrade на каждом шаге. Это поможет справиться с изменениями в форматах, как описано в руководстве.
Меры предосторожности при обновлении MySQL:
Меры предосторожности при обновлении MySQL являются неотъемлемой частью самого обновления. Перед обновлением убедитесь, что вы тщательно протестировали все части приложения с нужной версией MySQL. Это особенно необходимо для обновления между основными версиями или если вы обновляете, пропустив одну основную версию между ними (например, обновление с MySQL 5.1 до MySQL 5.6).
Обязательно внимательно прочитайте заметки о выпуске и знаете обо всех изменениях. Вы можете найти примечания к выпуску Oracle MySQL 5.5 и 5.6 следующим образом:
http://dev.mysql.com/doc/relnotes/mysql/5.5/en/
http://dev.mysql.com/doc/relnotes/mysql/5.6/en/
Хотя конкретные примечания к выпуску Percona Server можно найти ниже для тех же версий, что описаны выше.
http://www.percona.com/doc/percona-server/5.5/release-notes/release-notes_index.html
http://www.percona.com/doc/percona-server/5.6/release-notes/release -notes_index.html
Если вы планируете перейти на Oracle MySQL 5.6 или Percona Server 5.6, я бы рекомендовал сначала проверить наличие критических ошибок. Ошибки, о которых вы должны знать:
http://bugs.mysql.com/bug.php?id=66546
http://bugs.mysql.com/bug.php?id=68953
http://bugs.mysql.com/bug.php?id= 69444
http://bugs.mysql.com/bug.php?id=70922
http://bugs.mysql.com/bug.php?id=72794
http://bugs.mysql.com/bug.php?id = 73820
Обновить иерархию:
Это еще один важный аспект любого обновления MySQL. Вы должны планировать свое обновление вместе с иерархией обновлений. Это всегда рекомендуется: сначала обновите серверы dev / QA, а затем подготовьте серверы, прежде чем переходить к производству. Фактически, вы можете сэкономить обновленные экземпляры, где вы выбрали обновленные версии MySQL, а затем тщательно протестировать свое приложение.
Если вы довольны обновлением MySQL на своих тестовых серверах, промежуточных серверах и т. Д., Вы можете начать обновление MySQL на своих производственных серверах. В средах репликации мы настоятельно рекомендуем сначала обновить подчиненные MySQL (по одному), а затем, наконец, обновить мастер MySQL. В действительности, вы можете сначала обновить одного из подчиненных и запустить его на несколько дней, чтобы быть в безопасности — при этом внимательно следя за его производительностью. Если у вас нет настройки репликации, возможно, стоит создать реплику, чтобы сначала протестировать на ней более новую версию MySQL. Как только вы довольны результатами, вы можете обновить оставшихся рабов и, наконец, хозяина.
Как программное обеспечение Percona помогает вам в обновлении MySQL:
В любом обновлении MySQL на помощь приходит Percona Toolkit . Percona Tookit содержит ряд инструментов, которые очень помогают.
pt-upgrade является одним из таких инструментов. Это позволяет вам проверить, обрабатывает ли новый экземпляр MySQL некоторые конкретные запросы, по крайней мере, так же быстро, как и старая версия. Там могут быть некоторые существенные различия, так как оптимизатор запросов MySQL сильно изменился между версиями 5.1 и 5.6, а также статистика данных может обновляться, следовательно, план запроса может измениться. Вы можете проверить далее в руководстве об изменениях оптимизатора.
pt-query-digest — еще один замечательный инструмент, который может помочь вам в обновлении. Вы можете воспроизвести свой медленный журнал запросов для существующих и новых требуемых версий MySQL до и после проверки производительности запроса.
Вы также можете воспользоваться преимуществами Percona Cloud Tools for MySQL, который является размещенной службой, предоставляющей доступ к информации о производительности запросов для всех видов использования MySQL. Вы можете зарегистрироваться бесплатно сейчас, потому что эта услуга находится в публичной бета-версии. Облачные инструменты Percona, помимо прочего, позволяют визуально проверять производительность ваших запросов после обновления MySQL.
Настоятельно рекомендуется сделать резервную копию ваших данных перед обновлением MySQL. Percona XtraBackup является бесплатным и открытым исходным кодом (как и все программное обеспечение Percona). Это инструмент горячего резервного копирования, который выполняет резервное копирование ваших данных в режиме онлайн, не снижая возможности чтения / записи из базы данных, и будет создавать резервные копии ваших данных с незначительным воздействием.
И последнее, но не менее важное: вы также найдете этот пост довольно полезным: «Обновление MySQL». Это несколько лет, но все еще очень актуально. А также взгляните на этот информативный вебинар «Обновление до MySQL 5.6: лучшие практики». Оба из генерального директора Percona Петра Зайцева .
Вывод:
обновление MySQL может показаться простой задачей, но на самом деле это не так. В этом посте я постарался охватить большинство сценариев обновления MySQL, с которыми вы столкнетесь. Опять же, я рекомендую кратко протестировать части вашего приложения, прежде чем запускать его «вживую», иначе это может сломать ваше приложение или его часть — или может снизить производительность вместо увеличения производительности. Наконец, я рекомендую иметь план понижения до обновления MySQL на случай, если что-то пойдет не так. Планирование правильной процедуры понижения сократит время простоя вашего приложения, когда что-то пойдет не так. Я с нетерпением жду ваших комментариев и вопросов ниже.