背景:

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客户端,修改连接串等。

引入依赖:

        <dependency>
<groupId>org.mariadb.jdbc</groupId>
<artifactId>mariadb-java-client</artifactId>
</dependency>

修改连接串:

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

问题明朗了:
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<ISysPermission> findUserRolePermissionByUserName(String userName);

总结:

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

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

mysql 迁移 mariadb的更多相关文章

  1. Linux 上从 MySQL 迁移到 MariaDB 的简单步骤

    大家好!这是一篇介绍如何在服务器或个人电脑上从MySQL迁移到MariaDB的教程.也许你会问为什么我们要将数据库管理从MySQL迁移到MariaDB.往下看我们告诉你为什么这样做.为什么要用Mari ...

  2. 在 Linux 中怎样将 MySQL 迁移到 MariaDB 上

    自从甲骨文收购 MySQL 后,由于甲骨文对 MySQL 的开发和维护更多倾向于闭门的立场,很多 MySQL 的开发者和用户放弃了 MySQL.在社区驱动下,促使更多人移到 MySQL 的另一个叫 M ...

  3. 怎样将 MySQL 迁移到 MariaDB 上

    自从甲骨文收购 MySQL 后,由于甲骨文对 MySQL 的开发和维护更多倾向于闭门的立场,很多 MySQL 的开发者和用户放弃了它.在社区驱动下,促使更多人移到 MySQL 的另一个叫 MariaD ...

  4. MySQL迁移至MariaDB

    为什么要用MariaDB来代替MySQL MariaDB是MySQL社区开发的分支,也是一个增强型的替代品.它由MySQL前开发者们带头组织的基金会开发,使用起来和MySQL完全一样.自从Oracle ...

  5. 怎样将数据库MySQL 迁移到 MariaDB 上

    自从甲骨文收购 MySQL 后,由于甲骨文对 MySQL 的开发和维护更多倾向于闭门的立场,很多 MySQL 的开发者和用户放弃了它.在社区驱动下,促使更多人移到 MySQL 的另一个叫 MariaD ...

  6. 将数据从MySQL迁移到Oracle的注意事项

    将数据从MySQL迁移到Oracle的注意事项1.自动增长的数据类型处理MYSQL有自动增长的数据类型,插入记录时不用操作此字段,会自动获得数据值.ORACLE没有自动增长的数据类型,需要建立一个自动 ...

  7. CentOS 7 安装 WordPress,PHP,Nginx,MySQL(MariaDB),FTP

    主要资料参考:https://www.digitalocean.com/community/tutorials/how-to-install-linux-nginx-mysql-php-lemp-st ...

  8. 数据库 SQL Server 到 MySQL 迁移方法总结

    最近接手一起老项目数据库 SQL Server 到 MySQL 的迁移.因此迁移前进行了一些调查和总结.下面是一些 SQL Server 到 MySQL 的迁移方法. 1. 使用 SQLyog 迁移 ...

  9. MySQL迁移[转]

    http://dbarobin.com/2015/09/15/migration-of-mysql-on-different-scenes/ MySQL 迁移方案概览 MySQL 迁移无非是围绕着数据 ...

随机推荐

  1. GitHub 配置指南

    Git和GitHub的区别 GitHub术语解析 配置使用 注册GitHub帐号 创建Git 创建库 复制库 社交化 Git和GitHub的区别 Git是一个分布式的版本控制系统,与SVN类似:最初由 ...

  2. ubuntu14.04上安装Java

    apt-get安装 sudo add-apt-repository ppa:webupd8team/java sudo apt-get update sudo apt-get install orac ...

  3. Linux 7.4配置VSFTP服务器

    vsftpd(very secure ftp daemon,非常安全的FTP守护进程)是一款运行在Linux操作系统上的FTP服务程序,不仅完全开源而且免费,此外,还具有很高的安全性.传输速度,以及支 ...

  4. OSG-获取OSG的源代码和第三方库并编译

    获取OSG的源代码有很多方式. 这里说下其中的两个地方,第一就是中国的OSG网站http://www.osgchina.org/,这个网站目前应该是由中国西安恒歌科技维护,同时,西安恒歌科技也是一家已 ...

  5. Selenium(Python) ddt读取CSV文件数据驱动

    import csvimport unittestfrom time import sleep from ddt import ddt, data, unpackfrom selenium impor ...

  6. Selenium安装(二)

    安装python 安装Selenium之前首先来说一下Python,python是一门动态性语言,python的编写比较灵活,简洁,开发效率高.因此以python结合selenium来进行自动化测试. ...

  7. 第八模块:算法&设计模式、企业应用 第2章 企业应用工具学习

    第八模块:算法&设计模式.企业应用 第2章 企业应用工具学习

  8. JavaScript 常用控制流程代码范例

    if-else 的用法 var a = 33 if (a == 1){ console.log ('a等于1') } else if (a==2) { console.log ('a等于2') } e ...

  9. OpenMPI源码剖析1:MPI_Init初探

    OpenMPI的底层实现: 我们知道,OpenMPI应用起来还是比较简单的,但是如果让我自己来实现一个MPI的并行计算,你会怎么设计呢?————这就涉及到比较底层的东西了. 回想起我们最简单的代码,通 ...

  10. Linux内核设计笔记13——虚拟文件系统

    虚拟文件系统 内核在它的底层文件系统系统接口上建立一个抽象层,该抽象层使Linux可以支持各种文件系统,即便他们在功能和行为上存在很大差异. VFS抽象层定义了各个文件系统都支持的基本的.概念上的接口 ...