mysql to actordb_mysql 迁移 mariadb

背景:

mysql5.7数据库安装在windows环境中,数据需要迁移到CentOS7.4的mariadb5.5中。web应用是采用springboot2.x开发的,迁移数据完成后,还需要简单修改一些应用的配置。

1、在windows环境中使用mysqldump -u root -p busdata > D:\data\busdata.dump命令将数据库busdata里的所有数据dump出来。

2、使用ftp将busdata.dump上传到linux。

3、linux数据库主机上,在mariadb数据库中创建一个空的数据库busdata,使用命令mysql -u root -p busdata < /root/busdata.dump导入数据。

4、至此一切顺利。进到数据库查询数据一切正常。当然之前需要确保windows环境和linux环境里数据库编码设置相同,全部都是utf8。

5、修改程序引入Maria客户端,修改连接串等。

引入依赖:

org.mariadb.jdbc

mariadb-java-client

修改连接串:

spring:

datasource:

driver-class-name: org.mariadb.jdbc.Driver

url: jdbc:mariadb://192.168.31.10:3306/busdata?useUnicode=true&characterEncoding=UTF-8

username: abc

password: abc

6、部署后,启动程序测试,在用户登录时候,报找不到用户的错误。一阵昏天黑地的调试后,无意中查看数据库表发现问题。

6d0f229bc0304f090250412e23fe16fb.png

问题明朗了:1、因为用的JPA自动创建数据库表,程序没有识别原有的表,又重新创建一套表格。2、观察表格发现,导入的表都是小写表名,里面都有数据,驼峰表名是新创建的,都没数据。

原因:1、在windows环境下,程序里指定了表名策略,用的是org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl,创建表的时候,表名被全部自动小写,实际并没有按类名真实的驼峰书写来创建。2、而数据库在linux环境下,是大小写敏感,JPA这次是按驼峰书写来判断,也按驼峰书写来创建表名,所以又重新创建了一套表格。

解决办法:

在实体中强行指定小写表名,例如:@Table(name= "user"),在linux环境中全部小写。

这里属于设计上的失误,表名不应该使用驼峰命名,应该统一小写,并使用下划线来分隔语义,这样在不同的操作系统环境迁移数据就不会发生这样的事情,虽然全部小写也没有问题,但是可读性实在太差。

隐患:

所有手写sql的地方都要全部检查,是否使用了驼峰书写,如果有,都需要修改过来。

例如,下例自定义SQL中,所有涉及表名,字段名都大小写敏感,需要全部核查。//根据用户名,获取用户具备的权限。

@Query(value="select a.userId,a.userName,d.permissionId,d.permission,d.permissionName from user a \n" +

"inner join sysuserrole b on a.userId = b.userId \n" +

"inner join sysrolepermission c on b.roleId = c.roleId\n" +

"inner join syspermission d on c.permissionId=d.permissionId\n" +

"where a.userName=?1",

countQuery= "select a.userId,a.userName,d.permissionId,d.permission,d.permissionName from user a \n" +

"inner join sysuserrole b on a.userId = b.userId \n" +

"inner join sysrolepermission c on b.roleId = c.roleId\n" +

"inner join syspermission d on c.permissionId=d.permissionId\n" +

"where a.userName=?1",

nativeQuery= true)

List findUserRolePermissionByUserName(String userName);

总结:

1、实体一定自定义表名,不要使用缺省类名,统一使用小写+下划线命名方式

2、手写sql一定要注意大小写敏感环境,也同样使用小写+下划线方式命名。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
大模型安全评估测试题大模型安全评估测试题关键词库生成内容测试题库应拒答测试题库非拒答测试题大模型安全评估测试题大模型安全评估测试题关键词库生成内容测试题库应拒答测试题库非拒答测试题大模型安全评估测试题大模型安全评估测试题关键词库生成内容测试题库应拒答测试题库非拒答测试题大模型安全评估测试题大模型安全评估测试题关键词库生成内容测试题库应拒答测试题库非拒答测试题大模型安全评估测试题大模型安全评估测试题关键词库生成内容测试题库应拒答测试题库非拒答测试题大模型安全评估测试题大模型安全评估测试题关键词库生成内容测试题库应拒答测试题库非拒答测试题大模型安全评估测试题大模型安全评估测试题关键词库生成内容测试题库应拒答测试题库非拒答测试题大模型安全评估测试题大模型安全评估测试题关键词库生成内容测试题库应拒答测试题库非拒答测试题大模型安全评估测试题大模型安全评估测试题关键词库生成内容测试题库应拒答测试题库非拒答测试题大模型安全评估测试题大模型安全评估测试题关键词库生成内容测试题库应拒答测试题库非拒答测试题大模型安全评估测试题大模型安全评估测试题关键词库生成内容测试题库应拒答测试题库非拒答测试题大模型安全
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值