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客户端,修改连接串等。
引入依赖:
<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的更多相关文章
- Linux 上从 MySQL 迁移到 MariaDB 的简单步骤
大家好!这是一篇介绍如何在服务器或个人电脑上从MySQL迁移到MariaDB的教程.也许你会问为什么我们要将数据库管理从MySQL迁移到MariaDB.往下看我们告诉你为什么这样做.为什么要用Mari ...
- 在 Linux 中怎样将 MySQL 迁移到 MariaDB 上
自从甲骨文收购 MySQL 后,由于甲骨文对 MySQL 的开发和维护更多倾向于闭门的立场,很多 MySQL 的开发者和用户放弃了 MySQL.在社区驱动下,促使更多人移到 MySQL 的另一个叫 M ...
- 怎样将 MySQL 迁移到 MariaDB 上
自从甲骨文收购 MySQL 后,由于甲骨文对 MySQL 的开发和维护更多倾向于闭门的立场,很多 MySQL 的开发者和用户放弃了它.在社区驱动下,促使更多人移到 MySQL 的另一个叫 MariaD ...
- MySQL迁移至MariaDB
为什么要用MariaDB来代替MySQL MariaDB是MySQL社区开发的分支,也是一个增强型的替代品.它由MySQL前开发者们带头组织的基金会开发,使用起来和MySQL完全一样.自从Oracle ...
- 怎样将数据库MySQL 迁移到 MariaDB 上
自从甲骨文收购 MySQL 后,由于甲骨文对 MySQL 的开发和维护更多倾向于闭门的立场,很多 MySQL 的开发者和用户放弃了它.在社区驱动下,促使更多人移到 MySQL 的另一个叫 MariaD ...
- 将数据从MySQL迁移到Oracle的注意事项
将数据从MySQL迁移到Oracle的注意事项1.自动增长的数据类型处理MYSQL有自动增长的数据类型,插入记录时不用操作此字段,会自动获得数据值.ORACLE没有自动增长的数据类型,需要建立一个自动 ...
- CentOS 7 安装 WordPress,PHP,Nginx,MySQL(MariaDB),FTP
主要资料参考:https://www.digitalocean.com/community/tutorials/how-to-install-linux-nginx-mysql-php-lemp-st ...
- 数据库 SQL Server 到 MySQL 迁移方法总结
最近接手一起老项目数据库 SQL Server 到 MySQL 的迁移.因此迁移前进行了一些调查和总结.下面是一些 SQL Server 到 MySQL 的迁移方法. 1. 使用 SQLyog 迁移 ...
- MySQL迁移[转]
http://dbarobin.com/2015/09/15/migration-of-mysql-on-different-scenes/ MySQL 迁移方案概览 MySQL 迁移无非是围绕着数据 ...
随机推荐
- JQuery表单验证插件
使用jQuery的validate插件实现一个简单的表单验证 <!DOCTYPE html> <html> <head> <meta charset=&quo ...
- Spring的cache缓存介绍
从3.1开始,Spring引入了对Cache的支持.其使用方法和原理都类似于Spring对事务管理的支持.Spring Cache是作用在方法上的,其核心思想是这样的:当我们在调用一个缓存方法时会把该 ...
- ORA-15032、ORA-15071错误处理
遇到一下错误 ERROR at line 1: ORA-15032: not all alterations performed ORA-15071: ASM disk "NOCR_0002 ...
- javaweb(九)—— 通过Servlet生成验证码图片
一.BufferedImage类介绍 生成验证码图片主要用到了一个BufferedImage类,如下:
- leetcode-位1的个数(位与运算)
位1的个数 编写一个函数,输入是一个无符号整数,返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为汉明重量). 示例 : 输入: 11 输出: 3 解释: 整数 11 的二进制表示为 00000 ...
- C++错误:Process returned -1073741571 (0xC00000FD)
最近写程序时,需要将一个一维数组编程二维数组,很简单,写完之后,运行错误! 提示:Process returned -1073741571 (0xC00000FD) 刚开始写的代码如下: #inclu ...
- 【转】跨平台移动端开发框架NativeScript 发布正式版本
原文:http://news.cnblogs.com/n/520865/ Nativescript 项目地址:http://www.telerik.com/nativescript “一次编码,处处运 ...
- Python入门(5)
导览: 函数 集合 迭代器与生成器 模块 一.函数 只要学过其他编程语言应该对函数不太陌生,函数在面向过程的编程语言中占据了极重要的地位,可以说没有函数,就没有面向过程编程,而在面向对象语言中,对象的 ...
- struts2 result type属性说明
首先看一下在struts-default.xml中对于result-type的定义: <result-types><result-type name="chain" ...
- c# 有无符号值进一步了解
1.编写过程中用到了short类型(有符号型,值范围含负值).两个正数之和得负. 改为int或unsigned short 均可. 2.注意,short型(-32768,32767)举例:做自加运算, ...