如何在Linux中將MySQL遷移到MariaDB
自從甲骨文收購(gòu) MySQL 后,由于甲骨文對(duì) MySQL 的開(kāi)發(fā)和維護(hù)更多傾向于閉門(mén)的立場(chǎng),很多 MySQL 的開(kāi)發(fā)者和用戶(hù)放棄了 MySQL。在社區(qū)驅(qū)動(dòng)下,促使更多人遷移到 MySQL 的另一個(gè)叫 MariaDB 的分支。在原有 MySQL 開(kāi)發(fā)人員的帶領(lǐng)下,MariaDB 的開(kāi)發(fā)遵循開(kāi)源的理念,并確保它的二進(jìn)制格式與 MySQL 兼容。Linux 發(fā)行版如 Red Hat 家族(Fedora,CentOS,RHEL),Ubuntu 和 Mint,openSUSE 和 Debian 已經(jīng)開(kāi)始使用,并支持 MariaDB 作為 MySQL 的直接替換品。
如果你想要將 MySQL 中的數(shù)據(jù)庫(kù)遷移到 MariaDB 中,這篇文章就是你所期待的。幸運(yùn)的是,由于他們的二進(jìn)制兼容性,如果你參照下面的步驟,MySQL遷移到 MariaDB 的過(guò)程將是非常簡(jiǎn)單的。
準(zhǔn)備 MySQL 數(shù)據(jù)庫(kù)和表
出于演示的目的,我們?cè)谧鲞w移之前在數(shù)據(jù)庫(kù)中創(chuàng)建一個(gè)測(cè)試的 MySQL 數(shù)據(jù)庫(kù)和表。如果你在 MySQL 中已經(jīng)有了要遷移到 MariaDB 的數(shù)據(jù)庫(kù),跳過(guò)此步驟。否則,按以下步驟操作。
在終端輸入 root 密碼登錄到 MySQL 。
$ mysql -u root -p
創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)和表。
mysql> create database test01;
mysql> use test01;
mysql> create table pet(name varchar(30), owner varchar(30), species varchar(20), sex char(1));
在表中添加一些數(shù)據(jù)。
mysql> insert into pet values('brandon','Jack','puddle','m'),('dixie','Danny','chihuahua','f');
退出 MySQL 數(shù)據(jù)庫(kù)。
備份 MySQL 數(shù)據(jù)庫(kù)
下一步是備份現(xiàn)有的 MySQL 數(shù)據(jù)庫(kù)。使用下面的 mysqldump 命令導(dǎo)出現(xiàn)有的數(shù)據(jù)庫(kù)到文件中。運(yùn)行此命令之前,請(qǐng)確保你的 MySQL 服務(wù)器上啟用了二進(jìn)制日志。如果你不知道如何啟用二進(jìn)制日志,請(qǐng)參閱結(jié)尾的教程說(shuō)明。
$ mysqldump --all-databases --user=root --password --master-data > backupdb.sql
現(xiàn)在,在卸載 MySQL 之前先在系統(tǒng)上備份 my.cnf 文件。此步是可選的。
$ sudo cp /etc/mysql/my.cnf /opt/my.cnf.bak
卸載 MySQL
首先,停止 MySQL 服務(wù)。
$ sudo service mysql stop
或者:
$ sudo systemctl stop mysql
或:
$ sudo /etc/init.d/mysql stop
然后繼續(xù)下一步,使用以下命令移除 MySQL 和配置文件。
在基于 RPM 的系統(tǒng)上 (例如 CentOS,F(xiàn)edora 或 RHEL):
$ sudo yum remove mysql* mysql-server mysql-devel mysql-libs
$ sudo rm -rf /var/lib/mysql
在基于 Debian 的系統(tǒng)上(例如Debian,Ubuntu或 Mint):
$ sudo apt-get remove mysql-server mysql-client mysql-common
$ sudo apt-get autoremove
$ sudo apt-get autoclean
$ sudo deluser mysql
$ sudo rm -rf /var/lib/mysql
安裝 MariaDB
在 CentOS/RHEL 7和Ubuntu(14.04或更高版本)上,***的 MariaDB 已經(jīng)包含在其官方源。在 Fedora 上,自19 版本后 MariaDB 已經(jīng)替代了 MySQL。如果你使用的是舊版本或 LTS 類(lèi)型如 Ubuntu 13.10 或更早的,你仍然可以通過(guò)添加其官方倉(cāng)庫(kù)來(lái)安裝 MariaDB。
MariaDB 網(wǎng)站 提供了一個(gè)在線工具幫助你依據(jù)你的 Linux 發(fā)行版來(lái)添加 MariaDB 的官方倉(cāng)庫(kù)。此工具為 openSUSE,Arch Linux,Mageia,F(xiàn)edora,CentOS,RedHat,Mint,Ubuntu 和 Debian 提供了 MariaDB 的官方倉(cāng)庫(kù)。
下面例子中,我們使用 Ubuntu 14.04 發(fā)行版和 CentOS 7 配置 MariaDB 庫(kù)。
#p#
Ubuntu 14.04
$ 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'
$ sudo apt-get update
$ sudo apt-get install mariadb-server
CentOS 7
以下為 MariaDB 創(chuàng)建一個(gè)自定義的 yum 倉(cāng)庫(kù)文件。
$ sudo vi /etc/yum.repos.d/MariaDB.repo
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/5.5/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
$ sudo yum install MariaDB-server MariaDB-client
安裝了所有必要的軟件包后,你可能會(huì)被要求為 MariaDB 的 root 用戶(hù)創(chuàng)建一個(gè)新密碼。設(shè)置 root 的密碼后,別忘了恢復(fù)備份的 my.cnf 文件。
$ sudo cp /opt/my.cnf /etc/mysql/
現(xiàn)在啟動(dòng) MariaDB 服務(wù)。
$ sudo service mariadb start
或:
$ sudo systemctl start mariadb
或:
$ sudo /etc/init.d/mariadb start
導(dǎo)入 MySQL 的數(shù)據(jù)庫(kù)
***,我們將以前導(dǎo)出的數(shù)據(jù)庫(kù)導(dǎo)入到 MariaDB 服務(wù)器中。
$ mysql -u root -p < backupdb.sql
輸入你 MariaDB 的 root 密碼,數(shù)據(jù)庫(kù)導(dǎo)入過(guò)程將開(kāi)始。導(dǎo)入過(guò)程完成后,將返回到命令提示符下。
要檢查導(dǎo)入過(guò)程是否完全成功,請(qǐng)登錄到 MariaDB 服務(wù)器,并查看一些樣本來(lái)檢查。
$ mysql -u root -p
MariaDB [(none)]> show databases;
MariaDB [(none)]> use test01;
MariaDB [test01]> select * from pet;
結(jié)論
如你在本教程中看到的,MySQL到 MariaDB 的遷移并不難。你應(yīng)該知道,MariaDB 相比 MySQL 有很多新的功能。至于配置方面,在我的測(cè)試情況下,我只是將我舊的 MySQL 配置文件(my.cnf)作為 MariaDB 的配置文件,導(dǎo)入過(guò)程完全沒(méi)有出現(xiàn)任何問(wèn)題。對(duì)于配置文件,我建議你在遷移之前請(qǐng)仔細(xì)閱讀 MariaDB 配置選項(xiàng)的文件,特別是如果你正在使用 MySQL 的特定配置。
如果你正在運(yùn)行有海量的表、包括群集或主從復(fù)制的數(shù)據(jù)庫(kù)的復(fù)雜配置,看一看 Mozilla IT 和 Operations 團(tuán)隊(duì)的 更詳細(xì)的指南 ,或者 官方的 MariaDB 文檔。
故障排除
在運(yùn)行 mysqldump 命令備份數(shù)據(jù)庫(kù)時(shí)出現(xiàn)以下錯(cuò)誤。
$ mysqldump --all-databases --user=root --password --master-data > backupdb.sql
mysqldump: Error: Binlogging on server not active
通過(guò)使用 "--master-data",你可以在導(dǎo)出的輸出中包含二進(jìn)制日志信息,這對(duì)于數(shù)據(jù)庫(kù)的復(fù)制和恢復(fù)是有用的。但是,二進(jìn)制日志未在 MySQL 服務(wù)器啟用。要解決這個(gè)錯(cuò)誤,修改 my.cnf 文件,并在 [mysqld] 部分添加下面的選項(xiàng)。(LCTT 譯注:事實(shí)上,如果你并沒(méi)有啟用二進(jìn)制日志,那取消"--master-data"即可。)
log-bin=mysql-bin
保存 my.cnf 文件,并重新啟動(dòng) MySQL 服務(wù):
$ sudo service mysql restart
或者:
$ sudo systemctl restart mysql
或:
$ sudo /etc/init.d/mysql restart