使用pgloader,将RaspberryPi3上Redmine4.0.2的数据库从MySQL迁移至PostgreSQL

目前的环境

    • Raspbian GNU/Linux 9 (stretch)

 

    • Redmine 4.0.2

 

    • MariaDB 10.1.37

 

    apache2 + unicorn

前提 (qian2 ti2) – prerequisite

checkinstall 導入済み

このページ のパッチあて済み

PostgreSQL11.2をsystemdで導入する

インストールディレクトリ:/var/lib/postgresql

Redmineのディレクトリを %REDMINE_DIR% と記述します
Redmineの実行ユーザを %REDMINE_USER% と記述します
pgloaderは別ホストのCentOS7から実行します

残念ながら、RaspberryPi でビルドしたバイナリは動きませんでした…

Redmineは停止済み
MariaDBは起動中

安装PostgreSQL 11.2

1. 安装不完整的软件包(pi 用户)

sudo apt install libreadline-dev libsystemd-dev

如果有其他缺少的东西,请自行解决。

创建一个名为postgres的用户(pi用户)。

sudo useradd postgres -s /bin/bash -m

创建一个用于安装PostgreSQL的目录(pi用户)。

sudo mkdir /var/lib/postgresql
sudo chown postgres:postgres /var/lib/postgresql

4. 以postgres用户构建PostgreSQL。

创建环境变量。

export PGHOME=/var/lib/postgresql
export PGDATA=/var/lib/postgresql/data
PATH=$PGHOME/bin:$PATH

获取并构建PostgreSQL的源代码

mkdir ~/src
wget https://ftp.postgresql.org/pub/source/v11.2/postgresql-11.2.tar.gz
tar zxf postgresql-11.2.tar.gz -C ~/src/
cd src/postgresql-11.2/
./configure --prefix /var/lib/postgresql --with-systemd
make
checkinstall -D --fstrans=no

/home/postgres/src/postgresql-11.2/postgresql_11.2-1_armhf.deb已成功创建为软件包。

5. 安装PostgreSQL(使用pi用户)。

sudo dpkg -i /home/postgres/src/postgresql-11.2/postgresql_11.2-1_armhf.deb

6. 初始化数据库 (postgres用户)

mkdir /var/lib/postgresql/data
initdb --encoding=UTF8

7.更改PostgreSQL设置(postgres用户)

请修改以下内容的中文表达:

listen_addresses = '*'

请添加以下行

host    all             all             0.0.0.0/0            md5

8. PostgreSQL启动(root用户)

创建一个新文件

[Unit]
Description=PostgreSQL 11 database server
Documentation=man:postgres(1)
After=syslog.target
After=network.target

[Service]
Type=notify

User=postgres
Group=postgres
Environment=PGDATA=/var/lib/postgresql/data/
ExecStart=/var/lib/postgresql/bin/postmaster -D ${PGDATA}
ExecReload=/bin/kill -HUP $MAINPID
KillMode=mixed
KillSignal=SIGINT
TimeoutSec=0

[Install]
WantedBy=multi-user.target

自动启动并立即启动。

systemctl enable postgresql-11
systemctl start postgresql-11

9. 创建Redmine用户和数据库(postgres用户)。

psql -U postgres


CREATE ROLE %YOUR_NAME_PG% LOGIN ENCRYPTED PASSWORD '%YOUR_PASS_PG%' NOINHERIT VALID UNTIL 'infinity';
CREATE DATABASE %YOUR_DB_PG% WITH ENCODING='UTF8' OWNER=%YOUR_NAME_PG%;

请根据情况将’%YOUR_xx_PG%’ 更改为合适的选项。

将数据迁移从MySQL到PostgreSQL

我会在CentOS7上进行工作。

rpm -ivh https://download.postgresql.org/pub/repos/yum/11/redhat/rhel-7-x86_64/pgloader-3.6.1-1.rhel7.x86_64.rpm
pgloader mysql://%YOUR_NAME_MS%:%YOUR_PASS_MS%@%YOUR_HOST_NAME%/%YOUR_DB_MS% pgsql://%YOUR_NAME_PG%:%YOUR_PASS_PG%@%YOUR_HOST_PG%/%YOUR_DB_PG%

请根据需要将 ‘%YOUR_xx_MS%’、’%YOUR_xx_PG%’ 进行相应更改。

更改Redmine的设置

修改Redmine的数据库设置

变更之前

production:
  adapter: mysql2
  database: YOUR_DB_MS
  host: YOUR_HOST_MS
  username: YOUR_NAME_MS
  password: YOUR_PASS_MS
  encoding: utf8

修改后

production:
  adapter: postgresql
  database: YOUR_DB_PG
  host: YOUR_HOST_PG
  username: YOUR_NAME_PG
  password: YOUR_PASS_PG
  encoding: utf8

导入postgresql模块的gem

su - %REDMINE_USER% -s /bin/bash
cd %REDMINE_DIR%
bundle config build.pg --with-pg-config=/var/lib/postgresql/bin/pg_config
bundle install

Redmine开始运行

在中文维基百科的历史记录等方面,并没有发生乱码问题,一切都正常运作。

左边:变更前,右边:变更后

image.png
bannerAds