動作

LinuxDataTrans

出自 Itsmw

簡介

 本文主要在介紹如何把 B2D Linux 上的資料,含使用者帳號、網頁、資料庫移轉至另一台 B2D/OB2D Server 上頭。筆者認為,主機的移轉要掌握以下幾點原則:

  1. 要注意原網頁應用軟體之安全性
    有些舊的軟體,可能已有漏洞,不要再把舊的版本轉移過來。
  2. 在移轉資料的同時,必須要注意,該資料的檔案權限。不要在完成資料移轉之後,一般 user 都「看」不到,只剩 root 一個才看得到。
  3. 可在兩台 Linux 之間直接使用 gFtp 軟體,以 SFTP2 (SSH2) 協定、 Root 身份,直接把各種資料從舊機器傳送到新機器上。


資料庫移轉

  • 資料庫位置:/var/lib/mysql
  • /var/lib/mysql/mysql 及 /var/lib/mysql/test 不可搬動
    除了上述這兩個資料夾不可搬動外,其餘在 /var/lib/mysql/ 底下的資料夾(資料庫),皆可以搬到新 B2D Server主機的 /var/lib/mysql 底下。
    • 因為 /var/lib/mysql/mysql 是 MySQL 的系統資料庫,它記錄了許許多多 MySQL Server 的設定參數。而且,舊版的 MySQL 與新版的 MySQL ,系統資料庫會有欄位定義上的不同,若您把舊版系統資料庫,直接覆蓋到新版之上,可能會造成 MySQL 啟動失敗。
    • 例外:若是新舊主機的 B2D/OB2D Server 版本一致,理論上其 MySQL 版本應該也一致,就可以執行以下動作即可
    1. 直接把 /var/lib/mysql/ 底下所有資料夾複製到新主機上相同的位置上
    2. 不必再動 MySQL 使用者權限的部份
  • 複製到新主機時,要記得把 /var/lib/mysql 底下所有的資料夾(資料庫)權限,改為 mysql.mysql
    root@dns:~# chown -R mysql.mysql /var/lib/mysql/*
  • 在 OB2D 底下可以使用 filezilla 以 SFTP 的協定,直接用 Root 身份進行搬動
    root@dns:~# apt-get install filezilla
  • 檢查所有 PHP+MySQL程式碼(如 ANN 公告欄...etc),把所使用到的 MySQL 使用者帳號密碼,新增至新主機的 MySQL 內
    使用 phpmyadmin,例: http://Your.ServerName/phpmyadmin
    在首頁上點:「權限」 → 「新增使用者」 (新增 MySQL 的使用者)



學校網頁搬家

  • 網頁位置
    • Red Hat 系列: /var/www/html
    • B2D/OB2D 系列: /var/www
    • 自行編譯安裝: /usr/local/apache2/htdocs
  • 可以使用圖形化工具 gFtp 以 SFTP 的協定,直接用 Root 身份進行搬動
    • 例1:從舊 Red Hat(含 Fedora) 之/var/www/html → B2D Server 之 /var/www
  • 也可用指令 scp
    例:以 root 身份把遠端的 /var/www/sfs3 複製回本機之 /var/www/sfs3 底下
    root@dns:~# scp root@your.old.host:/var/www/sfs3 /var/www
  • 注意:OB2D 的 Apache2 Server 在送出網頁時,預設會採用 utf8 編碼,可是原主機上的網頁卻可能是 Big5 ,此時,我們必須把預設編碼解除,並加強其多國語言編碼之處理能力。
    • 解除送出網頁時的預設編碼
      編輯 /etc/apache2/conf.d/charset ,把 AddDefaultCharset UTF-8 變成註解

      # AddDefaultCharset UTF-8

    • 加強多國語言編碼處理能力,編輯 /etc/apache2/sites-available/default ,新增紅字部分。

<VirtualHost *:80>
      ServerAdmin webmaster@n10.domo.tnc.edu.tw
      ServerName n10.domo.tnc.edu.tw

      DocumentRoot /var/www/
      <Directory />
         Options FollowSymLinks MultiViews
         AllowOverride None
      </Directory>
 ...




使用者搬家

家目錄移轉

  • 各使用者的家目錄,集中在 /home/ 底下
  • 用 gFtp 以 SFTP 的協定,直接用 Root 身份進行搬動(檔案權限,會被改為 root.root)


User 移轉

 Linux 的 User 相關資料如下:

  • 各使用者資料夾 /home/*
  • 設定檔 /etc/passwd
  • 密碼檔 /etc/shadow
  • 群組檔 /etc/group
  • 群組密碼檔 /etc/gshadow

 若是 B2D Server 或 B2D pureXXX 的舊主機,移轉至 B2D Server。把上列各檔,有關使用者的部份,「複製」/「貼上」至新主機同名檔案的檔尾部份。以 /etc/passwd 舉例如下:

  1. 把舊主機 passwd, shadow, group, gshadow 傳輸至新主機 /root 底下
  2. 使用文字編輯器,如 gedit 打開 /root/passwd ,複製舊主機上的使用者資料,貼至新主機的 /etc/passwd 的檔尾處(不要動到原本的資料)。


Etc passwd.png


歸還其原有權限



網頁資料庫編碼轉換

 本文介紹如何在 B2D Server 下把 Big5 碼的網頁暨其資料庫轉成 UTF8 碼,並轉至 OB2D 上的資料庫。當然,這並不是必要性動作,本文在此只是提供一個作法給大家參考而已,並不鼓勵大家把所有網頁暨其資料庫轉碼


資料庫轉碼

 在此,筆者以自己所寫的一支 Big5 小程式「學生資訊檢測練習區」來擔任本次的範例,它內含三支 php 程式碼以及一個資料庫(兩張表)。


B2D Server 上把資料庫轉出

  • 把整個 Big5 碼資料庫,在 B2D Server 上用 phpmyadmin 轉出成 SQL 檔
    • Step1 在 phpmyadmin 首頁上點選「輸出」
      Mysql dbout 1.png

    • Step2 選妥所要下載的資料庫 --> 轉成 sql 檔
      Mysql dbout 2.png

  • 預設會存成 localhost.sql , 我們把它改成 compuexam.sql,並放到 /root 底下
    root@dns:~# mv localhost.sql compuexam.sql
  • 預處理 compuexam.sql 把文字檔內可能會出現錯誤,如「'成功\'」變成「'成功'
    root@dns:~# vi compuexam.sql
    在 vim 內下取代命令:「:%s/\\'/'/g」後存檔


  • 執行轉碼作業
  1. 把 B2U.zip 解壓
    root@dns:~# unzip B2U.zip --> 會解出執行檔 bg5-db2-utf8
  2. 轉碼至新資料庫 new_ce
    root@dns:~# ./bg5-db2-utf8 compuexam.sql new_ce mysql_passwd
    註:使用法為./bg5-db2-utf8 已匯出的sql檔路徑檔名 新的資料庫名稱 MySQL管理密碼



轉入 OB2D Server 上的 MySQL 資料庫

  • 由上述方式製作出的資料庫,其實是預設採用 latin1 字集定義,但骨子裡放的是 utf8 碼的資料庫,使用官方版的 phpmyadmin 會無法正確顯示其文字,不過可以改用筆者修改的 phpMyAdmin解決此一問題。
    • 下載並放至 /var/www
      root@dns:~# cd /var/www
      root@dns:/var/www# wget http://myip.tw/itsmw/images/f/fb/PhpMyA.zip
      root@dns:/var/www# unzip PhpMyA.zip
    • 瀏覽方式   http://your.ob2d.server/phpMyA
    • 進入首頁後,先選妥右側語言為: Language: 中文utf8 -- Chinese traditional(utf8)
  • 再來,只要把 B2D server 上 /var/lib/mysql/new_ce 整個資料夾搬至 OB2D 上的 /var/lib/mysql 底下,並 chown 為 mysql.mysql 便完成 utf8 資料庫的製作


進一步轉成符合 MySQL 5.x UTF8 編碼校對之資料庫

 接著,我們可以再利用筆者的 phpMyA 輸出 new_ce 資料庫,改寫部分內容,再用官方 phpmyadmin 匯入成標準 MySQL 5.x 版接受的 UTF8 編碼資料庫。以下操作是在 OB2D Server 上,作法如下:

  • new_ce 資料庫前置處理
  1. 用 phpMyA 把 new_ce 資料庫輸出成 localhost.sql
  2. 改寫 localhost.sql ,把以下這兩行刪除

    CREATE DATABASE `new_ce`;
    USE new_ce;

  3. 把所有建立資料表最後一行 DEFAULT CHARSET=latin1 改成 DEFAULT CHARSET=utf8

    CREATE TABLE IF NOT EXISTS `table name` (
     ...
     ...
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8 ...;


  • 使用官方 phpmyadmin 建立 newutf8 資料庫,示例如下
Newutf8create.png
  • 再點選 newutf8 資料庫 --> 【載入】 --> 選 localhost.sql --> MySQL相容模式要選用 MYSQL40 --> 【執行】
  • 這樣就可以使用官方 phpmyadmin 來檢視該資料庫,不過本動作可能會導致您舊 PHP 程式碼(SQL 語法太舊,沒加入語系校對)無法讀取該資料庫,所以請慎思是否要這麼做!





網頁轉碼

 依本例,不止要搬動 compuexam 為 new_ce 資料庫,還要把其應用程式:/var/www/compuexam/ 底下所有的 PHP 程式轉碼為 utf8 才算完成。

  • 先從 B2D Server 把 /var/www/compuexem 複製至 OB2D Server 的 /var/www/compuexam
  • 在 OB2D Server 的 /var/www/compuexam 下建立以下之 shell 檔
    root@dns:~# vi /var/www/compuexam/b2utf8.sh
#! /bin/sh
for i in *.php; do \
   echo "$(iconv -f big5 -t utf8 $i)" > $i
done
  • 在 /var/www/compuexam 執行該 shell
    root@dns:~# cd /var/www/compuexam
    root@dns:/var/www/compuexam# chmod +x b2utf8.sh
    root@dns:/var/www/compuexam# ./b2utf8.sh


  • 修改所有的 PHP 程式碼,把語言宣告改成 UTF-8,如下所示

<meta http-equiv="content-type" content="text/html; charset=UTF-8" />



注意資料庫密碼

  • 每支 PHP+MySQL 的 PHP 程式碼,必定會有設定資料庫密碼的程式碼,因此,從 B2D Server 轉至 OB2D 後,要打開該程式檢視 MySQL 的密碼是否正確
  • 另外, PHP 程式碼之資料庫名稱設定也要記得修改
  • 若一切就緒,就可以測試瀏覽 http://your.ob2d.server/compuexam




本文小檔案

__NORICHEDITOR__

題名: Title::B2D Linux資料移轉
作者: Creator::itsmw作者群
主題/關鍵詞: Subject::b2d, ob2d, 主機移轉
簡述: Description::如何把 B2D Linux 上的資料,含使用者帳號、網頁、資料庫移轉至另一台 B2D/OB2D Server 上頭。
出版者: Publisher::台南縣教網中心 itsmw 計畫
其他參與者: Contributor::itsmw作者群
日期: Date::2010-7-12
文件類型: Type::05作業系統
資料格式: Format::text/html
文件識別代號: Identifier::http://myip.tw/itsmw/index.php/LinuxDataTrans
來源: Source::http://myip.tw/b2ddoc/LinuxBase
語言: Language::zh-TW
相關資源: Relation::http://b2d.tnc.edu.tw
文件涵蓋範圍: Coverage::Linux平台
版權規範: Rights::GNU Free Documentation License 1.2