MariaDb is an enhanced drop-in replacement and community-developed
fork of the MySQL database system. It was developed by MariaDB
foundation, and is being led by original developers of MySQL. Working
with MariaDB is entirely same as MySQL. After Oracle bought MySQL, it is
not free and open source anymore, but MariaDB is still free and open
source.
According to
themukt,
What Oracle is doing wrong:
- New ‘enterprise’ extensions in MySQL are closed source:
- The bugs database is not public anymore
- The MySQL public repositories are not anymore actively updated.
- Security problems are not communicated nor addressed quickly (This is making Linux distributions very annoyed with Oracle)
- Instead of fixing bugs, Oracle is removing features:
- New code in MySQL 5.5 doesn’t have test cases anymore.
- Some of the new code is surprisingly good by Oracle, but
unfortunately the quality varies and a notable part needs to be
rewritten before we can include it in MariaDB
Well, are you done with MySQL? Come on, let us migrate from MySQL to
MariaDB. The migration method is much simpler than you think.
Let’s Migrate
For the testing purpose, let us create two sample databases called
testdb1, and
testdb2.
Log in to MySQL as root user using the following command:
mysql -u root -p
Enter the mysql root user password. You’ll be redirected to the mysql prompt.
Create test databases:
Enter the following commands from mysql prompt to create test databases.
mysql> create database testdb1;
Query OK, 1 row affected (0.00 sec)
mysql> create database testdb2;
Query OK, 1 row affected (0.00 sec)
To see the list of available databases, enter the following command:
mysql> show databases;
Sample output:
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| testdb1 |
| testdb2 |
+--------------------+
5 rows in set (0.00 sec)
As see above, we have totally 5 databases including the newly created databases testdb1 and testdb2.
1. Backup existing databases
The first important step is to take backup of existing databases. To
do that, enter the following command from the Terminal (not from MySQL
prompt).
mysqldump --all-databases --user=root --password --master-data > backupdatabase.sql
Oops! I got the following error.
mysqldump: Error: Binlogging on server not active
To fix this error, we have to do a small modification in
my.cnf file.
Edit my.cnf file:
On Debian/Ubuntu:
sudo vi /etc/mysql/my.cnf
On RPM based systems:
sudo vi /etc/my.cnf
Under [mysqld] section, add the following parameter.
log-bin=mysql-bin
Sample output of my my.cnf file.
[...]
[mysqld]
#
# * Basic Settings
#
user = mysql
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
port = 3306
basedir = /usr
datadir = /var/lib/mysql
tmpdir = /tmp
lc-messages-dir = /usr/share/mysql
skip-external-locking
log-bin=mysql-bin
[...]
Save and exit file. Restart mysql server.
On RPM based systems:
sudo /etc/init.d/mysqld restart
On Debian based systems:
sudo /etc/init.d/mysql restart
Now, re-run the mysqldump command to backup all databases.
mysqldump --all-databases --user=root --password --master-data > backupdatabase.sql
Sample output:
Enter password:
-- Warning: Skipping the data of table mysql.event. Specify the --events option explicitly.
The above command will backup all databases, and stores them in
backupdatabase.sql in the current directory.
2. Stop MySQL services and remove all mysql packages
First, backup the
my.cnf fie to a safe location.
Note: The my.cnf file will not be deleted when
uninstalling MySQL packages. We do it for the precaution. During MariaDB
installation, the installer will ask you to keep the existing
my.cnf(old backup) file or to use the package containers version (i.e
new one).
On RPM systems:
sudo cp /etc/my.cnf my.cnf.bak
On Deb systems:
sudo cp /etc/mysql/my.cnf my.cnf.bak
To stop mysql service, enter the following command from your Terminal.
On RPM based systems:
sudo /etc/init.d/mysqld stop
On Debian based systems:
sudo /etc/init.d/mysql stop
Then, remove mysql packages.
On RPM systems:
sudo yum remove mysql* mysql-server mysql-devel mysql-libs
The above command will take the backup of your current MySQL config file
/etc/my.cnf to
/etc/my.cnf.rpmsave.
On Debian based systems:
sudo apt-get remove mysql-server mysql-client
3. Install MariaDB
The latest CentOS 7 and Ubuntu 14.10, 14.04 contains MariaDB packages
in their official repositories. If you want to use the most recent
version MariaDb, add the MariaDB official repositories depending upon
your OS version.
Install MariaDB On RHEL 7 based systems:
Create a file
/etc/yum.repos.d/mariadb.repo,
vi /etc/yum.repos.d/mariadb.repo
Add the following lines:
# MariaDB 5.5 CentOS repository list - created 2014-12-09 08:11 UTC
# http://mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/5.5/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
Update the repositories and install mariadb using the following commands:
sudo yum update
sudo yum install MariaDB-server MariaDB-client
Start mysql service using the following command:
sudo /etc/init.d/mysqld start
sudo chkconfig mysqld on
Or,
sudo systemctl start mysqld
sudo systemctl enable mysqld
After installing MariaDB, you should set the database root user
password. To do that, execute the following command from your Terminal.
mysql_secure_installation
Install MariaDB On Ubuntu 14.04:
Here are the commands to run to install MariaDB on your Ubuntu system:
sudo apt-get install software-properties-common
sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xcbcb082a1bb943db
sudo add-apt-repository 'deb http://mirror.mephi.ru/mariadb/repo/5.5/ubuntu trusty main'
Once the key is imported and the repository added you can install MariaDB with:
sudo apt-get update
sudo apt-get install mariadb-server
Keep in mind that during MariaDB installation, the installer will ask you either to use the existing
my.cnf(old
backup) file, or use the package containers version (i.e new one). You
can either use the old my.cnf file or the package containers version. If
you want to use the new my.cnf version, you can restore the contents of
older my.cnf (We already have copied this file to safe location before)
later.
For other versions, please refer the
MariaDB official repositories page.
4. Copy contents of my.cnf.bak(old backup) file to new my.cnf file
To do that, enter the following command in Terminal. I have the old
my.cnf.bak file in my current directory, so I simply copied the file
using the following command:
On RPM systems:
sudo cp my.cnf.bak /etc/my.cnf
On DEB systems:
sudo cp my.cnf.bak /etc/mysql/my.cnf
5. Import Databases
Finally, let us import the old databases which we’ve created in the first step using the following command.
mysql -u root -p < backupdatabase.sql
That’s it. We have successfully imported the old databases.
Let us check if the databases are really imported. To do that, log in to mysql prompt using command:
mysql -u root -p
Run
show databases; command from mysql prompt to check for the databases.
MariaDB [(none)]> show databases;
Sample output:
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| testdb1 |
| testdb2 |
+--------------------+
5 rows in set (0.00 sec)
As you see in the above result all old databases including testdb1 and testdb2 have been successfully imported.
That’s all. Start using MariaDb.
Disclaimer: Be careful while using these steps in
production environment. Also, refer the MariaDB official documentations
for further clarifications. If you don’t know what you’re doing, please
ask a Database administrator help. Don’t lose your precious database
backup.
Good luck!