postgreSQL数据备份与迁移的完美实践
🍎✨ 数据备份与迁移
参考文章
PostgreSQL pg_dump&psql 数据的备份与恢复
1、首先安装一下postgresql
❗️❗️❗️特别要注意版本问题!
❗️❗️❗️后面出了12、13版本了~版本是向下兼容的,安装的时候一定要注意!!!
brew install postgresql@11
2、修改环境变量使命令生效
# 我的postgre11安装的目录是:
/usr/local/Cellar/postgresql@11/11.12/bin
# 修改~/.bash_profile
cd ~/
vim .bash_profile
# 增加PATH,将下面这行加进去
export PATH=/usr/local/Cellar/postgresql@11/11.12/bin:$PATH
# source
source .bash_profile
# 如果使用 zshrc的话,需要再做一步:
echo 'export PATH="/usr/local/Cellar/postgresql@11/11.12/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc
# 验证一下
which pg_dump
输出:/usr/local/Cellar/postgresql@11/11.12/bin/pg_dump
3、备份远程数据库的表结构到本地
-U:用户名
-h:host
-p:端口
-d:要导出哪个数据库的表结构
-f:后面跟导出的文件名,也可以加上完整的路径
-F:表示导出的文件格式(这里导出成tar类型,如果不指定-F,默认导出文本格式,后缀可以用.sql)
-s:表示只备份表结构!❗️去掉-s会将数据也都导出来
-x:加上它以后可以忽略权限相关的配置!❗️现在数据库中没有关于权限的配置,所以暂时可以加上这个参数!
-O:表示忽略用户owner,导出的sql语句中不包含 WONER TO 语句
-W:表示强制输入密码
# 执行命令前将当前目录切换到Downloads(其他目录也行): cd ~/Downloads
# ❗️1、生成 tar文件(推荐)
pg_dump -U (用户名) -h (数据库的host) -p 5432 -d (数据库名) -f runfast_struct.tar -F tar -sOW
# 2、生成 sql文件
pg_dump -U (用户名) -h (数据库的host) -p 5432 -d (数据库名) -f runfast_struct.sql -x -sOW
4-1、将表结构导入到目标数据库
# 如果目标服务器中还没有数据库,需要使用 -C 参数创建一下
# owner相关(暂时没有权限相关的配置的话可以不用搞这个)
--role=(用户名)
# 执行命令前将当前目录切换到Downloads(其他目录也行): cd ~/Downloads
# ❗️方式1: 注意dump的时候得用 -F 命令生成一个tar格式的文件(推荐)
pg_restore -U (用户名) -h (host) -p 4432 -d (dbname) -O -x < runfast_struct.tar
# 方式2: 如果前面生成的是sql文件,用这个方法。❓但是pgsql命令貌似在远程没办法执行!
pgsql -U (用户名) -h (host) -p 4432 -d(dbname) -O -x < runfast_struct.sql
4-2关于dump的时候加上-x参数禁止转储权限相关的问题
文档中关于-x的参数有如下说明:
-x
--no-privileges
--no-acl
禁止转储访问权限(grant/revoke 命令)。
加上与不加这个-x可以看到只有一些不同,主要是一些权限的配置,不影响迁移后数据库的读写操作!
# 数据库权限相关,如果没有用到可以不加
REMOKE ALL ON SCHEMA public FROM PBULIC;
GRANK ALL ON SCHEMA public TO PBULIC;
5、表结构完整性验证
—— 其实可以将线上的数据库与新生成的数据库使用pg_dump命令分别导出成sql文件,比较一下两个sql文件有没有不同的地方就好了: