середа, 7 січня 2015 р.

Використання YUM для встановлення конкретної версії MySQL/Percona

Стисле резюме статті, яка сподобалася тим, що окрім конкретного застосування для гнучкого контролю за версіями встановленого сервера баз даних (БД) MySQL або Percona, продемонстровані цікаві прийоми роботи з YUM -- менеджера програмних пакетів для систем Linux сумісних з RHEL (RPM).

Оригінал статті: Using YUM to install specific MySQL/Percona Server versions. January 5, 2015 by Przemysław Malkowski

Задача: встановити певну (не найостаннішу) версію сервера БД Percona Server та захиститися від автоматичного оновлення на свіжішу версію.

Можливі шляхи вирішення:
  • завантажити потрібні файли RPM та встановити "вручну"
  • створити власний RPM-репозиторій, якій міститиме лише потрібні версії пакетів
  • розгортати сервери БД зі заздалегідь підготовлених образів
  • визначити версію встановленого пакету засобами програми yum
Стаття демонструє останній з зазначених методів.

Розглянемо систему CentOS6, налаштовану на роботу з репозиторієм Percona:
[root@localhost ~]# yum repolist
repo id                         repo name                                           status
base                            CentOS-6 - Base                                      6,518
extras                          CentOS-6 - Extras                                       36
percona-release-noarch          Percona-Release YUM repository - noarch                 26
percona-release-x86_64          Percona-Release YUM repository - x86_64                432
updates                         CentOS-6 - Updates                                     530
(...)

[root@localhost ~]# yum -q list available --showduplicates Percona-Server-server-56.x86_64
Available Packages
Percona-Server-server-56.x86_64       5.6.13-rel61.0.461.rhel6      percona-release-x86_64
Percona-Server-server-56.x86_64       5.6.14-rel62.0.483.rhel6      percona-release-x86_64
Percona-Server-server-56.x86_64       5.6.15-rel63.0.519.rhel6      percona-release-x86_64
Percona-Server-server-56.x86_64       5.6.16-rel64.0.el6            percona-release-x86_64
Percona-Server-server-56.x86_64       5.6.16-rel64.1.el6            percona-release-x86_64
Percona-Server-server-56.x86_64       5.6.16-rel64.2.el6            percona-release-x86_64
Percona-Server-server-56.x86_64       5.6.17-rel65.0.el6            percona-release-x86_64
Percona-Server-server-56.x86_64       5.6.17-rel66.0.el6            percona-release-x86_64
Percona-Server-server-56.x86_64       5.6.19-rel67.0.el6            percona-release-x86_64
Percona-Server-server-56.x86_64       5.6.20-rel68.0.el6            percona-release-x86_64
Percona-Server-server-56.x86_64       5.6.21-rel69.0.el6            percona-release-x86_64
Percona-Server-server-56.x86_64       5.6.21-rel70.0.el6            percona-release-x86_64
Percona-Server-server-56.x86_64       5.6.21-rel70.1.el6            percona-release-x86_64
Встановлюємо обрану версію (5.6.19), яка не є останньою:
[root@localhost ~]# yum -q install Percona-Server-server-56-5.6.19-rel67.0.el6 Percona-Ser
ver-client-56-5.6.19-rel67.0.el6 Percona-Server-shared-56-5.6.19-rel67.0.el6
 
==========================================================================================
Package                       Arch     Version               Repository              Size
==========================================================================================
Installing:
Percona-Server-client-56     x86_64    5.6.19-rel67.0.el6    percona-release-x86_64  6.8 M
Percona-Server-server-56     x86_64    5.6.19-rel67.0.el6    percona-release-x86_64   19 M
Percona-Server-shared-56     x86_64    5.6.19-rel67.0.el6    percona-release-x86_64  721 k
 
Transaction Summary
==========================================================================================
Install       3 Package(s)
 
Is this ok [y/N]: y
(...)
 
[root@localhost ~]# rpm -qa|grep Percona
Percona-Server-server-56-5.6.19-rel67.0.el6.x86_64
Percona-Server-client-56-5.6.19-rel67.0.el6.x86_64
Percona-Server-shared-56-5.6.19-rel67.0.el6.x86_64
Якщо потрібно, пізніше ми можемо замінити встановлену версію на ту, яка була перед нею:
[root@localhost ~]# service mysql status
SUCCESS! MySQL (Percona Server) running (1998)
[root@localhost ~]# service mysql stop
Shutting down MySQL (Percona Server).. SUCCESS!
 
[root@localhost ~]# yum -q downgrade Percona-Server-server-56.x86_64 Percona-Server-client
-56.x86_64 Percona-Server-shared-56.x86_64
 
==========================================================================================
Package                       Arch     Version               Repository              Size
==========================================================================================
Downgrading:
Percona-Server-client-56      x86_64   5.6.17-rel66.0.el6    percona-release-x86_64  6.8 M
Percona-Server-server-56      x86_64   5.6.17-rel66.0.el6    percona-release-x86_64   19 M
Percona-Server-shared-56      x86_64   5.6.17-rel66.0.el6    percona-release-x86_64  720 k
 
Transaction Summary
==========================================================================================
Downgrade     3 Package(s)
 
Is this ok [y/N]: y
Giving mysqld 5 seconds to exit nicely
(...)
 
[root@localhost ~]# rpm -qa|grep Percona
Percona-Server-shared-56-5.6.17-rel66.0.el6.x86_64
Percona-Server-server-56-5.6.17-rel66.0.el6.x86_64
Percona-Server-client-56-5.6.17-rel66.0.el6.x86_64
Можемо перейти навіть на декілька версій назад:
[root@localhost ~]# yum -q downgrade Percona-Server-server-56-5.6.15-rel63.0.519.rhel6 Per
cona-Server-client-56-5.6.15-rel63.0.519.rhel6 Percona-Server-shared-56-5.6.15-rel63.0.519
.rhel6
 
==========================================================================================
Package                    Arch    Version                   Repository              Size
==========================================================================================
Downgrading:
 Percona-Server-client-56  x86_64  5.6.15-rel63.0.519.rhel6  percona-release-x86_64  6.5 M
 Percona-Server-server-56  x86_64  5.6.15-rel63.0.519.rhel6  percona-release-x86_64   18 M
 Percona-Server-shared-56  x86_64  5.6.15-rel63.0.519.rhel6  percona-release-x86_64  691 k
 
Transaction Summary
==========================================================================================
Downgrade     3 Package(s)
 
Is this ok [y/N]: y
Giving mysqld 5 seconds to exit nicely
(...)
До речі, зверніть увагу на зміну вигляду результату виконання команди:
yum -q list available --showduplicates Percona-Server-server-56.x86_64
Всі версії, новіші за встановлену, позначені жирним шрифтом.
Операцію по заміні встановленої версії пакунку на старішу можна також виконати, використовуючи здатність yum до виконання декількох операцій за одну транзакцію:
[root@localhost ~]# yum shell
Loaded plugins: fastestmirror, security
Setting up Yum Shell
> remove Percona-Server-shared-56 Percona-Server-server-56 Percona-Server-client-56
Setting up Remove Process
> install Percona-Server-server-56-5.6.15-rel63.0.519.rhel6 Percona-Server-client-56-5.6.1
5-rel63.0.519.rhel6 Percona-Server-shared-56-5.6.15-rel63.0.519.rhel6
(...)
Setting up Install Process
> run
--> Running transaction check
---> Package Percona-Server-client-56.x86_64 0:5.6.15-rel63.0.519.rhel6 will be installed
---> Package Percona-Server-client-56.x86_64 0:5.6.17-rel66.0.el6 will be erased
---> Package Percona-Server-server-56.x86_64 0:5.6.15-rel63.0.519.rhel6 will be installed
---> Package Percona-Server-server-56.x86_64 0:5.6.17-rel66.0.el6 will be erased
---> Package Percona-Server-shared-56.x86_64 0:5.6.15-rel63.0.519.rhel6 will be obsoleting
---> Package Percona-Server-shared-56.x86_64 0:5.6.17-rel66.0.el6 will be erased
(...)
==========================================================================================
Package                    Arch    Version                   Repository              Size
==========================================================================================
Installing:
Percona-Server-client-56  x86_64   5.6.15-rel63.0.519.rhel6  percona-release-x86_64  6.5 M
Percona-Server-server-56  x86_64   5.6.15-rel63.0.519.rhel6  percona-release-x86_64   18 M
Percona-Server-shared-51  x86_64   5.1.73-rel14.12.624.rhel6 percona-release-x86_64  2.1 M
     replacing  mysql-libs.x86_64 5.1.73-3.el6_5
Percona-Server-shared-56  x86_64   5.6.15-rel63.0.519.rhel6  percona-release-x86_64  691 k
     replacing  mysql-libs.x86_64 5.1.73-3.el6_5
Removing:
Percona-Server-client-56  x86_64   5.6.17-rel66.0.el6        @percona-release-x86_64  33 M
Percona-Server-server-56  x86_64   5.6.17-rel66.0.el6        @percona-release-x86_64  86 M
Percona-Server-shared-56  x86_64   5.6.17-rel66.0.el6        @percona-release-x86_64 3.4 M
 
Transaction Summary
==========================================================================================
Install       4 Package(s)
Remove        3 Package(s)
 
Total download size: 27 M
Is this ok [y/N]: y
(...)
Removed:
  Percona-Server-client-56.x86_64 0:5.6.17-rel66.0.el6
  Percona-Server-server-56.x86_64 0:5.6.17-rel66.0.el6          
  Percona-Server-shared-56.x86_64 0:5.6.17-rel66.0.el6          
 
Installed:
  Percona-Server-client-56.x86_64 0:5.6.15-rel63.0.519.rhel6
  Percona-Server-server-56.x86_64 0:5.6.15-rel63.0.519.rhel6    
  Percona-Server-shared-51.x86_64 0:5.1.73-rel14.12.624.rhel6
  Percona-Server-shared-56.x86_64 0:5.6.15-rel63.0.519.rhel6    
 
Replaced:
  mysql-libs.x86_64 0:5.1.73-3.el6_5                                                                                            
 
Finished Transaction
> quit
Leaving Shell
[root@localhost ~]# rpm -qa|grep Percona
Percona-Server-shared-56-5.6.15-rel63.0.519.rhel6.x86_64
Percona-Server-client-56-5.6.15-rel63.0.519.rhel6.x86_64
Percona-Server-shared-51-5.1.73-rel14.12.624.rhel6.x86_64
Percona-Server-server-56-5.6.15-rel63.0.519.rhel6.x86_64
Звертаємо увагу на те, що транзакція відбудеться навіть у разі, якщо в системі встановлено пакунки, які залежать від тих, які перевстановлюються.
Нарешті потрібно захиститися від можливості заміни версії пакунків на найновіші під час виконання команди
yum -q update
:
[root@localhost ~]# yum -q update
 
==========================================================================================
Package                    Arch    Version                   Repository              Size
==========================================================================================
Updating:
Percona-Server-client-56   x86_64  5.6.21-rel70.1.el6        percona-release-x86_64  6.4 M
Percona-Server-server-56   x86_64  5.6.21-rel70.1.el6        percona-release-x86_64   19 M
Percona-Server-shared-56   x86_64  5.6.21-rel70.1.el6        percona-release-x86_64  721 k
 
Transaction Summary
==========================================================================================
Upgrade       3 Package(s)
 
Is this ok [y/N]: N
Exiting on user Command
Для захисту використовуємо функціональність додатку yum-plugin-versionlock:
[root@localhost ~]# yum versionlock Percona-Server-server-56 Percona-Server-client-56 Perc
ona-Server-shared-56
Loaded plugins: fastestmirror, security, versionlock
Adding versionlock on: 0:Percona-Server-server-56-5.6.15-rel63.0.519.rhel6
Adding versionlock on: 0:Percona-Server-client-56-5.6.15-rel63.0.519.rhel6
Adding versionlock on: 0:Percona-Server-shared-56-5.6.15-rel63.0.519.rhel6
versionlock added: 3
[root@localhost ~]# yum update
Loaded plugins: fastestmirror, security, versionlock
Setting up Update Process
(...)
No Packages marked for Update
Встановлені версії пакунків не буде оновлено, якщо не буде очищено перелік обов’язкових версій:
[root@localhost ~]# yum versionlock clear
...
[root@localhost ~]# yum -q versionlock list
0:Percona-Server-server-56-5.6.15-rel63.0.519.rhel6.*
0:Percona-Server-client-56-5.6.15-rel63.0.519.rhel6.*
0:Percona-Server-shared-56-5.6.15-rel63.0.519.rhel6.*
[root@localhost ~]# yum versionlock delete '0:Percona-Server-client-56-5.6.15-rel63.0.519.rhel6.*'
Loaded plugins: fastestmirror, security, versionlock
Deleting versionlock for: 0:Percona-Server-client-56-5.6.15-rel63.0.519.rhel6.*
versionlock deleted: 1
[root@localhost ~]# yum -q versionlock list
0:Percona-Server-server-56-5.6.15-rel63.0.519.rhel6.*
0:Percona-Server-shared-56-5.6.15-rel63.0.519.rhel6.*
[root@localhost ~]# yum -q update
==========================================================================================
Package                    Arch    Version                   Repository              Size
==========================================================================================
Updating:
 Percona-Server-client-56  x86_64  5.6.21-rel70.1.el6        percona-release-x86_64  6.4 M
Transaction Summary
==========================================================================================
Upgrade       1 Package(s)

Is this ok [y/N]:
Наявність можливості встановлення конкретної версії пакунків з yum стає в нагоді під час інтеграції з системами керування програмним забезпеченням на зразок Chef, Puppet або Ansible. Фіксування версії пакунків Percona для Chef задається таким блоком:
pkgs = ["Percona-Server-client-56","Percona-Server-shared-56","Percona-Server-server-56","Percona-Server-56-debuginfo"]
pkgs.each do |pkg|
        yum_package pkg do
        version "5.6.20-rel68.0.el6"
        allow_downgrade true
    end
end

Немає коментарів:

Дописати коментар