_dyr ([info]_dyr) wrote,

Как обновить MySQL 5.0 до MySQL 5.1 в Gentoo

Возникла необходимость обновить MySQL 5.0 до MySQL 5.1 в Gentoo с минимальным перерывом в работе, описываю свой опыт. Вполне допускаю, что будет для гуру банальностью, тем не менее, как "напоминалка" будет полезна. Хотя бы мне самому :)
Основой послужили статья Peter Davies'a и руководство MySQL Upgrading MySQL



1. Работа с пакетами

     Поскольку Gentoo считает, что версии 5.1 недостойны называться стабильными (хотя она уже довольно давно является "релизной", в отличии от 5.4. планы развития веток MySQL), то они занесены в список исключений, т.н. "masked", так что при попытке установить их без вынесения из этого списка приведут к ошибке.
     Чтобы обойти это, нужно зарегистрировать эту версию MySQL в "список исключений из списка исключений" :)
               echo "=dev-db/mysql-community-5.1.21_beta" >> /etc/portage/package.unmask
      Если просто комментировать соответствующие строки в файле /usr/portage/profiles/package.mask, как это предлагает Питер, то при каждом обновлении пакета этот файл будет обновлятся, с соответственным удалением комментариев. Не совершайте такой ошибки, какую сделал я :)
     Gentoo у меня собран 64-битной версией (что, кто-то иначе делает для серверов БД и более чем 3ГБ памяти?), поэтому не обойтись без явного задания разрешения сборки MySQL под amd64. Для этого вносим соответствующую запись в очередной файл исключений:
               echo "dev-db/mysql-community ~amd64" >> /etc/portage/package.keywords
и на всякий случай:
               echo "virtual/mysql ~amd64" >> /etc/portage/package.keywords
     Если просто выставить в командной строке ACCEPT_KEYWORDS="~amd64", то Gentoo будет без понятия, что такое ключевое слово было выставлено при установке, и как итог, любое (авто-)обновление пакета остановится с ошибкой "masked by: ~amd64".
     Думаете, что этого уже достаточно для установки? Ошибаетесь :) Помните, что у нас ещё стоит версия 5.0? Так вот чтобы установить 5.1, нам надо сначала удалить 5.0. Явно не быстрое дело, а время простоя, напомню, критично. Поэтому вместо остановки работающего 5.0, его удаления и компиляции 5.1, лучше сделать хитрее и воспользоваться возможностью создания бинарных пакетов. Создам сначала бинарный пакет установленного mysql-5.0, чтобы в случае неудачи с 5.1 можно было быстро откатится на предыдущую версию:
               quickpkg dev-db/mysql или emerge --verbose --buildpkg dev-db/mysql
     Затем подготовим нашу новую версию, создав бинарный пакет для последующей установки:
               emerge --verbose --ask --buildpkgonly =dev-db/mysql-community-5.1.21_beta
      Использование distcc и ccache обычно позволяет существенно уменьшить время компиляции. У меня при использовании ccache и distcc на два сервера время сборки пакета mysql-5.0 уменьшилось на 35%.

2. Создание архивной копии

    Почему идёт вторым шагом? Потому что операции, приведённые выше, по идее не должны вызывать никаких изменений в работающем MySQL, но занимают определённое количество времени, а терять изменения, внесённые в БД за это время, не хочется.
     Делаете любым удобным для себя способом, хотя бы как это описывает Питер, через mysqldump, архивирование директории с БД после её остановки или репликацию на другой сервер. 
     Поскольку для меня было важным минимальный перерыв, а настраивать репликацию я не хотел, я воспользовался первым способом:
               mysqldump -A --opt --allow-keywords --flush-logs --hex-blob --master-data --max_allowed_packet=16M --quote-names --default-character-set=CP1251 --single-transaction --result-file=BACKUP_MYSQL_5.0.SQL

     Единственное, что я хотел бы порекомендовать, это использовать помимо указанных Питером ключей, ключ --single-transaction, который существенно ускоряет восстановление из бэкапа, и ключ --default-character-set со значением "cp1251" для тех, у кого таблицы в cp1251, а не в UTF8, который выставляется при дампах по умолчанию. У меня бекап, созданный без этих ключей весил 4.6 Гб, с ключами - 4.1 Гб



3. Обновление MySQL и таблиц

     Итак, пакеты и архивные копии готовы, предупреждаем тех.поддержку о возможных перебоях (лично я это не всегда делаю, но надо ведь :), и молимся приступаем:
     Останавливаем работающий MySQL:
              
/etc/init.d/mysql stop 
     Удаляем MySQL 5.0:
               emerge --unmerge --verbose dev-db/mysql
     Устанавливаем бинарный пакет MySQL 5.1:
              
emerge --usepkgonly --verbose =dev-db/mysql-community-5.1.21_beta.tbz2 
     Запускаем установленный MySQL 5.1:
               /etc/init.d/mysql start 

     Обновляем таблицы:
              
mysql_upgrade --user=root --password=PASSWORD --default-character-set=cp1251 --verbose
     Выдыхаем и идём за пивом  При удачном раскладе (объединяйте команды в конвейер с помощью "&&"!) это займёт меньше минуты. Учтите, что опции сервера, указанные в  /etc/mysql/my.cnf, для 5.1 могут отличатся от 5.0! Поэтому если сервер не стартует, смотрите tail /var/log/mysql/mysqld.err и исправляйте переменные. Мне, скажем, пришлось терять время, пока я убирал "skip-bdb" и "skip-federated". К сожалению, я не знаю другого способа проверить на совместимость файлы от 5.0 и 5.1, кроме как муторного сравнения документации.

Tags: database, gentoo, linux, mysql, sysadmin, работа

  • Post a new comment

    Error

    Your reply will be screened

    Your IP address will be recorded 

  • 4 comments

[info]piavlo

September 30 2009, 08:06:30 UTC 2 years ago

echo "dev-db/mysql-community ~amd64" >> /etc/portage/package.keywords
&
echo "dev-db/mysql-community" >> /etc/portage/package.keywords
will give you the same effect

[info]_dyr

September 30 2009, 08:40:55 UTC 2 years ago

Hm

I had use it as it was described in handbook.
Thanks for comment!

Anonymous

September 30 2009, 08:36:21 UTC 2 years ago

Разве нет причин держать mysql hardmasked???

Быть может это только мне так кажется но подобная фраза:

"Поскольку Gentoo считает, что версии 5.1 недостойны называться стабильными (хотя она уже довольно давно является "релизной" "

звучит довольно вызывающе.

Действительно mysql-5.1 не является стабильной и по достаточно существенной причине: сервер рушиться на базах данных поддерживаемых infrastructure team. То есть мы сами до сих пор не можем его использовать! Как вы думаете, нам стоит думать иначе? Если хотите деталей, почитайте, что пишет robbat2 о mysql в багзиле (и, думаю, не только там, и, кстати, не только он).

[info]_dyr

September 30 2009, 08:50:32 UTC 2 years ago

Ну да, вызывающе :)

А не кинете ссылкой?
На http://dev.mysql.com/downloads/ указано чётко:

Current Release (Recommended)
MySQL 5.1—Generally Available (GA) release for production use

Beta Releases
MySQL 5.4—Beta
...
Older Releases
MySQL 5.0 — Previous GA release

Кроме того, изменений между имеющимся сейчас в репозитарии 5.1.21 и анонсированным почти месяц назад 5.1.39 достаточно много, чтобы накопить багфиксы.
Create an Account
Forgot your login or password?
Facebook Twitter More login options
English • Español • Deutsch • Русский…