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 サーバー仮想化クラスター

推薦する

モバイルデバイスでインラインスクロールを実装するための4つのソリューションの詳細な説明

ニーズの発見領域の一部のみスクロールでき、残りの部分は移動できない場合、どのような方法を使用しますか...

TeamCenter12 にログインする際の 404/503 問題の解決方法

TeamCenter12はアカウントのパスワードを入力し、ログインをクリックすると、404または50...

HTMLページにビデオを挿入する方法の概要

ページでビデオ タグを使用する場合は、Ogg Theora または VP8 (これに問題がない場合)...

CentOS7環境でDockerを使ってPHP動作環境を構築する手順を詳しく解説

関連記事: CentOS7でyumを使用してDockerをインストールするDockerを使ってWin...

HTML でハイパーリンク タグを使用するチュートリアル

ウェブサイトのさまざまな HTML ドキュメントはハイパーリンクを通じて相互に接続され、一貫性のある...

JavaScript配列をツリー構造に変換する方法

1. 需要バックエンドは、フロントエンドがツリー構造(重複データなし)に変換するためのデータを提供し...

nginx サーバーでの 502 不正なゲートウェイ エラーの原因のトラブルシューティング

パブリックアカウントのファンデータを同期してバッチプッシュするときに、サーバーがエラー502を報告し...

Vueはタブ切り替えを実装します

この記事では、タブ切り替えを実装するためのVueの具体的なコードを例として紹介します。具体的な内容は...

MySQL の 6 つの一般的な制約タイプの詳細な説明

目次序文1.nullでない2. ユニーク3. デフォルト4.主キー自動増分主キー5. 外部キー6.チ...

Tomcat のパフォーマンス最適化のための Apr モジュールの構築方法

序文Tomcat は、無数のチューニング オプションを備えた、広く使用されている Java Web ...

Reactでpropsを使用する方法と制限する方法

コンポーネントの props (props はオブジェクトです)機能: コンポーネントに渡されたデー...

Web デザイナーにはどのような知識体系が必要ですか?

製品設計者は、複雑で大規模な製造システムと多様な市場に直面しているため、知識体系には幅広さと深さの両...

jQuery を使用して、iframe 下の無効なページ アンカー ポイントの問題を修正する

適用シナリオ: iframe ページにスクロール バーがなく、親ウィンドウにスクロール バーが表示さ...

Vueはスライダードラッグ検証機能の全プロセスを実現します

レンダリング 骨組みを定義し、HTMLとCSSを記述するHTML部分 <テンプレート> ...

MySQL インデックス障害の上位 10 の問題の概要

目次背景1. クエリ条件に「or」が含まれているため、インデックスが失敗する可能性があります。 2....