因工作需要 需要对数据库所在的linux服务器 进行迁移 更换到新的服务器
因本次迁移是需要迁移2个数据库,分别是:
分业务库:postgresql数据库
时序库 :TimescaleDB 数据库
环境:linux CentOS 6
数据库版本:postgresql 11.5
数据量 业务库 80G
时序库 500G
针对这个情况进行分析 ,我发现可以对业务库采取 备份——还原 的方式进行迁移数据 毕竟数据量不大 ,但是对于时序库却不能采取这个方法 1. 是数据量大,2 .是TimescaleDB数据库含有大量的超表 备份还原是有一定的问题的 ,所有采取直接迁移postgres 下的data 文件 在修改配置的问题
源数据库(业务库)
ip:0.0.0.0 端口 5432 用户 postgres 数据库名:cs
新数据库(业务库)
ip:1.1.1.1 端口 5432 用户 postgres 数据库名:cs2
pg_dump --file "/u01/pgsql-all.backup" --host "0.0.0.0" --port "5432" --username "postgres" --dbname "cs" --verbose --role "postgres" --format=c --blobs --encoding "UTF8"
关于pg_dump 的用法 可以看这篇文章:链接直达
首先这俩个服务器之间能够要ping同,这样才能传输文件
通过Lina上的scp 命令 传输
cd /u01
scp pgsql-all.backup user@1.1.1.1:/tmp/
查看1.1.1.1服务器上是否装上postgresql数据库 ,没有的话需要自己装
创建数据库的可以看这篇文章安装 部署 postgresql数据库 搭建主从节点 (业务库)
因为我这个项目1.1.1.1上已经预装了postgresql-11.5的版本了 ,
直接用sql创建
CREATE DATABASE cs;
或用使用createdb
createdb -h 1.1.1.1 -p 5432 -e -U postgres cs
createdb 是一个 SQL 命令 CREATE DATABASE 的封装。
createdb 创建一个 PostgreSQL 数据库.
使用方法:
createdb [选项]... [数据库名称] [描述]
选项:
-D, --tablespace=TABLESPACE 数据库默认表空间
-e, --echo 显示发送到服务端的命令
-E, --encoding=ENCODING 数据库编码
-l, --locale=LOCALE 数据库的本地化设置
--lc-collate=LOCALE 数据库的LC_COLLATE设置
--lc-ctype=LOCALE 数据库的LC_CTYPE设置
-O, --owner=OWNER 新数据库的所属用户
-T, --template=TEMPLATE 要拷贝的数据库模板
-V, --version 输出版本信息, 然后退出
-?, --help 显示此帮助, 然后退出
联接选项:
-h, --host=HOSTNAME 数据库服务器所在机器的主机名或套接字目录
-p, --port=PORT 数据库服务器端口号
-U, --username=USERNAME 联接的用户名
-w, --no-password 永远不提示输入口令
-W, --password 强制提示输入口令
--maintenance-db=DBNAME 更改维护数据库
默认情况下, 以当前用户的用户名创建数据库.
一般根据工作需要需要安装不同的postgres 插件
我这里只大体举个例子:
CREATE EXTENSION "postgres_fdw";
Create extension "postgis";
Create extension "uuid-ossp"
由于我们之前是全量备份整个库 它会自动帮你安装 如果只备份单模式或者备份部分的是需要安装插件的,需要保持新旧库一致的,要不之后的还原会报错的
这里使用pg_restore来还原备份做数据库迁移的
用法:
pg_restore [选项]... [文件名]
一般选项:
-d, --dbname=名字 连接数据库名字
-f, --file=文件名 输出文件名
-F, --format=c|d|t 备份文件格式(应该自动进行)
-l, --list 打印归档文件的 TOC 概述
-v, --verbose 详细模式
-V, --version 输出版本信息, 然后退出
-?, --help 显示此帮助, 然后退出
恢复控制选项:
-a, --data-only 只恢复数据, 不包括模式
-c, --clean 在重新创建之前,先清除(删除)数据库对象
-C, --create 创建目标数据库
-e, --exit-on-error 发生错误退出, 默认为继续
-I, --index=NAME 恢复指定名称的索引
-j, --jobs=NUM 执行多个并行任务进行恢复工作
-L, --use-list=FILENAME 从这个文件中使用指定的内容表排序
输出
-n, --schema=NAME 在这个模式中只恢复对象
-N, --exclude-schema=NAME 不恢复此模式中的对象
-O, --no-owner 不恢复对象所属者
-P, --function=NAME(args) 恢复指定名字的函数
-s, --schema-only 只恢复模式, 不包括数据
-S, --superuser=NAME 使用指定的超级用户来禁用触发器
-t, --table=NAME 恢复命名关系(表、视图等)
-T, --trigger=NAME 恢复指定名字的触发器
-x, --no-privileges 跳过处理权限的恢复 (grant/revoke)
-1, --single-transaction 作为单个事务恢复
--disable-triggers 在只恢复数据的过程中禁用触发器
--enable-row-security 启用行安全性
--if-exists 当删除对象时使用IF EXISTS
--no-comments 不恢复注释
--no-data-for-failed-tables 对那些无法创建的表不进行
数据恢复
--no-publications 不恢复发行
--no-security-labels 不恢复安全标签信息
--no-subscriptions 不恢复订阅
--no-tablespaces 不恢复表空间的分配信息
--section=SECTION 恢复命名节 (数据前、数据及数据后)
--strict-names 要求每个表和(或)schema包括模式以匹配至少一个实体
--use-set-session-authorization
使用 SESSION AUTHORIZATION 命令代替
ALTER OWNER 命令来设置所有权
联接选项:
-h, --host=主机名 数据库服务器的主机名或套接字目录
-p, --port=端口号 数据库服务器的端口号
-U, --username=名字 以指定的数据库用户联接
-w, --no-password 永远不提示输入口令
-W, --password 强制口令提示 (自动)
--role=ROLENAME 在恢复前执行SET ROLE操作
选项 -I, -n, -N, -P, -t, -T, 以及 --section 可以组合使用和指定
多次用于选择多个对象.
如果没有提供输入文件名, 则使用标准输入.
pg_restore --host "1.1.1.1" --port "5432" --username "postgres" --role "postgres" --dbname "cs" --verbose /tmp/pgsql-all.backup
等还原完成后,业务库就已经还原完成了,下面开始迁移时序库
源数据库(业务库)
ip:0.0.0.2 端口 5432 用户 postgres 数据库名:cst
新数据库(业务库)
ip:1.1.1.2 端口 5432 用户 postgres 数据库名:cst2
由于时序库比较大 无法使用之前的方法,我们采用直接迁移postgres下的数据文件的办法
由于postgresql数据库的特性 我才去迁移pg目录下的data 文件夹的方式
这里有2种方法,一种是直接传,一种是压缩后传
同样需要网通
从0.0.0.2服务器进入数据库的目录下,我的是在/u01下
cd /u01/pg11.5
scp -r data [email protected]:/u01/
[[email protected] pgsql]# pwd
/u01/pgsql
[[email protected] pgsql]# tar -zcvf data.tar.gz data
[[email protected] pgsql]#scp -r data [email protected]:/u01/
解压
[[email protected] ~]# cd /u01/pgsql/
[[email protected] pgsql]# tar -zxvf data
详情可以看安装 部署 postgresql数据库 搭建timescaledb数据库 (时序库)这篇文章
[[email protected] data]# cp pg_hba.conf /home/
[[email protected] data]# cp postgresql.conf /home/
[[email protected] ~]# su - postgres
-bash-4.2$ /usr/pgsql-11/bin/pg_ctl -D /u01/pgsql/data/ stop
waiting for server to shut down… done
server stopped
删除时序库原来的data目录
[[email protected] ~]# cd /u01/pgsql/
[[email protected] pgsql]# ls
data
[[email protected] pgsql]# rm -fr data/
如果害怕可以备份一下(或者改个名)
[[email protected] u01]# mv data /u01/pgsql/
[[email protected] data]# cp /home/postgresql.conf .
[[email protected] data]# cp /home/pg_hba.conf .
[[email protected] ~]# su - postgres
-bash-4.2$ /usr/pgsql-11/bin/pg_ctl -D /u01/pgsql/data/ start
如果没有启动systemctl status postgresql-11或者log日志查看具体问题
如果遇到啥问题,请留言