使用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开始运行
在中文维基百科的历史记录等方面,并没有发生乱码问题,一切都正常运作。
左边:变更前,右边:变更后
