Translating theory to practice is never easy. Morgan gives us the right steps in a play environment to move from dev.mysql.com native MySQL rpm’s to the new MySQL yum repository. I thought I would try it out.
1. Confirming existing packages
A necessary step, however immediately I have more dependencies including Perl DBD (used in several utilities) including MHA.
$ sudo su - $ rpm -qa | grep -i mysql MySQL-devel-5.6.13-1.el6.x86_64 MySQL-test-5.6.13-1.el6.x86_64 MySQL-shared-compat-5.6.13-1.el6.x86_64 MySQL-server-5.6.13-1.el6.x86_64 perl-DBD-MySQL-4.013-3.el6.x86_64 MySQL-client-5.6.13-1.el6.x86_64 MySQL-embedded-5.6.13-1.el6.x86_64 MySQL-shared-5.6.13-1.el6.x86_64 mha4mysql-node-0.54-1.el5.noarch
A further trap in the more complex real-world environments, in my case the installation of Percona XtraBackup. This will become apparent in the next step. We need to check for these packages.
$ rpm -qa | grep -i percona percona-release-0.0-1.x86_64 percona-xtrabackup-2.1.4-656.rhel6.x86_64
1. Update your environment
There is a mixed blessing here. Assuming you keep your machines current (and you should), the impact here should be minimal, but buyer beware. In my case the update wanted to update java-1.7.0-openjdk. Should not be a big deal, but what other products are impacted by updates? Java on this system for example is used by the New Relic MySQL Monitoring . What if there was some important application component that may become unravelled with some update.
Doing a blanket update on a reasonably current CentOS 6.4 system broke.
$ yum update ... Installing: Percona-SQL-shared-compat x86_64 5.0.92-b23.89.rhel6 percona 1.1 M replacing MySQL-shared.x86_64 5.6.13-1.el6 Percona-Server-shared-compat x86_64 5.5.34-rel32.0.591.rhel6 percona 3.4 M replacing MySQL-shared.x86_64 5.6.13-1.el6 Percona-Server-shared-compat-51 x86_64 5.1.72-rel14.10.597.rhel6 percona 2.4 M replacing MySQL-shared.x86_64 5.6.13-1.el6 kernel x86_64 2.6.32-358.23.2.el6 updates 26 M Transaction Summary ============================================================================================================================================ Install 4 Package(s) Upgrade 26 Package(s) ... Transaction Check Error: file /usr/lib64/libmysqlclient.so.12.0.0 from install of Percona-SQL-shared-compat-5.0.92-b23.89.rhel6.x86_64 conflicts with file from package MySQL-shared-compat-5.6.13-1.el6.x86_64 file /usr/lib64/libmysqlclient.so.14.0.0 from install of Percona-SQL-shared-compat-5.0.92-b23.89.rhel6.x86_64 conflicts with file from package MySQL-shared-compat-5.6.13-1.el6.x86_64 file /usr/lib64/libmysqlclient_r.so.12.0.0 from install of Percona-SQL-shared-compat-5.0.92-b23.89.rhel6.x86_64 conflicts with file from package MySQL-shared-compat-5.6.13-1.el6.x86_64 file /usr/lib64/libmysqlclient_r.so.14.0.0 from install of Percona-SQL-shared-compat-5.0.92-b23.89.rhel6.x86_64 conflicts with file from package MySQL-shared-compat-5.6.13-1.el6.x86_64 file /usr/lib64/libmysqlclient.so.16.0.0 from install of Percona-Server-shared-compat-5.5.34-rel32.0.591.rhel6.x86_64 conflicts with file from package MySQL-shared-compat-5.6.13-1.el6.x86_64 file /usr/lib64/libmysqlclient_r.so.16.0.0 from install of Percona-Server-shared-compat-5.5.34-rel32.0.591.rhel6.x86_64 conflicts with file from package MySQL-shared-compat-5.6.13-1.el6.x86_64 file /usr/lib64/libmysqlclient.so.12.0.0 conflicts between attempted installs of Percona-Server-shared-compat-5.5.34-rel32.0.591.rhel6.x86_64 and Percona-SQL-shared-compat-5.0.92-b23.89.rhel6.x86_64 file /usr/lib64/libmysqlclient.so.14.0.0 conflicts between attempted installs of Percona-Server-shared-compat-5.5.34-rel32.0.591.rhel6.x86_64 and Percona-SQL-shared-compat-5.0.92-b23.89.rhel6.x86_64 file /usr/lib64/libmysqlclient_r.so.12.0.0 conflicts between attempted installs of Percona-Server-shared-compat-5.5.34-rel32.0.591.rhel6.x86_64 and Percona-SQL-shared-compat-5.0.92-b23.89.rhel6.x86_64 file /usr/lib64/libmysqlclient_r.so.14.0.0 conflicts between attempted installs of Percona-Server-shared-compat-5.5.34-rel32.0.591.rhel6.x86_64 and Percona-SQL-shared-compat-5.0.92-b23.89.rhel6.x86_64 ...
The problem here is an unhealthy relationship between repositories for Percona Xtrabackup. I don’t know the reason, but this is the curse of dependencies that make real world upgrades more complex.
Updating just MySQL is rather useless as it’s installed by rpm.
$ yum update MySQL-server Loaded plugins: fastestmirror, presto Loading mirror speeds from cached hostfile * base: mirror.cogentco.com * extras: mirror.cogentco.com * updates: mirror.trouble-free.net Setting up Update Process No Packages marked for Update
Removing existing MySQL
Stopping MySQL is easy. Making a decision about, should I backup important files, like the config file, or the data should be considered here. The reality is for a production system, assume something unexpected will happen, even if you have tested it. Being able to go back in any step of an upgrade is actually more important than the step itself. So the following IS NOT ENOUGH in a production system.
service mysql stop
This old dinosaur learned a new trick in the yum interactive shell. Cool!
Note, I am doing a point release upgrade here, from .13 to .14.
$ yum shell > remove MySQL-client-5.6.13-1.el6 MySQL-embedded-5.6.13-1.el6 MySQL-server-5.6.13-1.el6 MySQL-shared-5.6.13-1.el6 MySQL-devel-5.6.13-1.el6 MySQL-test-5.6.13-1.el6 MySQL-shared-compat-5.6.13-1.el6 > install mysql-community-server > run
Now the fun begins, you have to read carefully what is happening, check out the Removing for dependencies section.
============================================================================================================================================ Package Arch Version Repository Size ============================================================================================================================================ Installing: mysql-community-server x86_64 5.6.14-3.el6 mysql-community 51 M Removing: MySQL-client x86_64 5.6.13-1.el6 installed 81 M MySQL-devel x86_64 5.6.13-1.el6 installed 19 M MySQL-embedded x86_64 5.6.13-1.el6 installed 431 M MySQL-server x86_64 5.6.13-1.el6 installed 235 M MySQL-shared x86_64 5.6.13-1.el6 installed 8.4 M MySQL-shared-compat x86_64 5.6.13-1.el6 installed 11 M MySQL-test x86_64 5.6.13-1.el6 installed 318 M Installing for dependencies: mysql-community-client x86_64 5.6.14-3.el6 mysql-community 18 M mysql-community-common x86_64 5.6.14-3.el6 mysql-community 296 k mysql-community-libs x86_64 5.6.14-3.el6 mysql-community 1.8 M Removing for dependencies: cronie x86_64 1.4.4-7.el6 @CentOS6-Base/$releasever 166 k cronie-anacron x86_64 1.4.4-7.el6 @CentOS6-Base/$releasever 43 k crontabs noarch 1.10-33.el6 @CentOS6-Base/$releasever 2.4 k mha4mysql-node noarch 0.54-1.el5 installed 98 k percona-xtrabackup x86_64 2.1.4-656.rhel6 @percona 24 M perl-DBD-MySQL x86_64 4.013-3.el6 @base 338 k postfix x86_64 2:2.6.6-2.2.el6_1 @CentOS6-Base/$releasever 9.7 M sysstat x86_64 9.0.4-20.el6 @base 807 k Transaction Summary ============================================================================================================================================ Install 4 Package(s) Remove 15 Package(s)
Also, you need to quit the yum shell.
> quit Leaving Shell
Verification
So, we have now installed MySQL via the new yum repositories, and we can verify this.
$ service mysqld start Starting mysqld: [ OK ] $ mysql -e "SELECT VERSION()" +------------+ | VERSION() | +------------+ | 5.6.14-log | +------------+ $ chkconfig mysqld on
But, we now have a broken system, because dependencies were removed.
Extra steps needed
Installation of Percona Backup.
$ yum install percona-xtrabackup Loaded plugins: fastestmirror, presto Loading mirror speeds from cached hostfile * base: mirrors.advancedhosters.com * extras: mirror.cogentco.com * updates: mirror.trouble-free.net Setting up Install Process Resolving Dependencies --> Running transaction check ---> Package percona-xtrabackup.x86_64 0:2.1.5-680.rhel6 will be installed --> Processing Dependency: perl(DBD::mysql) for package: percona-xtrabackup-2.1.5-680.rhel6.x86_64 --> Running transaction check ---> Package perl-DBD-MySQL.x86_64 0:4.013-3.el6 will be installed --> Processing Dependency: libmysqlclient.so.16(libmysqlclient_16)(64bit) for package: perl-DBD-MySQL-4.013-3.el6.x86_64 --> Processing Dependency: libmysqlclient.so.16()(64bit) for package: perl-DBD-MySQL-4.013-3.el6.x86_64 --> Running transaction check ---> Package Percona-Server-shared-51.x86_64 0:5.1.72-rel14.10.597.rhel6 will be installed --> Finished Dependency Resolution Dependencies Resolved ============================================================================================================================================ Package Arch Version Repository Size ============================================================================================================================================ Installing: percona-xtrabackup x86_64 2.1.5-680.rhel6 percona 6.8 M Installing for dependencies: Percona-Server-shared-51 x86_64 5.1.72-rel14.10.597.rhel6 percona 2.1 M perl-DBD-MySQL x86_64 4.013-3.el6 base 134 k Transaction Summary ============================================================================================================================================ Install 3 Package(s) Total size: 9.1 M Total download size: 2.3 M Installed size: 30 M Is this ok [y/N]: y Downloading Packages: Setting up and reading Presto delta metadata Processing delta metadata Package(s) data still to download: 2.3 M (1/2): Percona-Server-shared-51-5.1.72-rel14.10.597.rhel6.x86_64.rpm | 2.1 MB 00:00 (2/2): perl-DBD-MySQL-4.013-3.el6.x86_64.rpm | 134 kB 00:00 -------------------------------------------------------------------------------------------------------------------------------------------- Total 9.7 MB/s | 2.3 MB 00:00 Running rpm_check_debug Running Transaction Test Transaction Test Succeeded Running Transaction Installing : Percona-Server-shared-51-5.1.72-rel14.10.597.rhel6.x86_64 1/3 Installing : perl-DBD-MySQL-4.013-3.el6.x86_64 2/3 Installing : percona-xtrabackup-2.1.5-680.rhel6.x86_64 3/3 Verifying : percona-xtrabackup-2.1.5-680.rhel6.x86_64 1/3 Verifying : perl-DBD-MySQL-4.013-3.el6.x86_64 2/3 Verifying : Percona-Server-shared-51-5.1.72-rel14.10.597.rhel6.x86_64 3/3 Installed: percona-xtrabackup.x86_64 0:2.1.5-680.rhel6 Dependency Installed: Percona-Server-shared-51.x86_64 0:5.1.72-rel14.10.597.rhel6 perl-DBD-MySQL.x86_64 0:4.013-3.el6 Complete!
Please explain this one to be batman, removing MySQL removed the sysstat package. Very weird.
$ iostat -bash: iostat: command not found $ yum install sysstat Loaded plugins: fastestmirror, presto Loading mirror speeds from cached hostfile * base: mirrors.advancedhosters.com * extras: mirror.cogentco.com * updates: centos.someimage.com Setting up Install Process Resolving Dependencies --> Running transaction check ---> Package sysstat.x86_64 0:9.0.4-20.el6 will be installed --> Processing Dependency: /etc/cron.d for package: sysstat-9.0.4-20.el6.x86_64 --> Running transaction check ---> Package cronie.x86_64 0:1.4.4-7.el6 will be installed --> Processing Dependency: dailyjobs for package: cronie-1.4.4-7.el6.x86_64 --> Processing Dependency: /usr/sbin/sendmail for package: cronie-1.4.4-7.el6.x86_64 --> Running transaction check ---> Package cronie-anacron.x86_64 0:1.4.4-7.el6 will be installed --> Processing Dependency: crontabs for package: cronie-anacron-1.4.4-7.el6.x86_64 ---> Package postfix.x86_64 2:2.6.6-2.2.el6_1 will be installed --> Running transaction check ---> Package crontabs.noarch 0:1.10-33.el6 will be installed --> Finished Dependency Resolution Dependencies Resolved ============================================================================================================================================ Package Arch Version Repository Size ============================================================================================================================================ Installing: sysstat x86_64 9.0.4-20.el6 base 225 k Installing for dependencies: cronie x86_64 1.4.4-7.el6 base 70 k cronie-anacron x86_64 1.4.4-7.el6 base 29 k crontabs noarch 1.10-33.el6 base 10 k postfix x86_64 2:2.6.6-2.2.el6_1 base 2.0 M Transaction Summary ============================================================================================================================================ Install 5 Package(s) Total download size: 2.4 M Installed size: 11 M Is this ok [y/N]: y Downloading Packages: Setting up and reading Presto delta metadata Processing delta metadata Package(s) data still to download: 2.4 M (1/5): cronie-1.4.4-7.el6.x86_64.rpm | 70 kB 00:00 (2/5): cronie-anacron-1.4.4-7.el6.x86_64.rpm | 29 kB 00:00 (3/5): crontabs-1.10-33.el6.noarch.rpm | 10 kB 00:00 (4/5): postfix-2.6.6-2.2.el6_1.x86_64.rpm | 2.0 MB 00:00 (5/5): sysstat-9.0.4-20.el6.x86_64.rpm | 225 kB 00:00 -------------------------------------------------------------------------------------------------------------------------------------------- Total 21 MB/s | 2.4 MB 00:00 Running rpm_check_debug Running Transaction Test Transaction Test Succeeded Running Transaction Installing : 2:postfix-2.6.6-2.2.el6_1.x86_64 1/5 Installing : cronie-1.4.4-7.el6.x86_64 2/5 Installing : crontabs-1.10-33.el6.noarch 3/5 Installing : cronie-anacron-1.4.4-7.el6.x86_64 4/5 Installing : sysstat-9.0.4-20.el6.x86_64 5/5 Verifying : crontabs-1.10-33.el6.noarch 1/5 Verifying : cronie-1.4.4-7.el6.x86_64 2/5 Verifying : 2:postfix-2.6.6-2.2.el6_1.x86_64 3/5 Verifying : sysstat-9.0.4-20.el6.x86_64 4/5 Verifying : cronie-anacron-1.4.4-7.el6.x86_64 5/5 Installed: sysstat.x86_64 0:9.0.4-20.el6 Dependency Installed: cronie.x86_64 0:1.4.4-7.el6 cronie-anacron.x86_64 0:1.4.4-7.el6 crontabs.noarch 0:1.10-33.el6 postfix.x86_64 2:2.6.6-2.2.el6_1 Complete!
Re-installing MySQL MHA node.
$ cd /tmp $ wget http://mysql-master-ha.googlecode.com/files/mha4mysql-node-0.54-0.el6.noarch.rpm $ sudo rpm -ivh mha4mysql-node-*.noarch.rpm
There is now a lot more work needed to check and recheck the dependencies and verify what did work previously still works.
At this time doing this on 20 DB servers to move to the new yum repository is a fail for this client. It’s simply not worth it.
Conclusion
Theory easy, practice not to easy!