如何将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 选择合适的存储引擎

    MySQL 选择合适的存储引擎

    这篇文章主要介绍了MySQL如何选择合适的存储引擎,帮助大家更好的理解和使用MySQL数据库,感兴趣的朋友可以了解下
    2020-09-09
  • 一文带你彻底了解MySQL事务机制

    一文带你彻底了解MySQL事务机制

    一个事情由n个单元组成,这n个单元在执行过程中,要么同时成功,要么同时失败,这就把n个单元放在了一个事务之中,这篇文章主要给大家详细介绍MySQL的事务机制,感兴趣的同学欢迎阅读本文
    2023-06-06
  • Ubuntu18.04安装mysql5.7.23的教程

    Ubuntu18.04安装mysql5.7.23的教程

    这篇文章主要为大家详细介绍了Ubuntu18.04安装mysql5.7.23的教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-02-02
  • DROP TABLE在不同数据库中的写法整理

    DROP TABLE在不同数据库中的写法整理

    这篇文章主要介绍了DROP TABLE在不同数据库中的写法整理的相关资料,需要的朋友可以参考下
    2017-04-04
  • MyBatis 如何写配置文件和简单使用

    MyBatis 如何写配置文件和简单使用

    这篇文章主要介绍了MyBatis 如何写配置文件和简单使用的相关资料,需要的朋友可以参考下
    2017-01-01
  • 浅谈MySQL函数

    浅谈MySQL函数

    这篇文章主要介绍MySQL函数,主要解说数学函数、字符串函数、 时间函数、加密函数,需要的朋友可以参考下面文章具体内容
    2021-09-09
  • MySQL修改配置 区分大小写

    MySQL修改配置 区分大小写

    修改MySql Server安装目录下的 my.ini 文件,在mysqld节下加入下面一行 set-variable=lower_case_table_names=0 (0:大小写敏感;1:大小写不敏感)最后重启一下MySql服务即可。
    2010-12-12
  • Mysql根据一个表的数据更新另一个表数据的SQL写法(三种写法)

    Mysql根据一个表的数据更新另一个表数据的SQL写法(三种写法)

    这篇文章主要介绍了Mysql根据一个表的数据更新另一个表数据的SQL写法,本文给大家分享三种解决方法,需要的朋友可以参考下
    2023-06-06
  • 基于sqlalchemy对mysql实现增删改查操作

    基于sqlalchemy对mysql实现增删改查操作

    这篇文章主要介绍了基于sqlalchemy对mysql实现增删改查操作,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-06-06
  • mysql 8.0.22 安装配置方法图文教程

    mysql 8.0.22 安装配置方法图文教程

    这篇文章主要为大家详细介绍了mysql 8.0.22 安装配置方法图文教程,文中安装步骤介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-10-10

最新评论