wiki:oid/WorkLog/08-10-15

Version 14 (modified by jazz, 16 years ago) (diff)

--

2008-10-15

備份聯合目錄 PostgreSQL 到實驗主機

  • 安裝 PostgreSQL 與 phpPGadmin
    • [參考] Debian Linux 架設 PostgreSQL + PhpPgAdmin
    • phpPGAdmin - 官方網站: http://phppgadmin.sf.net
      jazz@oceandb:~$ sudo apt-get install postgresql phppgadmin
      jazz@oceandb:~$ sudo -u postgres psql template1
      Welcome to psql 8.3.4, the PostgreSQL interactive terminal.
      
      Type:  \copyright for distribution terms
             \h for help with SQL commands
             \? for help with psql commands
             \g or terminate with semicolon to execute query
             \q to quit
      
      template1=# create user PG_USER with password '${PASSWORD}' createdb createuser;
      CREATE ROLE
      template1=# alter user postgres with password '${PASSWORD}';
      ALTER ROLE
      template1=# \q
      jazz@oceandb:~$ sudo vi /etc/apache2/conf.d/phppgadmin
      jazz@oceandb:~$ sudo apache2ctl restart
      
      • etc/apache2/conf.d/phppgadmin

         
        99order deny,allow
        1010deny from all
        11 allow from 127.0.0.0/255.0.0.0 ::1/128
        12 # allow from all
         11# allow from 127.0.0.0/255.0.0.0 ::1/128
         12allow from all
        1313
        1414<IfModule mod_php5.c>
  • 把 PostgreSQL 資料庫 dump 出來
    • 先查詢 PostgreSQL 版本: 8.0.3
    • [參考] PostgreSQL 7.3.21 Documentation pg_dumpall
    • [參考] PostgreSQL 8.0.0 中文文件 Chapter 22. 備份和恢復
      # 只看到有安裝 PostgreSQL 的 JDBC 套件,卻沒看到 PostgreSQL Server 套件
      [odb@ncor odb]$ rpm -qa | grep sql
      libdbi-dbd-mysql-0.6.5-5
      rh-postgresql-libs-7.3.9-2
      mysql-3.23.58-16.RHEL3.1
      php-mysql-4.3.2-23.ent
      mysql-devel-3.23.58-16.RHEL3.1
      mod_auth_mysql-20030510-2.ent
      postgresql-jdbc-8.0.3-1PGDG
      mysql-server-3.23.58-16.RHEL3.1
      mysql-bench-3.23.58-16.RHEL3.1
      # 從目前執行中的 process 知道安裝在 /usr/local/pgsql 底下
      [odb@ncor odb]$ ps aux
      postgres  2643  0.0  0.1 17864 1708 ?        S    Sep26   0:00 /usr/local/pgsql/bin/postmaster -D /usr/local/pgsql/data
      # 從 /usr/local/pgsql/doc/index.html 可以得知版本為 8.0.3
      [odb@ncor odb]$ sudo -u postgres /usr/local/pgsql/bin/pg_dumpall > ncor_pgsql.dumpall
      [odb@ncor odb]$ du -sh ncor_pgsql.dumpall
      3.5M    ncor_pgsql.dumpall
      
  • 用 scp 拷貝到實驗主機,並用 psql 指令把 dump 結果復原到實驗主機上
    jazz@oceandb:~$ sudo -u postgres psql template1 < ncor_pgsql.dumpall
    

轉換 PostgreSQL 到 MySQL

  • [工具] pg2mysql converter (PostgreSQL to MySQL Converter)
  • [參考] 遇到 triggers , sequences , domain 這幾個差異時就沒輒了
    jazz@oceandb:~$ wget http://www.lightbox.ca/pg2mysql-1.2.tar.bz2
    jazz@oceandb:~$ tar jxvf pg2mysql-1.2.tar.bz2
    jazz@oceandb:~$ cd pg2mysql-1.2/
    jazz@oceandb:~/pg2mysql-1.2$ sudo apt-get install php5-cli
    jazz@oceandb:~/pg2mysql-1.2$ 
    
    • 轉出來的結果有錯,因為有用到 sequence (序列)
      --- account.sql.org     2008-10-15 23:23:54.000000000 +0800
      +++ account.sql 2008-10-15 23:24:12.000000000 +0800
      @@ -1,5 +1,5 @@
      collation database utf8_unicode_ci
       CREATE TABLE account (
      -    int(11) auto_increment smallint auto_increment NOT NULL,
      +    serial int(11) auto_increment NOT NULL,
           name varchar(10) NOT NULL,
           tel varchar(20) NOT NULL,
           fax varchar(20),
      @@ -10,5 +10,5 @@
           admin bool NOT NULL,
           account varchar(20) NOT NULL,
           password varchar(20) NOT NULL
      -, PRIMARY KEY(`int(11)`)
      - ) TYPE=MyISAM;
      +, PRIMARY KEY(`serial`)
      + ) TYPE=MyISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
      
  • [工具二] SQL::Translator (aka SQLFairy)
  • [參考] 用 Perl 寫的 SQL::Translator (aka SQLFairy)
    jazz@oceandb:~$ 
    

備忘