如何将mysql迁移到翰高数据库

 更新时间:2026年03月08日 11:42:41   作者:shan~~  
瀚高基础软件股份有限公司成立于2005年,是国内数据库行业龙头企业,专业从事数据库管理系统研发、销售与服务,下面这篇文章主要介绍了如何将mysql迁移到翰高数据库的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下

一,设置翰高数据库可以远程访问

检查数据库服务状态

# 检查数据库服务是否运行
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迁移到翰高数据库内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Mysql使用on update current_timestamp问题

    Mysql使用on update current_timestamp问题

    这篇文章主要介绍了Mysql使用on update current_timestamp问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • MySQL curdate()函数的实例详解

    MySQL curdate()函数的实例详解

    这篇文章主要介绍了MySQL curdate()函数的实例详解的相关资料,希望通过本文能帮助到大家理解应用MysqL curdate()的使用方法,需要的朋友可以参考下
    2017-09-09
  • 在MySQL中奏响数据库操作的乐章(推荐)

    在MySQL中奏响数据库操作的乐章(推荐)

    本文详细介绍了如何在MySQL中进行数据库操作,包括创建、删除、修改数据库等,以及如何使用字符集和校验规则,以及备份和恢复数据库的方法,同时,还讨论了如何查看和修改数据库的结构和数据,总的来说,本文为读者提供了一份全面的MySQL数据库操作指南
    2024-10-10
  • 浅析mysql索引

    浅析mysql索引

    数据库索引是一种数据结构,目的是提高表的操作速度,下面通过本文给大家分享mysql索引的相关知识,感兴趣的朋友一起看看吧
    2017-10-10
  • MySql 5.6.35 winx64 安装详细教程

    MySql 5.6.35 winx64 安装详细教程

    这篇文章主要介绍了MySql 5.6.35 winx64 安装详细教程,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2017-02-02
  • mysql InnoDB建表时设定初始大小的方法

    mysql InnoDB建表时设定初始大小的方法

    这篇文章主要介绍了mysql InnoDB建表时设定初始大小的方法,需要大家到MYSQL后台实际操作方可以看到效果
    2013-11-11
  • MySQL实现行列转换

    MySQL实现行列转换

    这篇文章介绍了MySQL实现行列转换的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-07-07
  • 简述mysql监控组复制

    简述mysql监控组复制

    这篇文章主要介绍了mysql监控组复制的相关资料,帮助大家更好的理解和学习mysql,感兴趣的朋友可以了解下
    2020-08-08
  • MySQL 行锁和表锁的含义及区别详解

    MySQL 行锁和表锁的含义及区别详解

    这篇文章主要介绍了MySQL 行锁和表锁的含义及区别详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • MySQL 中查询 VARCHAR 类型 JSON 数据的问题记录

    MySQL 中查询 VARCHAR 类型 JSON 数据的问题记录

    在数据库设计中,有时我们会将 JSON 数据存储在 VARCHAR 或 TEXT 类型字段中,本文将详细介绍如何在 MySQL 中有效查询存储为 VARCHAR 类型的 JSON 数据,感兴趣的朋友一起看看吧
    2025-04-04

最新评论