一,设置翰高数据库可以远程访问
检查数据库服务状态
# 检查数据库服务是否运行 sudo systemctl status highgo # 如果没有运行,启动服务 sudo systemctl start highgo # 检查进程 ps aux | grep postgres
检查本地连接
# 先在数据库服务器本地测试连接 psql -h localhost -p 5866 -d highgo -u jing -c "select version();"
配置远程访问
vi /home/jing/hgdb-v9.0/data/postgresql.conf
找到并修改
listen_addresses = '*' # 允许所有ip连接 port = 5866
修改客户端认证
# 允许从任何ip连接 host all all 0.0.0.0/0 scram-sha-256
重启数据库服务器
# 重启服务 sudo systemctl restart highgo
检查端口监听
# 检查5866端口是否在监听 netstat -tulpn | grep 5866 # 应该看到类似: # tcp 0 0 0.0.0.0:5866 0.0.0.0:* listen 12345/postgres
配置防火墙
# 开放5866端口 sudo ufw allow 5866 # 或者针对特定ip开放 sudo ufw allow from 192.168.190.154 to any port 5866 # 检查防火墙状态 sudo ufw status
备注,如果检查端口监听时,出现
tcp 0 127.0.0.1:5866 0.0.0.0:* listen 12345/postgres
这会只能本地连接,不能远程连接。
需要再排查下原因,这是我遇到的问题,解决方案
用root权限检查端口监听
# 用sudo检查端口监听(显示完整信息) sudo netstat -tulpn | grep 5866 # 或者使用ss命令 sudo ss -tulpn | grep 5866
检查数据库日志
# 查看数据库启动日志 sudo journalctl -u highgo -n 20 # 或者查看数据库日志文件 sudo tail -f /home/jing/hgdb-v9.0/data/log/*.log
检查是否有其他配置覆盖
# 检查所有配置文件中关于listen的设置 sudo grep -r "listen" /home/jing/hgdb-v9.0/data/ # 检查是否有环境变量覆盖 sudo grep -r "pgport\|pghost" /etc/systemd/system/
通过以上找到问题
有两个配置文件在冲突:
/home/jing/hgdb-v9.0/data/postgresql.conf - 设置了 listen_addresses = ‘*’
/home/jing/hgdb-v9.0/data/db.conf - 设置了 listen_addresses = ‘localhost’
db.conf 文件覆盖了 postgresql.conf 的设置!
解决方案
# 编辑 db.conf 文件 sudo vi /home/jing/hgdb-v9.0/data/db.conf
找到并修改:
# 将 listen_addresses = 'localhost' # 改为 listen_addresses = '*'
重启数据库服务
# 重启服务 sudo systemctl restart highgo # 检查状态 sudo systemctl status highgo # 检查端口监听 sudo netstat -tulpn | grep 5866
应该能看到
tcp 0 0 0.0.0.0:5866 0.0.0.0:* listen xxxxx/postgres
二,进行迁移,这里选择从mysql迁移到翰高数据库
方法1,使用 navicat premium
navicat premium 支持多种数据库,包括 mysql 和 postgresql(与翰高数据库兼容),可以方便地进行数据传输。
步骤
1,准备环境:确保你安装了 navicat premium,并且可以同时连接到源 mysql 数据库和目标翰高数据库。
2,创建目标空数据库:在翰高数据库中创建一个空的数据库,用于接收数据。
3,使用“数据传输”功能:
- 在 navicat 中,选择 工具 -> 数据传输。
- 源:选择你的 mysql 连接和数据库。
- 目标:选择你的翰高数据库连接和刚创建的空数据库。
4,配置传输选项:
- “高级”选项卡:这是关键。
勾选 “遇到错误时继续”,避免因单条记录失败而中断整个进程。
在 “记录转换” 或类似选项中,可以选择在传输时执行一些简单的数据转换。
- “选项”选项卡:可以选择传输表结构、数据、索引、约束等。建议第一次先只传输 “结构”,检查和修复问题后,再单独传输 “数据”。
5,运行并检查:
- 开始传输。navicat 会自动尝试创建兼容的表结构并插入数据。
- 传输完成后,务必仔细检查日志文件,查看是否有表创建失败、数据类型转换错误或数据插入失败等情况。
6,手动修复:根据日志中的错误,手动在翰高数据库中修复不兼容的 sql 语句或数据类型。

方法2:使用 sql 文件导出和导入 (通用方法)
这是一种比较原始但可控的方法,适用于数据量不大或需要深度定制的情况。
步骤:
1,从 mysql 导出结构和数据
使用 mysqldump 工具,但最好将表结构和数据分开导出,以便于修改。
导出仅结构:
mysqldump -h [mysql_host] -u [user] -p --no-data [database_name] > mysql_schema.sql
导出仅数据:
mysqldump -h [mysql_host] -u [user] -p --no-create-info [database_name] > mysql_data.sql
2,转换 sql 文件
这是最繁琐但最关键的一步。你需要手动或使用脚本修改 mysql_schema.sql 文件,使其符合翰高数据库(postgresql)的语法。
常见转换项:
反引号:mysql 使用 `,postgresql 使用 " 或不使用(如果表名/字段名不是关键字)。
自增主键:
mysql: id int auto_increment primary key
postgresql: id serial primary key 或 id int generated always as identity primary key
- 字符串类型:
longtext -> text
tinytext -> text 或 varchar
varchar(255) -> varchar(255) (通常不变)
- 日期时间类型:
datetime -> timestamp
timestamp -> timestamptz (建议,带时区)
- 布尔类型:
tinyint(1) -> boolean
- 注释语法:
mysql: comment 这是一个注释
postgresql: comment on column table_name.column_name is ‘这是一个注释’;
索引:检查是否有特定于 mysql 的索引类型(如 fulltext),需要在翰高中找到替代方案(如 gin 索引)。
引擎声明:删除 engine=innodb 等。
3,在翰高数据库中导入
使用 psql 命令行工具连接到翰高数据库。
先导入修改后的结构文件:
psql -h [highgo_host] -u [highgo_user] -d [highgo_database] -f converted_schema.sql
- 然后导入数据文件:
psql -h [highgo_host] -u [highgo_user] -d [highgo_database] -f mysql_data.sql
4,修复序列(自增)
数据导入后,表的自增序列可能没有更新到最大值,需要手动重置。
sql
-- 为每个有自增主键的表执行以下操作(以表 your_table 和主键列 id 为例)
select setval(pg_get_serial_sequence('your_table', 'id'), coalesce(max(id), 1)) from your_table;
-- 或者使用一个脚本生成所有表的修复语句
select 'select setval(pg_get_serial_sequence(''' || table_name || ''', ''' || column_name || '''), coalesce(max(' || column_name || '), 1)) from ' || table_name || ';'
from information_schema.columns
where table_schema = 'public'
and column_default like 'nextval%';
三,迁移后的关键检查和验证
无论使用哪种方法,迁移完成后都必须进行验证:
1.数据一致性检查:随机抽取几张表,对比 mysql 和翰高数据库中的记录数量以及关键字段的值是否一致。
2.应用程序测试:将应用程序的连接字符串指向新的翰高数据库,进行全面的功能测试、性能测试和压力测试。
3.检查存储过程和函数:如果 mysql 中有存储过程、函数或触发器,它们几乎 100% 需要重写,因为两者的语法完全不同。这部分通常是手动工作量最大的。
4.检查外键和约束:确保所有外键约束、唯一约束等都正确迁移。
5.权限配置:重新配置应用程序用户的权限。
总结
到此这篇关于如何将mysql迁移到翰高数据库的文章就介绍到这了,更多相关mysql迁移到翰高数据库内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论