前言

因项目需要,整理下mysql迁移postgresql的常用工具搜集

1、迁移工具

开发的pgloader是一个mysql迁移到pg的工具,性能和表现都良好,开发和测试环境迁移已经验正,github地址: https://github.com/dimitri/pgloader

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
LOAD DATABASE
 FROM mysql://admin1:***@10.10.214.205:3306/t230530_B
 INTO pgsql://admin:***@10.10.216.108:5432/B


WITH
     include drop, create tables, no truncate, create indexes, reset sequences, foreign keys
 CAST type datetime to timestamp
     drop default drop not null using zero-dates-to-null,
     type date drop not null drop default using zero-dates-to-null

 ALTER SCHEMA 't230530_B' RENAME TO 'public'

SET PostgreSQL PARAMETERS
    maintenance_work_mem to '1GB',
    work_mem to '1GB'

SET MySQL PARAMETERS
    net_read_timeout  = '600',
    net_write_timeout = '600'

执行迁移,观察日志没有报错正常结束即可

1
./pgloader -L /tmp/database_name_test.log database_name_test.ini

注意:
1、pg的账号的库需要提前创建好,并且数据库的owner跟该账号建议一致
2、注意pg的时间是默认带时区的,需要CAST里面的时间处理才会跟mysql保持一致

2、mysql备份和恢复

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# 备份
mysqldump -P 3306 -uadmin -p*** -h 127.0.0.1 --all-databases > project_dev_mysql_20240430.sql

# 还原
myloader \
-u admin  \
-p *** \
-h 127.0.0.1 \
-P 3306  \
--directory /data/project_dev_mysql_backup20240430  \
--overwrite-tables  \
--enable-binlog  \
--threads 6  \
--verbose 3

3、pg的一些常见操作

3.1 创建超级账号

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
1. 创建账号
# admin
CREATE USER admin WITH SUPERUSER PASSWORD 'xxx';

2. 添加白名单
vim /data/postgresql/pg_data/pg_hba.conf 
...
host    all             admin      10.0.0.0/8    md5

3. 重新加载conf配置
select pg_reload_conf();

3.2 备份和恢复

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# 方案1 - 单个库备份
pg_dump -U admin -h localhost -p 5432 -F c -b -v -f /tmp/project_backup.dump database_bane

# 创建库
createdb -U admin -h localhost -p 5432 database_name

# 恢复
pg_restore -U admin -h localhost -p 5432 -d database_name -v /home/postgres/project_backup.dump

# 方案2 - 全部库备份
pg_dumpall -U username -h hostname -f backup_file.sql

# 恢复
psql -U username -h hostname -f backup_file.sql

pg_dump

优点

  • 可以选择性地备份和恢复特定的数据库、表或模式。
  • 支持多种输出格式(纯文本、自定义、tar、目录)。
  • 可以并行导出和导入数据,提高备份和恢复速度。

缺点

  • 只能备份单个数据库,无法备份整个数据库集群。
  • 对于大型数据库,备份和恢复可能会比较慢。

pg_dumpall

优点

  • 可以备份整个数据库集群,包括所有数据库和全局对象(如角色和表空间)。
  • 生成的备份文件包含所有数据库的创建和数据插入语句。

缺点

  • 只能生成纯文本格式的备份文件,不支持自定义格式、tar 格式或目录格式。
  • 备份和恢复速度较慢,尤其是对于大型数据库集群。
  • 不支持并行导出和导入数据。

对比

工具 主要功能 优点 缺点
pg_dump 备份单个数据库 支持多种输出格式;可以选择性备份和恢复特定表或模式;支持并行 只能备份单个数据库;大型数据库备份和恢复速度较慢
pg_dumpall 备份整个数据库集群,包括所有数据库和全局对象 可以备份整个数据库集群,包括所有数据库和全局对象 只能生成纯文本格式备份文件;备份和恢复速度较慢;不支持并行

3.3 命令行下查看建表语句

1
pg_dump -U db_user -h localhost -p 5432 -d database_name -t table_name -s

3.4 杀进程

1
2
3
4
5
6
-- pg查询链接
SELECT pid, usename, application_name, client_addr, query FROM pg_stat_activity;


-- kill链接
SELECT pg_terminate_backend(19737);

3.5 命令行指令

1
2
3
4
\h 帮助
\l 查看所有schema
\c 切换schema
\d 查看表结构

4、后记

常见的操作跟oracle概念很像,因此有oracle经验操作pg会相对顺手一些,暂且记录这些,后续有一些值得记录的再补充