Oracle を MySQL に置き換える際の問題と解決策

Oracle を MySQL に置き換える際の問題と解決策

移行ツール

テスト中、テーブル構造の変換には powerdesinger が使用され、データのインポートには Navicat が使用されました。 実稼働環境のデータ量は膨大であり、データ グループの同僚は、必要に応じて他のツールを使用してデータを移行し、補足することになります。

アプリケーション変換

mysql8.0 ドライバ パッケージを追加

mysql-connector-java-8.0.15.jar を使用します。Maven によって管理されている場合は、依存関係を直接追加します。

                <!--MySql ドライバー-->
		<依存関係>
			<グループID>mysql</グループID>
			<artifactId>mysql-コネクタ-java</artifactId>
			<バージョン>8.0.15</バージョン>
			<scope>ランタイム</scope>
		</依存関係>

データソース構成の変更

spring.datasource.driver クラス名 = com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://host:ip/database?useUnicode=true&characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=パスワード

オブジェクト変換

  • Hibernate を使用する場合は、設定ファイル内の主キーの自動インクリメント シーケンスを削除するか、MySQL で主キーを自動インクリメントに設定するか、シーケンスに対応する関数を作成します。 MySQL クラスタを使用する場合、主キーの生成方法が変わります。
  • 各 SQL ステートメント、特に mybatis にスプライスされた SQL ステートメントをチェックします。これには以下が含まれます。
    • 主キーの変更: シーケンスを削除するか、データベース内の主キーを自動増分に変更するか、対応する自動増分関数を作成します。
    • mysqlキーワードを含むフィールドを処理するには、「識別子」を使用します
    • 日付形式の処理
    • rownum 条件クエリを limit 条件クエリに変更します

問題の概要

問題: MySQL データベースへのローカル リモート接続で、10060 ログイン例外が報告される

  • この問題の考えられる原因:

1. ネットワークにアクセスできません。2. サービスが開始されていません。3. ファイアウォールが閉じられていません。4. サーバーのファイアウォール ポートが開いていません。5. ポートが監視されていません。6. 権限が不十分です。 テスト データベース サーバーのポート 3306 が開いていない原因をトラブルシューティングして調べるためにここに来ました。

  • 解決:
sudo vim /etc/sysconfig/iptables
-A 入力 -p tcp -m 状態 --state 新規 -m tcp --dport 3306 -j 受け入れる
sudo サービス iptables を再起動
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 - 'TIME_CREATE' に指定された精度 7 が大きすぎます。最大値は 6 です。

  • 理由: Oracle の DATE 型は 7 桁ですが、MySQL の時刻型は最大 6 桁であるため、インポートできません。
  • 解決策: Oracle データベースの DATE を TIMESTAMP に変更し、長さを 6 に変更します (保存する前に必ずタイプと長さの両方を変更してください)。その後、インポートできます。

問題: データ移行中に varchar フィールドを挿入するときにエラーが発生する --> 行 1 の列 'DESIGNER' のデータが長すぎる

  • 理由: Oracle と MySQL は異なるエンコーディング セットを使用しているため、同じ文字に対して異なるストレージ長要件が発生します (さらに詳細な理解が必要です)
  • 解決策: msyqlのフィールド長を拡張する必要があります

問題: SpringBoot が MySQL に接続し、エラーを報告します --> 不明なシステム変数 'query_cache_size'

  • 理由: MySQL ドライバー jar パッケージのバージョンが低すぎるため、MySQL 8.0 と互換性がありません。
  • 解決策: mysql-connector-java-8.0.15.jar を使用し、ドライバー名を com.mysql.cj.jdbc.Driver に変更します。

問題: MySQL に変更した後、アプリケーションのフロントエンド ページに表示される中国語の文字が文字化けします。

  • 原因: データベース、サーバー、ページの3つの側面からエンコード形式を確認してください。
    • MySQL データベースのエンコード形式のチェック
    • サーバーのエンコード形式を確認する
    • フロントエンドページのコーディング形式チェック

最後に、Navicat 接続でエンコード形式が utf-8 に設定されていたことが判明しました。これにより、インポートされたデータは Navicat では正常に表示されますが、データベースとクエリ結果では文字化けしていました。本当に長い間これをチェックしていましたが、ツールの理由に気づきませんでした。 。

  • 解決策: エンコード形式をリセットし、データをインポートして、正常に表示します。

上記は、Oracle から MySQL に切り替える際に発生する問題と解決策の詳細です。Oracle から MySQL への切り替えの詳細については、123WORDPRESS.COM の他の関連記事にご注目ください。

以下もご興味があるかもしれません:
  • MySQL および Oracle のバッチ挿入 SQL の一般的な記述例
  • MySQLからOracleへのリアルタイムデータ同期

<<:  JavaScript の基本変数

>>:  VMware ESXi サーバー仮想化クラスター

推薦する

CentOS 起動時にカーネルモジュール overlayfs 操作を自動的にロードする

CentOS でカーネル モジュールを自動的にロードするには、/etc/sysconfig/modu...

MySQL で 2 つのセットの交差/差/和を取得する方法

MySQL の一般的なシナリオ: 2 つのデータ セットの交差と差を取得するステップ1. 2つのコレ...

HTML テーブルタグチュートリアル (12): 境界線スタイル属性 FRAME

FRAME プロパティを使用して、表の境界線のスタイル タイプを制御します。基本的な構文<T...

Dockerイメージの作成、アップロード、プル、デプロイを理解するための記事

目次1. 画像1. 鏡とは何ですか? 2. 画像の構成と目的(1) Dockerファイル(2)スクラ...

デザイン参考 WordPressウェブサイト構築成功事例

これら 16 のサイトはそれぞれ注意深く読む価値があり、どのサイトでも推奨されている Web サイト...

JavaScript 関数はランダムな色の検証コードをカプセル化します (完全なコード)

数字、文字、またはランダムな色の数字と文字の混合で構成される n 桁の確認コード。以下に完全なコード...

Vue3 における親コンポーネントと子コンポーネント間の値の転送の詳細な説明

vue3 が誕生してからかなり時間が経ち、筆者も最近になって vue3 を学び始めました。 vue2...

MySQL と Golan 間の従来の分散トランザクションのための 7 つのソリューション

目次1. 基本理論1.1 取引1.2 分散トランザクション2. 分散トランザクションソリューション2...

MySQL データベース内の varchar 型の数値のサイズを比較する方法

テストテーブルを作成する -- ---------------------------- -- ch...

HTML のメタタグの簡単な比較

メタ タグは、ファイル情報を定義し、検索エンジンによる検索を容易にするために Web ページ ファイ...

カレンダー効果を実現するJavaScript

この記事では、カレンダー効果を実現するためのJavaScriptの具体的なコードを参考までに紹介しま...

vue3 を使用してマテリアル ライブラリを構築する方法

目次なぜマテリアルライブラリが必要なのでしょうか?材質は何ですか?素材の種類fuep、vue3 ベー...

CentOS 7 で MySQL 5.7 をインストールして設定する

この記事では、以下の環境をテストします。 CentOS 7 64 ビット 最小 MySQL 5.7 ...

MySQL で準備、実行、割り当て解除ステートメントを使用するチュートリアル

序文MySQLでは、準備、実行、割り当て解除を正式にはPREPARE STATEMENTと呼びます。...

MySQLの基礎知識学習ノート

データベースを表示show databases;データベースを作成するDATABASE データベース...