Chapter 5. Migration
5.1. Migrating to MariaDB 10.1
my.cnf
files need to be changed to prevent these specific resources from conflicting. Additionally, it is possible to install the rh-mariadb101 Software Collection while the rh-mariadb100 Collection is still installed and even running.
Note
scl register
command.
5.1.1. Notable Differences Between the mariadb100 and rh-mariadb101 Software Collections
- Galera Cluster, a synchronous multi-master cluster, which is a standard part of MariaDB 10.1. See the Knowledgebase article about setting up Galera Cluster with the rh-mariadb101 Software Collection.
- Since MariaDB 10.1.7, the
SQL_MODE
variable is by default set toNO_ENGINE_SUBSTITUTION,NO_AUTO_CREATE_USER
while in earlier versions of MariaDB no default was set. Consequently, theGRANT
statement does not create a user by default. The setting of theSQL_MODE
variable can be changed in the configuration file. See the upstream documentation for details.
5.1.2. Upgrading from the rh-mariadb100 to the rh-mariadb101 Software Collection
Important
- Install the rh-mariadb101 Software Collection.
yum install rh-mariadb101-mariadb-server
- Inspect the configuration of rh-mariadb101, which is stored in the
/etc/opt/rh/rh-mariadb101/my.cnf
file and the/etc/opt/rh/rh-mariadb101/my.cnf.d/
directory. Compare it with the configuration of rh-mariadb100 stored in/etc/opt/rh/rh-mariadb100/my.cnf
and/etc/opt/rh/rh-mariadb100/my.cnf.d/
and adjust it if necessary. - Stop the rh-mariadb100 database server, if it is still running.
service rh-mariadb100-mariadb stop
- All the data of the rh-mariadb100 Software Collection is stored in the
/var/opt/rh/rh-mariadb100/lib/mysql/
directory. Copy the whole content of this directory to/var/opt/rh/rh-mariadb101/lib/mysql/
. You can also move the content but remember to back up your data before you continue to upgrade. - Start the rh-mariadb101 database server.
service rh-mariadb101-mariadb start
- Perform the data migration.
scl enable rh-mariadb101 mysql_upgrade
If theroot
user has a non-empty password defined (it should have a password defined), it is necessary to call the mysql_upgrade utility with the-p
option and specify the password.scl enable rh-mariadb101 -- mysql_upgrade -p
5.2. Migrating to MongoDB 3.2
5.2.1. Notable Differences Between MongoDB 2.6 and MongoDB 3.2
General Changes
- MongoDB now ships configuration files in the YAML format
- MongoDB server and tools are no longer shipped in a single package; MongoDB tools are packaged in rh-mongodb32-mongo-tools
- Improved MongoDB testsuite provided by the rh-mongodb32-mongodb-test package. For more information about usage, install this package and read the
/opt/rh/rh-mongodb32/root/usr/share/mongodb-test/README
file.
Compatibility Changes
Compatibility Changes in MongoDB 3.0
- Configuration file options changes due to inclusion of additional storage engines
- Data files must correspond to the configured storage engine; if files in the
dbPath
directory were created by a storage engine other than the current one, an error is returned - Changes due to using the WiredTiger storage engine:
oplog
entries generated by versions of MongoDB earlier than 2.2.1 are overwritten - Replica set configuration validation
- The
w:majority
semantics has been changed so that thew:majority
value is satisfied when a majority of the voting members replicates a write operation - The
local.slaves
collection has been removed - The FATAL replica set state no longer exists
- The
mongodump
,mongorestore
,mongoexport
,mongoimport
,mongofiles
, andmongooplog
tools must connect to a running MongoDB instance - The MongoDB 2.4 user model has been removed
- The localhost exception has been changed so that it allows to create only the first user on the admin database
- The
db.addUser()
function has been removed; usedb.createUser()
anddb.updateUser()
instead - TLS/SSL changes
- The
mongo
shell versions earlier than 3.0 are not compatible with 3.0 deployments of MongoDB - Index changes
- Direct access to the
system.indexes
andsystem.namespaces
collections has been deprecated - The following commands have been deprecated:
closeAllDatabases
,getoptime
,text
,indexStats
,db.collection.getIndexStats()
, anddb.collection.indexStats()
- The
Date
andTimestamp
data types are no longer equivalent for comparison purposes
Compatibility Changes in MongoDB 3.2
- The WiredTiger storage engine is now the default one
- The JavaScript engine has been changed from V8 to SpiderMonkey
- Creation of version 0 indexes is now disallowed
- Aggregation compatibility changes
5.2.2. Upgrading from the rh-mongodb26 to the rh-mongodb32 Software Collection
Important
/var/opt/rh/rh-mongodb26/lib/mongodb/
directory.
- Install the MongoDB servers and shells from the rh-mongodb30upg and rh-mongodb32 Software Collections:
~]#
yum install rh-mongodb30upg rh-mongodb30upg-mongodb rh-mongodb32 rh-mongodb32-mongodb
- Connect the
mongo
shell from the rh-mongodb26 Collection to your MongoDB 2.6 server (for example, running onlocalhost
, port27017
).~]$
scl enable rh-mongodb26 'mongo --host localhost --port 27017 admin'
- In the
mongo
shell, check your data set for compatibility issues mentioned above and fix the ones that affect your application. - Stop the MongoDB 2.6 server:
~]#
systemctl stop rh-mongodb26-mongod.service
- Copy your data to the new location:
~]#
cp -a /var/opt/rh/rh-mongodb26/lib/mongodb/* /var/opt/rh/rh-mongodb32/lib/mongodb
- Change the
dbpath
variable in the/etc/opt/rh/rh-mongodb30upg/mongod.conf
file to/var/opt/rh/rh-mongodb32/lib/mongodb/
. - Start the MongoDB server from the rh-mongodb30upg Software Collection:
~]#
systemctl start rh-mongodb30upg-mongod.service
- Connect the
mongo
shell from the rh-mongodb32 Collection to your MongoDB 3.0 server (for example, running onlocalhost
, port27017
).~]$
scl enable rh-mongodb30upg 'mongo --host localhost --port 27017 admin'
- In the
mongo
shell, check your data set for compatibility issues mentioned above and fix the ones that affect your application. - Stop the MongoDB 3.0 server.
~]#
systemctl stop rh-mongodb30upg-mongod.service
- Configure the
rh-mongodb32-mongod
daemon in the/etc/opt/rh/rh-mongodb32/mongod.conf
file. - MongoDB 3.2 has the new default storage engine, WiredTiger, which introduces performance improvements. To be able to run the MongoDB server with old data, configure the
rh-mongodb32-mongod
daemon to use the old storage engine. Uncomment theengine
property in thestorage
section in the/etc/opt/rh/rh-mongodb32/mongod.conf
file and change its value tommapv1
. - Start the MongoDB 3.2 server.
~]#
systemctl start rh-mongodb32-mongod.service
- If you want to use the WiredTiger storage engine, you have to perform additional migration steps described in the MongoDB documentation.
~]#
yum install rh-mongodb32-mongo-tools
~]$scl enable rh-mongodb32 'mongodump --out ~/mongodb.dump'
~]#systemctl stop rh-mongodb32-mongod.service
~]#rm -rf /var/opt/rh/rh-mongodb32/lib/mongodb/*
Change theengine
property in the/etc/opt/rh/rh-mongodb32/mongod.conf
towiredTiger
.~]#
systemctl start rh-mongodb32-mongod.service
~]$scl enable rh-mongodb32 'mongorestore ~/mongodb.dump'
5.3. Migrating to MySQL 5.6
my.cnf
files need to be changed to prevent these specific resources from conflicting.
5.3.1. Notable Differences Between MySQL 5.5 and MySQL 5.6
- The service has been renamed to
rh-mysql56-mysqld
in both Red Hat Enterprise Linux 6 and Red Hat Enterprise Linux 7 - The
test
database is no longer created by default - Configuration files for the rh-mysql56 Software Collection are the
/etc/opt/rh/rh-mysql56/my.cnf
file and in the/etc/opt/rh/rh-mysql56/my.cnf.d/
directory - Variable files including the database files for the rh-mysql56 Software Collection are located in the
/var/opt/rh/rh-mysql56/lib/
directory - The log file for the MySQL daemon is
/var/opt/rh/rh-mysql56/log/mysql/mysqld.log
- The pid file for the daemon is
/var/run/rh-mysql56-mysqld/mysqld.pid
scl register
command.
5.3.2. Upgrading to the rh-mysql56 Software Collection
Important
- In the former scenario, the whole dump of all databases from one database is generated and
mysql
is run with the dump file as an input using themysqlimport
orLOAD DATA INFILE SQL
command within the other database. At the same time, the appropriate daemons have to be running during both dumping and restoring. You can use the--all-databases
option in themysqldump
call to include all databases in the dump. The--routines
,--triggers
, and--events
options can also be used if needed. - During the in-place upgrade, the data files are copied from one database directory to another database directory. The daemons must not be running at the time of copying. Set appropriate permissions and SELinux context for the copied files.
mysql_upgrade
command. Running mysql_upgrade
is necessary to check and repair internal tables.
root
user has a non-empty password defined (it should have a password defined), it is necessary to call the mysql_upgrade
utility with the -p
option and specify the password.
Example 5.1. Dump and Restore Upgrade
- Create a backup from the mysql55 Software Collection:
~]#
service mysql55-mysqld start
Starting mysql55-mysqld: [ OK ] ~]#scl enable mysql55 -- mysqldump --all-databases --routines --events > dump.sql
~]#service mysql55-mysqld stop
Stopping mysql55-mysqld: [ OK ]For upgrading from the mariadb55 Software Collection in Red Hat Enterprise Linux 6, usemariadb55-mysqld
as the service name.For upgrading from the mariadb55 Software Collection in Red Hat Enterprise Linux 7, usemariadb55-mariadb
as the service name.For upgrading from MariaDB 5.5 from base Red Hat Enterprise Linux 7, usemariadb
as the service name and do not usescl enable mysql55 --
when creating the dump. - Import the dumped database into the rh-mysql56 Software Collection:
~]#
service rh-mysql56-mysqld start
Starting rh-mysql56-mysqld: [ OK ] ~]#scl enable rh-mysql56 'mysql' < dump.sql
~]#scl enable rh-mysql56 'mysql_upgrade -u root -p'
Enter password: Looking for 'mysql' as: mysql Looking for 'mysqlcheck' as: mysqlcheck Running 'mysqlcheck with default connection arguments Running 'mysqlcheck with default connection arguments a.t1 OK mysql.columns_priv OK <skipped tables list> mysql.user OK Running 'mysql_fix_privilege_tables'... OK
Example 5.2. In-place Upgrade from MySQL 5.5
~]#service mysql55-mysqld stop
Stopping mysql55-mysqld [ OK ] ~]#service rh-mysql56-mysqld stop
Stopping rh-mysql56-mysqld: [ OK ] ~]#rm -rf /var/opt/rh/rh-mysql56/lib/mysql/
~]#cp -r /opt/rh/mysql55/root/var/lib/mysql/ /var/opt/rh/rh-mysql56/lib/mysql/
~]#chown -R mysql:mysql /var/opt/rh/rh-mysql56/lib/mysql/
~]#restorecon -R /var/opt/rh/rh-mysql56/lib/mysql/
~]#service rh-mysql56-mysqld start
Starting rh-mysql56-mysqld: [ OK ] ~]#scl enable rh-mysql56 'mysql_upgrade -u root -p'
Enter password: Looking for 'mysql' as: mysql Looking for 'mysqlcheck' as: mysqlcheck Running 'mysqlcheck with default connection arguments Running 'mysqlcheck with default connection arguments a.t1 OK mysql.columns_priv OK <skipped tables list> mysql.user OK Running 'mysql_fix_privilege_tables'... OK
/opt/rh/mariadb55/root/var/lib/mysql/
as a source when copying the data.
/var/lib/mysql/
as a source when copying the data.
5.4. Migrating to PostgreSQL 9.5
5.4.1. Notable Differences Between PostgreSQL 9.4 and PostgreSQL 9.5
Content | postgresql | postgresql92 | rh-postgresql94 | rh-postgresql95 |
---|---|---|---|---|
Executables | /usr/bin/ | /opt/rh/postgresql92/root/usr/bin/ | /opt/rh/rh-postgresql94/root/usr/bin/ | /opt/rh/rh-postgresql95/root/usr/bin/ |
Libraries | /usr/lib64/ | /opt/rh/postgresql92/root/usr/lib64/ | /opt/rh/rh-postgresql94/root/usr/lib64/ | /opt/rh/rh-postgresql95/root/usr/lib64/ |
Documentation | /usr/share/doc/postgresql/html/ | /opt/rh/postgresql92/root/usr/share/doc/postgresql/html/ | /opt/rh/rh-postgresql94/root/usr/share/doc/postgresql/html/ | /opt/rh/rh-postgresql95/root/usr/share/doc/postgresql/html/ |
PDF documentation | /usr/share/doc/postgresql-docs/ | /opt/rh/postgresql92/root/usr/share/doc/postgresql-docs/ | /opt/rh/rh-postgresql94/root/usr/share/doc/postgresql-docs/ | /opt/rh/rh-postgresql95/root/usr/share/doc/postgresql-docs/ |
Contrib documentation | /usr/share/doc/postgresql-contrib/ | /opt/rh/postgresql92/root/usr/share/doc/postgresql-contrib/ | /opt/rh/rh-postgresql94/root/usr/share/doc/postgresql-contrib/ | /opt/rh/rh-postgresql95/root/usr/share/doc/postgresql-contrib/ |
Source | not installed | not installed | not installed | not installed |
Data | /var/lib/pgsql/data/ | /opt/rh/postgresql92/root/var/lib/pgsql/data/ | /var/opt/rh/rh-postgresql94/lib/pgsql/data/ | /var/opt/rh/rh-postgresql95/lib/pgsql/data/ |
Backup area | /var/lib/pgsql/backups/ | /opt/rh/postgresql92/root/var/lib/pgsql/backups/ | /var/opt/rh/rh-postgresql94/lib/pgsql/backups/ | /var/opt/rh/rh-postgresql95/lib/pgsql/backups/ |
Templates | /usr/share/pgsql/ | /opt/rh/postgresql92/root/usr/share/pgsql/ | /opt/rh/rh-postgresql94/root/usr/share/pgsql/ | /opt/rh/rh-postgresql95/root/usr/share/pgsql/ |
Procedural Languages | /usr/lib64/pgsql/ | /opt/rh/postgresql92/root/usr/lib64/pgsql/ | /opt/rh/rh-postgresql94/root/usr/lib64/pgsql/ | /opt/rh/rh-postgresql95/root/usr/lib64/pgsql/ |
Development Headers | /usr/include/pgsql/ | /opt/rh/postgresql92/root/usr/include/pgsql/ | /opt/rh/rh-postgresql94/root/usr/include/pgsql/ | /opt/rh/rh-postgresql95/root/usr/include/pgsql/ |
Other shared data | /usr/share/pgsql/ | /opt/rh/postgresql92/root/usr/share/pgsql/ | /opt/rh/rh-postgresql94/root/usr/share/pgsql/ | /opt/rh/rh-postgresql95/root/usr/share/pgsql/ |
Regression tests | /usr/lib64/pgsql/test/regress/ (in the -test package) | /opt/rh/postgresql92/root/usr/lib64/pgsql/test/regress/ (in the -test package) | /opt/rh/rh-postgresql94/root/usr/lib64/pgsql/test/regress/ (in the -test package) | /opt/rh/rh-postgresql95/root/usr/lib64/pgsql/test/regress/ (in the -test package) |
5.4.2. Migrating from a Red Hat Enterprise Linux System Version of PostgreSQL to the PostgreSQL 9.5 Software Collection
pg_upgrade
tool (recommended), or dump the database data into a text file with SQL commands and import it in the new database. Note that the second method is usually significantly slower and may require manual fixes; see the PostgreSQL documentation for more information about this upgrade method. The following procedures are applicable for both Red Hat Enterprise Linux 6 and Red Hat Enterprise Linux 7 system versions of PostgreSQL.
Important
/var/lib/pgsql/data/
directory.
Procedure 5.1. Fast Upgrade Using the pg_upgrade
Tool
- Stop the old PostgreSQL server to ensure that the data is not in an inconsistent state. To do so, type the following at a shell prompt as
root
:service postgresql stop
To verify that the server is not running, type:service postgresql status
- Verify that the old directory
/var/lib/pgsql/data/
exists:file /var/lib/pgsql/data/
and back up your data. - Verify that the new data directory
/var/opt/rh/rh-postgresql95/lib/pgsql/data/
does not exist:file /var/opt/rh/rh-postgresql95/lib/pgsql/data/
If you are running a fresh installation of PostgreSQL 9.5, this directory should not be present in your system. If it is, back it up by running the following command asroot
:mv /var/opt/rh/rh-postgresql95/lib/pgsql/data{,-scl-backup}
- Upgrade the database data for the new server by running the following command as
root
:scl enable rh-postgresql95 -- postgresql-setup --upgrade
Alternatively, you can use the/opt/rh/rh-postgresql95/root/usr/bin/postgresql-setup --upgrade
command.Note that you can use the--upgrade-from
option for upgrade from different versions of PostgreSQL. The list of possible upgrade scenarios is available using the--upgrade-ids
option.It is recommended that you read the resulting/var/lib/pgsql/upgrade_rh-postgresql95-postgresql.log
log file to find out if any problems occurred during the upgrade. - Start the new server as
root
:service rh-postgresql95-postgresql start
It is also advised that you run theanalyze_new_cluster.sh
script as follows:su - postgres -c 'scl enable rh-postgresql95 ~/analyze_new_cluster.sh'
- Optionally, you can configure the PostgreSQL 9.5 server to start automatically at boot time. To disable the old system PostgreSQL server, type the following command as
root
:chkconfig postgresql off
To enable the PostgreSQL 9.5 server, type asroot
:chkconfig rh-postgresql95-postgresql on
- If your configuration differs from the default one, make sure to update configuration files, especially the
/var/opt/rh/rh-postgresql95/lib/pgsql/data/pg_hba.conf
configuration file. Otherwise only thepostgres
user will be allowed to access the database.
Procedure 5.2. Performing a Dump and Restore Upgrade
- Ensure that the old PostgreSQL server is running by typing the following at a shell prompt as
root
:service postgresql start
- Dump all data in the PostgreSQL database into a script file. As
root
, type:su - postgres -c 'pg_dumpall > ~/pgdump_file.sql'
- Stop the old server by running the following command as
root
:service postgresql stop
- Initialize the data directory for the new server as
root
:scl enable rh-postgresql95-postgresql -- postgresql-setup --initdb
- Start the new server as
root
:service rh-postgresql95-postgresql start
- Import data from the previously created SQL file:
su - postgres -c 'scl enable rh-postgresql95 "psql -f ~/pgdump_file.sql postgres"'
- Optionally, you can configure the PostgreSQL 9.5 server to start automatically at boot time. To disable the old system PostgreSQL server, type the following command as
root
:chkconfig postgresql off
To enable the PostgreSQL 9.5 server, type asroot
:chkconfig rh-postgresql95-postgresql on
- If your configuration differs from the default one, make sure to update configuration files, especially the
/var/opt/rh/rh-postgresql95/lib/pgsql/data/pg_hba.conf
configuration file. Otherwise only thepostgres
user will be allowed to access the database.
5.4.3. Migrating from the PostgreSQL 9.4 Software Collection to the PostgreSQL 9.5 Software Collection
pg_upgrade
tool (recommended), or dump the database data into a text file with SQL commands and import it in the new database. Note that the second method is usually significantly slower and may require manual fixes; see the PostgreSQL documentation for more information about this upgrade method.
Important
/var/opt/rh/rh-postgresql94/lib/pgsql/data/
directory.
Procedure 5.3. Fast Upgrade Using the pg_upgrade
Tool
- Stop the old PostgreSQL server to ensure that the data is not in an inconsistent state. To do so, type the following at a shell prompt as
root
:service rh-postgresql94-postgresql stop
To verify that the server is not running, type:service rh-postgresql94-postgresql status
- Verify that the old directory
/var/opt/rh/rh-postgresql94/lib/pgsql/data/
exists:file /var/opt/rh/rh-postgresql94/lib/pgsql/data/
and back up your data. - Verify that the new data directory
/var/opt/rh/rh-postgresql95/lib/pgsql/data/
does not exist:file /var/opt/rh/rh-postgresql95/lib/pgsql/data/
If you are running a fresh installation of PostgreSQL 9.5, this directory should not be present in your system. If it is, back it up by running the following command asroot
:mv /var/opt/rh/rh-postgresql95/lib/pgsql/data{,-scl-backup}
- Upgrade the database data for the new server by running the following command as
root
:scl enable rh-postgresql95 -- postgresql-setup --upgrade --upgrade-from=rh-postgresql94-postgresql
Alternatively, you can use the/opt/rh/rh-postgresql95/root/usr/bin/postgresql-setup --upgrade --upgrade-from=rh-postgresql94-postgresql
command.Note that you can use the--upgrade-from
option for upgrading from different versions of PostgreSQL. The list of possible upgrade scenarios is available using the--upgrade-ids
option.It is recommended that you read the resulting/var/lib/pgsql/upgrade_rh-postgresql95-postgresql.log
log file to find out if any problems occurred during the upgrade. - Start the new server as
root
:service rh-postgresql95-postgresql start
It is also advised that you run theanalyze_new_cluster.sh
script as follows:su - postgres -c 'scl enable rh-postgresql95 ~/analyze_new_cluster.sh'
- Optionally, you can configure the PostgreSQL 9.5 server to start automatically at boot time. To disable the old PostgreSQL 9.4 server, type the following command as
root
:chkconfig rh-postgresql94-postgreqsql off
To enable the PostgreSQL 9.5 server, type asroot
:chkconfig rh-postgresql95-postgresql on
- If your configuration differs from the default one, make sure to update configuration files, especially the
/var/opt/rh/rh-postgresql95/lib/pgsql/data/pg_hba.conf
configuration file. Otherwise only thepostgres
user will be allowed to access the database.
Procedure 5.4. Performing a Dump and Restore Upgrade
- Ensure that the old PostgreSQL server is running by typing the following at a shell prompt as
root
:service rh-postgresql94-postgresql start
- Dump all data in the PostgreSQL database into a script file. As
root
, type:su - postgres -c 'scl enable rh-postgresql94 "pg_dumpall > ~/pgdump_file.sql"'
- Stop the old server by running the following command as
root
:service rh-postgresql94-postgresql stop
- Initialize the data directory for the new server as
root
:scl enable rh-postgresql95-postgresql -- postgresql-setup --initdb
- Start the new server as
root
:service rh-postgresql95-postgresql start
- Import data from the previously created SQL file:
su - postgres -c 'scl enable rh-postgresql95 "psql -f ~/pgdump_file.sql postgres"'
- Optionally, you can configure the PostgreSQL 9.5 server to start automatically at boot time. To disable the old PostgreSQL 9.4 server, type the following command as
root
:chkconfig rh-postgresql94-postgresql off
To enable the PostgreSQL 9.5 server, type asroot
:chkconfig rh-postgresql95-postgresql on
- If your configuration differs from the default one, make sure to update configuration files, especially the
/var/opt/rh/rh-postgresql95/lib/pgsql/data/pg_hba.conf
configuration file. Otherwise only thepostgres
user will be allowed to access the database.
5.5. Migrating to nginx 1.8
/opt/rh/rh-nginx18/root/
. The error log is stored in /var/opt/rh/rh-nginx18/log/nginx
by default, and the init script is called rh-nginx18-nginx
.
/etc/opt/rh/rh-nginx18/nginx/
directory. Configuration files in nginx 1.8 have the same format as in the previous versions and they are compatible among versions 1.4, 1.6, and 1.8.
Important
/opt/rh/nginx16/root/
tree.
/opt/rh/nginx16/root/
tree, replicate those changes in the new /opt/rh/rh-nginx18/root/
and /etc/opt/rh/rh-nginx18/nginx/
directories, too.