【mysql快速迁移至vastbase(海量数据库)问题记录】

项目场景

需要将数据库从MySQL迁移到 vastbase(海量数据库),然后遇到大大小小的bug,有些搜索半天,在此统一记录下;


1 Navicat 登录失败:提示到期的用户

提示:修改到期的用户xxxx的密码:
提示到期的用户
此时其实用idea的数据库连接或者VDS(海量数据库自己的连接工具)是可以连的;

不用 执行 该命令,需登录 xxxx 账号,然后使用xxx账号执行命令:

	ALTER ROLE xxxx IDENTIFIED BY 'password' REPLACE 'old password';

2 登录失败:账户被锁定

提示:登录次数过多或者密码错误过多,账户被锁定:

账户被锁定
由于程序会不停尝试连接数据库,所以改密码前最好将程序停掉;

账号被锁定后,需要使用管理员或者以上角色的账号执行解封sql:

	alter user xxxx account unlock;

3 数据库结构迁移

由于两者表结构不一样,需要表和数据分开同步

3.1 表迁移

先将MySQL库单独复制一份纯表结构的库,方便同步:

先导出表结构,然后在MySQL新库执行sql文件
只导出结构
然后新建个备用库执行sql
运行sql文件

vastbase新建一个数据库:

由于Navicat新建数据库没兼容模式选项,这里使用sql建库,账号需有建库权限;

创建库时需指定 DBCOMPATIBILITY = 'B' 将数据库兼容模式改为MySQL 默认是A兼容的Oracle:

CREATE DATABASE db_test
WITH
OWNER = test
ENCODING = 'UTF-8'
TEMPLATE = "template0"
DBCOMPATIBILITY = 'B'
TABLESPACE = pg_default
LC_COLLATE = 'POSIX'
LC_CTYPE = 'POSIX'
CONNECTION LIMIT = -1
PAD_ATTRIBUTE = 'N' ;

从复制的表数据同步vastbase

选择数据传输:
数据传输
mysql传输到vastbase
在这里插入图片描述
选择全部表下一步,
然后勾选上遇到错误时继续
在这里插入图片描述
点击开始按钮开始同步表结构;

3.2 默认值迁移

同步到vastbase后无默认值,需要额外执行sql

生成sql

mysql中运行sql获取所有的默认值:

SELECT concat('ALTER TABLE \"public\".\"',TABLE_NAME , '\" alter column  \"',COLUMN_NAME,'\" set DEFAULT ',IF(data_type='varchar',concat('\'',COLUMN_DEFAULT,'\''),COLUMN_DEFAULT),';')
FROM information_schema.columns
WHERE TABLE_SCHEMA = 'db_test_b'  AND COLUMN_DEFAULT is not null; 

然后将生成的结果在vastbase中执行;

注意:该sql只兼容了 varchar 的字符串,如果执行报错自己手动在该行上加 ‘’ 引号后接着执行。

3.3 自增主键迁移

同步到vastbase后无自增主键,需要额外执行sql以添加自增主键

官方推荐的方法我在使用时频繁报错;若该方法对您有效,建议直接采用:

  -- 建表时自增
  CREATE TABLE test1(auto_id int primary key AUTO_INCREMENT, b int);
  -- 修改为自增
  ALTER TABLE "test1" modify "auto_id" int AUTO_INCREMENT;
  -- 修改当前值
  ALTER TABLE test1auto_increment = 998;
  

下面是我自己实际项目中同步的方式:

MySQL数据库中获取需要修改为自增的主键,将生成的sql在vastbase中执行:

SELECT concat('CREATE SEQUENCE ',TABLE_NAME , '_auto_seq INCREMENT BY 1 MINVALUE 1  MAXVALUE 9999999999999999 START WITH 1 CACHE 1;',
 'ALTER TABLE public.',TABLE_NAME,' ALTER COLUMN "',COLUMN_NAME,'" SET DEFAULT nextval(''',TABLE_NAME , '_auto_seq''::regclass);',
 'ALTER SEQUENCE public.',TABLE_NAME,'_auto_seq OWNED BY public.',TABLE_NAME,'.',COLUMN_NAME,';')
FROM information_schema.columns
WHERE TABLE_SCHEMA = 'db_test_b' AND EXTRA = 'auto_increment';

MySQL数据库中获取自增主键当前值,将生成的sql在vastbase中执行:

SELECT concat('ALTER TABLE ',TABLE_NAME , ' auto_increment = ',auto_increment,';')
FROM information_schema.tables
WHERE TABLE_SCHEMA = 'd412' AND auto_increment is not null;

结束语

没迁移工具真TM难整,一整就是一天

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值