從 MySQL 遷移到 MariaDB (CentOS)

jopen 11年前發布 | 27K 次閱讀 MariaDB MySQL 數據庫服務器

MariaDB 是一個采用 Maria 存儲引擎的 MySQL 分支版本,是由原來 MySQL 的作者 Michael Widenius 創辦的公司開發的免費開源的數據庫服務器。Red Hat 企業發行版RHEL 7 將用 MariaDB 替代 MySQL,一旦 RHEL 完成切換,基于 RHEL 的社區版 CentOS 將會緊跟著作出改變。所以呢,使用 CentOS 系統的這個 VPS 或遲或早都是要切換到 MariaDB 的,大勢所趨啊。

下面先摘錄一點背景介紹,然后是我在 CentOS 6.4 上從 MySQL 5.5.31 遷移至 MariaDB 5.5.31 的操作記錄。最后是我后來發現一個較好的遷移方法。

1. 背景介紹

MySQL是世界上最流行的開源關系數據庫。2008 年,Sun 收購 MySQL。然后 2010 年,甲骨文又收購了 Sun,于是 MySQL 落入了甲骨文(Oracle)手中。Oracle 與開源社區關系的一直不太好,甚至 MySQL 也被弄成了社區版和企業版,不能免費商業使用;MySQL 企業版的新功能不公開源代碼,這樣讓用戶很不爽。MariaDB 則沒有這方面的問題。與 MySQL 相比,MariaDB 的優勢在于:

  • 可免費商業使用(MySQL 則有社區版和企業版之分,拜 Oracle 所賜)
  • Maria 存儲引擎
  • PBXT 存儲引擎
  • XtraDB 存儲引擎
  • FederatedX 存儲引擎
  • 更快的復制查詢處理
  • 線程池
  • 運行速度更快
  • 更多的擴展功能模塊
  • 支持 Unicode 排序

于是我決定先在虛擬機上看看如何由 MySQL 遷移到 MariaDB,雖然難以預料的是,不知道 Michael Widenius 會不會在什么時候又將 MariaDB 賣給哪家大公司。

原來 MariaDB 的設計初衷之一就是完全兼容 MySQL,包括 API 和客戶端協議,使之能輕松成為 MySQL 的代替品,所以由 MySQL 遷移到 MariaDB 基本上可以稱之為“升級”,就好像軟件升級版本一樣。MariaDB 的技術文檔上是這樣寫的

  • 如果是相同的基礎版本(如 5.5),可以直接卸載 MySQL 然后安裝 MariaDB,這樣就可以用了。甚至不需要備份然后還原數據庫。當然,保險起見,升級前將所有的數據庫都備份一下還是非常有必要的,以防萬一。
  • 如果 MariaDB 的主版本高,在經過上面的卸載 MySQL 再安裝 MariaDB 操作之后,需要使用 mysql_upgrade 升級一下。是的,甚至連命令行都與使用 MySQL 的時候一樣。
  • 所有原先的客戶端和連接器(PHP、Perl、Python、Java 等)都不需要做任何改變就能正常工作,因為 MariaDB 與 MySQL 使用的是相同的客戶端協議,并且客戶端庫文件也是二進制兼容的。

2. 遷移操作記錄?

這個 VPS 安裝的是 CentOS,目前版本是 6.4,MySQL 版本是 5.5.31(使用了 remi 源),虛擬機的配置與此極度相似。剛開始不太了解,執行了這個比較傻的操作方式。參考 MariaDB 官方文檔:How can I upgrade from MySQL to MariaDB?

0. 先備份數據庫

數據庫包含了自己的幾乎所有重要內容,不管進行的操作是否有風險,先備份總是很必要的。

可以通過 phpMyAdmin 導出數據庫。

也可以直接在系統里將所有數據庫文件備份一份:

cp -R /var/lib/mysql /var/lib/mysql.bak

A. 先配置 MariaDB 的安裝源。

MariaDB 官方提供了一個自動生成安裝源配置文件的工具:https://downloads.mariadb.org/mariadb/repositories/。依次選擇 Linux 發行版(Distro)、版本(Release),然后選擇 MariaDB 版本號(目前只有 10.0 和 5.5)即可。(注意,MariaDB 10 是開發版本。)

MariaDB YUM 安裝源的位置:http://yum.mariadb.org/。打開后看到的是 MariaDB 版本列表,按照需要的版本號點擊進入下一層文件夾。

然后根據自己的 Linux 發行版,如 CentOS、Fedora、rhel(Red Hat Enterprise Linux)以及系統架構如 x86(表示 32 位操作系統) 或 amd64(表示 64 位操作系統)選擇對應的文件夾。

例如,目前 MariaDB 的主版本是 5.5,我的 CentOS 是第 6 版(6.4)、 32 位的,就選擇文件夾 centos6-x86/ 。現在瀏覽器中的地址顯示為 http://yum.mariadb.org/5.5/centos6-x86/,這就是下面配置文件中的 baseurl。

對于本例,將下面的安裝源配置保存為 MariaDB.repo,上傳到服務器的 /etc/yum.repos.d 文件夾:

[mariadb]
name = MariaDB
enable=1
priority=3
baseurl = http://yum.mariadb.org/5.5/centos6-x86
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1

其中 priority=3 是針對 YUM 的 PRIORITIES 優先級插件的。

B. 卸載原來的 mysql 及相關包。

# yum remove mysql*

上面用 * 來匹配刪除所有 mysql 數據包(包括因包依賴而刪除的別的包,如 postfix)。因為直接安裝的時候會出現沖突,例如:

file /usr/share/mysql/ukrainian/errmsg.sys from install of MariaDB-server-5.5.31-1.i686 conflicts with file from package mysql-libs-5.5.32-1.el6.remi.i686

嗯,好像因為將 php-mysql 也給刪除了(實際上這個不該刪除的),所以 phpMyAdmin 也因為依賴關系而被刪除了,我沒仔細看。

所以最好不要用通配符 *,而是選擇性刪除幾個主要的,

# yum remove mysql mysql-server mysql-libs

但是這個我沒有再測試,因為后面有更好的方法。

C. 然后安裝 MariaDB 及相應 PHP 擴展。

也是指定幾個主要的安裝包,剩下的讓 yum 自己進行依賴關系檢查。

# yum install MariaDB-server  MariaDB-client php-mysql

或者不安裝 MariaDB-server 而改為具有同步多主群集特性(synchronous multi-master cluster)的 MariaDB Galera Cluster:

# yum install MariaDB-Galera-server MariaDB-client galera

這里比較搞笑的是,沒注意前面把 php-mysql 給卸載了,結果運行數據庫之后訪問 WordPress,結果遭遇下面的錯誤:

Your PHP installation appears to be missing the MySQL extension which is required by WordPress.

D. 完成,修補

不管版本是否升級了,執行一下數據庫升級指令總沒有壞處:

# mysql_upgrade -p

看看數據庫版本是不是升級了:

# mysql -u root -p -e 'show global variables like "version";'
 Enter password:
 +---------------+----------------+
 | Variable_name | Value |
 +---------------+----------------+
 | version | 5.5.31-MariaDB |
 +---------------+----------------+

將 MariaDB 加入隨系統自啟動列表,

# chkconfig --levels 345 mysql on

嗯,以前 MySQL 的時候是 mysqld,現在是 mysql,就差了一個字母 d。

啟動它,

# service mysql start

這個時候服務器上的網站應該已經可以正常工作了,訪問數據庫沒有問題。

如果有必要,安裝完 MariaDB 之后可以重新安裝 postfix。如果發現 phpMyAdmin 提示無訪問權限了,那就是被卸載了,需要重新安裝和配置 phpMyAdmin。phpMyAdmin 之所以也會被刪除,是因為之前安裝的是針對 MySQL 的,不兼容 MariaDB,所以需要重新安裝。

E. 配置文件

因為之前進行了卸載操作,所以原來的 phpMyAdmin 的配置文件都被清除了,需要重新配置。

而對于 MySQL 的配置文件 /etc/my.cnf,因為 MariaDB 雖然創建了一個 my.cnf.d 文件夾來存儲自己的配置文件,但是它會首先加載 my.cnf,且原來 MySQL 的配置對 MariaDB 而言還是有效的。

但是也有些例外:

  • MariaDB 默認使用 Aria 存儲引擎存儲內部臨時文件,而不是 MySQL 默認使用的 MyISAM。如果你有很多臨時文件,最好增加參數 aria-pagecache-buffer-size 并設置為與 key-buffer-size 相同的數值。
  • 如果沒有使用 MyISAM,則可以將 key-buffer-size 設置為一個極小的值,如 64K。

3. 較好的升級方法?

2013.09.30

這個方法不行了,具體不知道為什么,還是按照上面的方法一步步來吧。

還是在上面介紹的系統配置下,先添加 MariaDB 安裝源,然后直接執行系統升級,

# yum update --skip-broken

MariaDB 相關安裝包會被安裝,不需要的 MySQL 包將被卸載,并且升級之后不需要對系統進行修補了。看看輸出的前面一部分:

==============================================================================================================
 Package Arch Version Repository Size
==============================================================================================================
Installing:
 MariaDB-Galera-server i686 5.5.29-1 mariadb 19 M
     replacing mysql.i686 5.5.21-1.el6.remi
     replacing mysql-server.i686 5.5.21-1.el6.remi
 MariaDB-server i686 5.5.31-1 mariadb 32 M
     replacing mysql-server.i686 5.5.21-1.el6.remi
 MariaDB-shared i686 5.5.31-1 mariadb 1.0 M
     replacing mysql-libs.i686 5.5.21-1.el6.remi
 kernel i686 2.6.32-358.11.1.el6 updates 24 M
 libjpeg-turbo i686 1.2.1-1.el6 base 176 k
 replacing libjpeg.i686 6b-46.el6
Updating:
.........

到這里才感覺到 MariaDB 的設計思想那個無縫替代 MySQL 不是噱頭,而是實實在在的技術。于是我也就不急著給 VPS 升級到 MariaDB 了,反正過不了多久 CentOS 就會采用  MariaDB,到時候再自然而然地遷移吧。

來自:http://cnzhx.net/blog/mysql-migrate-to-mariadb/

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!