Oracle에서 MySQL로 교체되는 문제 및 해결

3518 단어 OracleMySQL

마이그레이션 도구


테스트 시 Powerdesinger를 사용하여 테이블 구조 변환을 하고 Navicat를 사용하여 데이터 가져오기를 합니다.생산 환경의 데이터 양이 비교적 많기 때문에 데이터 그룹 동료가 다른 도구를 선택하여 이전하고 그때 다시 보충할 것이다.

응용 개조


mysql8.0 드라이브 패키지 추가


mysql-connector-java-8.0.15 사용하기jar, maven 관리라면 의존도를 직접 추가합니다.

                <!--MySql   -->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>8.0.15</version>
			<scope>runtime</scope>
		</dependency>

데이터 소스 구성 수정


spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://host:ip/database?useUnicode=true&characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=password

대상 개조

  • 만약에 사용하는hibernate는 프로필의 키 증가 시퀀스를 삭제하고 mysql에서 키 증가 시퀀스로 설정합니다.또는 시퀀스에 대응하는 함수를 만듭니다.mysql 집단을 사용하면 메인 키의 생성 방식이 바뀔 수 있습니다
  • 조목조목 sql 검사, 특히 mybatis에서 연결된 sql 문장은 다음과 같다.
  • 메인 키 수정: 시퀀스 sequence 삭제, 데이터베이스에서 메인 키는 자체 증가;또는 자동 증가 함수를 만듭니다
  • mysql 키워드와 관련된 필드를 처리하고 ``표지를 사용합니다
  • 날짜 형식 처리
  • rownum 조건 조회를limit 조건 조회로 변경
  • 문제 요약


    문제: 로컬 원격 연결 mysql 데이터베이스, 10060 로그인 이상

  • 이 문제가 발생할 수 있는 원인:
  • 1. 네트워크가 통하지 않는다.2. 서비스가 시작되지 않았습니다.3. 방화벽이 닫히지 않았습니다.4. 서버에 방화벽 포트가 열려 있지 않습니다.5. 포트가 감청되지 않았습니다.6. 권한이 부족합니다.테스트 데이터베이스 서버에 3306 포트가 열려 있지 않은 원인을 조사했습니다.
  • 해결 방법:
  • 
    sudo vim /etc/sysconfig/iptables
    -A INPUT -p tcp -m state --state NEW -m tcp --dport 3306 -j ACCEPT
    sudo service iptables restart
    sudo iptables -L -n
    

    문제: Navicat 연결 MySQL8 오류 2059

  • 이유: mysql8 이전 버전의 암호화 규칙은 mysql_native_password, mysql8 이후 암호화 규칙은caching_sha2_password
  • 해결 방법: 암호화 규칙 변경
  • 
    mysql -uroot -ppassword # 
    use mysql; # 
    ALTER USER 'root'@'%' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER; # 
    ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'password'; # 
    FLUSH PRIVILEGES; # 
    

    문제: Navicat 마이그레이션 데이터 오류 발생 --> [err] [Dtf] 1426 - Too-big precision 7 specified for'TIME_CREATE'. Maximum is 6.

  • 이유:oracle의 DATE 형식은 7자리이고 mysql의 시간 형식은 최대 6자리이기 때문에 가져올 수 없습니다.
  • 해결 방법: oracle 라이브러리의 DATE를 TIMESTAMP로 변경하고 길이를 6(유형과 길이를 모두 수정해야 저장)으로 변경하여 가져올 수 있습니다
  • 문제: 데이터 마이그레이션 중 varchar 필드 삽입 오류 - > 열 "DESIGNER" at row 1용 Data too long

  • 이유: Oracle과 mysql은 서로 다른 인코딩 집합을 채택하여 같은 문자라도 저장 길이의 요구가 다르다(더 깊이 이해해야 한다)
  • 해결 방법: msyql에서 필드 길이를 확장해야 합니다.
  • 문제: SpringBoot 연결 mysql 오류 --> Unknown system variable'query_cache_size'

  • 원인: mysql 드라이브jar 패키지 버전이 너무 낮아서 mysql8.0과 호환되지 않습니다
  • .해결 방법: mysql-connector-java-8.0.15 사용jar, 드라이브 이름은com으로 바꿉니다.mysql.cj.jdbc.Driver

    문제: mysql로 변경한 후 전방 페이지 조회 중국어 디코딩 적용

  • 이유: 데이터베이스, 서버, 페이지 세 차원에서 인코딩 형식을 배열합니다.
  • MySQL 데이터베이스 인코딩 형식 배열
  • 서버 인코딩 형식 배열
  • 프런트엔드 페이지 인코딩 형식 검사
  • 최종적으로 Navicat 연결에서 인코딩 형식이utf-8로 설정되어 가져온 데이터가 Navicat에서 정상적으로 보이지만 데이터베이스에서 난호이고 조회 결과도 난호인 것을 발견했다.이것은 정말 오랫동안 조사해서 시공구의 원인을 알아차리지 못했다.
  • 해결 방법: 인코딩 형식을 다시 설정하고 데이터를 가져와 정상적으로 표시합니다
  • 다음은 Oracle에서 MySQL로 교체하는 과정에서 발생한 문제 및 해결에 대한 자세한 내용입니다. Oracle에서 MySQL로 교체하는 방법에 대한 자세한 내용은 기타 관련 기사를 참조하십시오!

    좋은 웹페이지 즐겨찾기