1. 背景
在Redmine服務器遷移過程中,如果前後兩個Redmine的版本一樣,事情就簡單,如果版本不一樣,就有可能面臨兩個版本數據庫不兼容,那就比較麻煩了。本文旨在介紹數據庫不兼容時,如何遷移Redmine。這是一種萬金油式的方法,如果掌握了,不管Redmine是從哪個版本升級到哪個版本,你都能輕鬆搞定。
2. 環境
我的Redmine是用bitnami-redmine安裝在linux服務器上的。現在要從服務器A(版本bitnami-redmine-2.3.0-0)遷移到服務器B(版本bitnami-redmine-3.0.3-0)上。這兩個版本,數據庫是有改變的。
3. 數據庫備份(舊服務器)
3.1. 查看數據庫用戶名和密碼
查看redmine-2.3.0-0/apps/redmine/htdocs/config/database.yml文件,記下username和password,等下需要用到。
$ $ cd redmine-2.3.0-0/ $ cat ./apps/redmine/htdocs/config/database.yml # Default setup is given for MySQL with ruby1.9. If you're running Redmine # with MySQL and ruby1.8, replace the adapter name with `mysql`. # Examples for PostgreSQL, SQLite3 and SQL Server can be found at the end. # Line indentation must be 2 spaces (no tabs).
production: adapter: mysql2 database: bitnami_redmine host: localhost port: 3306 username: bitnami password: "87783b9008" encoding: utf8 |
3.2. 備份數據庫
備份數據庫到當前目錄的 bitnami_redmine_old.sql 文件
./mysql/bin/mysqldump -ubitnami -p'87783b9008' bitnami_redmine > bitnami_redmine_old.sql |
4. 數據庫備份(新服務器)
4.1. 安裝新版本Redmine
在新服務器上安裝bitnami-redmine-3.0.3-0,如何安裝不在本文討論範圍內。安裝完後,啓動服務。
4.2. 查看數據庫用戶名和密碼
跟前面操作一樣,記錄下username和password,等下需要用到。
# #cd redmine-3.0.3-0/ #cat ./apps/redmine/htdocs/config/database.yml --- # Default setup is given for MySQL with ruby1.9. # Examples for PostgreSQL, SQLite3 and SQL Server can be found at the end. # Line indentation must be 2 spaces (no tabs). production: adapter: mysql2 database: bitnami_redmine host: localhost username: bitnami password: 9f30a3f2ea encoding: utf8 |
4.3. 備份數據庫
備份數據庫到當前目錄的bitnami_redmine_new.sql 文件
./mysql/bin/mysqldump -ubitnami -p'9f30a3f2ea' bitnami_redmine > bitnami_redmine_new.sql |
5. 對比數據庫差異
新舊數據庫有差異,那究竟差別在哪裏,怎麼看?
這裏給出一種方法,總體思路是:分別將剛纔備份的新老數據庫文件,恢復出來(恢復到MySQL Server),然後用Navicat for MySQL圖形化界面,逐個“表”進行對比差異,最後整合出一份符合新服務器要求的數據庫文件。
在開始之前,先安裝MySQL服務器和MySQL客戶端。我是在Window XP中完成數據庫整合的,環境如下:
操作系統 |
Windows XP SP3 |
MySQL服務端 |
MySQL Server 5.1 |
MySQL客戶端 |
Navicat for MySQL (version 9.0.15) |
如何安裝,不在本文討論範圍之內。
5.1. 在MySQL服務器上恢復新老數據庫
爲了對比需要,我們需要將bitnami_redmine_old.sql、bitnami_redmine_new.sql兩個數據庫文件恢復出三個數據庫,如下所示。
數據庫文件名 |
在MySQL服務器上 恢復的數據庫名 |
說明 |
bitnami_redmine_new.sql |
bitnami_redmine_new |
新服務器數據庫 |
bitnami_redmine_old.sql |
bitnami_redmine_old |
老服務器數據庫 |
bitnami_redmine_old.sql |
bitnami_redmine_merge |
合併後的數據庫 |
以下以恢復bitnami_redmine_new爲例,其他同理,不再累述。
① 用客戶端Navicat for MySQL連上MySQL服務器
運行Navicat for MySQL,選擇File > New Connection...菜單
圖表 1新建連接
② 新建數據庫,取名爲bitnami_redmine_new
圖表 2新建數據庫bitnami_redmine_new
圖表 3 創建數據庫bitnami_redmine_new
③ 導入數據庫文件bitnami_redmine_new.sql
圖表 4 導入數據庫文件
圖表 5選擇數據庫文件
圖表 6開始導入
④ 刷新Tables
圖表 7刷新Tablses
三個數據庫都恢復後,如下圖所示:
圖表 8 恢復後的三個數據庫
5.2. 開始對比數據庫差異
爲了數據庫對比方便,Navicat要同時打開多個窗口,默認是不允許打開多個窗口的,必須先在Navicat的Tools > Options...菜單中進行如下設置。
圖表 9運行Navicat開多個窗口
接下來的工作量就比較大了,要對比新老數據庫每個“表”、每“項”、以及它們的屬性。是個考驗耐性和細心的活。需要涉及數據庫的基本操作,包括新建/刪除表、新建/刪除項等等。
以對比users表作爲說明,其他類似,不再累述。運行Navicat三個進程。如下圖所示:
圖表 10開三個進程
我們要改的數據庫是bitnami_redmine_merge,而bitnami_redmine_old和bitnami_redmine_new是爲了讓我們對比用的。同時打開bitnami_redmine_old和bitnami_redmine_new的users表,查看其字段,選擇users右鍵點擊DesignTable即可查看字段,如下圖所示。
圖表 11查看users表的字段
通過以下對比,就能一眼看出差異性了,一新版本數據庫爲標準,對照着這些差異性修改bitnami_redmine_merge數據庫。
圖表 12users表的差異性
從bitnami-redmine-2.3.0-0升級到bitnami-redmine-3.0.3-0,數據庫bitname_redmine的差異總結如下:
Ø changesets表的comments字段,類型由text變爲longtext。
Ø custom_fields表,多了兩個字段format_store和description。
Ø 多了custom_fields_roles表。
Ø 多了email_addresses表。
Ø 多了quesries_roles表。
Ø queries表,少了is_public字段,多了兩個字段visibility和options。
Ø repositorys表,多了字段created_on。
Ø roles表,多了字段users_visibility。
Ø trackers表,多了字段default_status_id。
Ø users表,少了字段mail,多了兩個字段must_change_passwd和passwd_changed_on。
Ø wiki_redirects表,多了字段redirects_to_wiki_id。
Ø issue_statuses表,少了字段is_default。
5.3. 導出合併後的數據庫文件
對比了所有差異,也都修改了bitnami_redmine_merge數據庫,最後將bitnami_redmine_merge數據庫導出文件bitnami_redmine_merge.sql。
選中bitnami_redmine_merge數據庫,右鍵點擊Data Transfer...菜單,如下所示:
圖表 13導出數據庫到文件中
設置導出的文件名,設置編碼格式,點擊Start開始導出。
圖表 14導出到數據庫
看到如下提示,表明成功導出。
圖表 15成功導出文件
6. 數據庫恢復(新服務器)
6.1. 清理 bitnami_redmine 數據庫
使用 mysql 命令清理 bitnami_redmine 數據庫,見以下紅色字體的命令。
# # ./mysql/bin/mysql -ubitnami -p'9f30a3f2ea' Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 9 Server version: 5.5.42 MySQL Community Server (GPL)
Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> DROP DATABASE bitnami_redmine; Query OK, 51 rows affected (0.04 sec)
mysql> CREATE DATABASE bitnami_redmine; Query OK, 1 row affected (0.00 sec)
mysql> quit Bye # |
6.2. 恢復合併後的數據庫
上傳bitnami_redmine_merge.sql文件到redmine-3.0.3-0目錄 ,並恢復數據庫
./mysql/bin/mysql -ubitnami -p'9f30a3f2ea' bitnami_redmine < bitnami_redmine_merge.sql |
6.3. 重啓redmine服務
重啓redmine服務,打開瀏覽器,登陸看看是不是大功告成。如果在瀏覽器中有出現錯誤,說明數據庫對比的時候有遺漏,回去重新審查一遍吧。
7. 文件附件遷移(舊服務器)
將/apps/redmine/htdocs/files 下的所有文件拷貝至新服務器相同目錄即可。
8. 插件遷移(舊服務器)
將/apps/redmine/htdocs/plugins 下的所有文件拷貝至新服務器相同目錄即可。
9. 大功告成
至此,遷移工作完成,瀏覽器中訪問新版 redmine ,確認功能是否正常。
10. 總結
做個總結,遷移redmine,如果新舊服務器版本不同,難點在於遷移數據庫,遷移數據庫的步驟如下:
Ø 備份舊服務器數據庫文件(bitnami_redmine_old.sql)
Ø 備份新服務器數據庫文件(bitnami_redmine_new.sql)
Ø 對比/合併數據庫,並導出文件(bitnami_redmine_merge.sql)
Ø 將合併後的數據庫文件恢復到新服務器上
其中合併的過程,藉助MySQL Server和客戶端Navicat for MySQL(圖形化操作,方便對比)。