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

推薦する

Docker Compose で環境変数を参照する方法の例

プロジェクトでは、さまざまな条件や使用シナリオを制御するために、docker-compose.yml...

MySQLはmysqldump+binlogを使用して、削除されたデータベースの原理分析を完全に復元します。

1. 概要MySQL データベースの日常的な操作とメンテナンスにおいて、ユーザーが誤ってデータを削...

shtml includeの使い方

これを応用することで、ウェブサイトの一部の公開領域を独立したページにすることができ、その後、この技術...

vue3 で vue-router を使用するための完全な手順

序文ルーティングの管理は、ほとんどのシングルページ アプリケーションにとって不可欠な機能です。 Vu...

Vue+thinkphp5.1+axiosでファイルアップロードを実現

この記事では、thinkphp5.1 + Vue+axiosを使用してファイルをアップロードする方法...

mysql エラー 1045 (28000) - ユーザーへのアクセスが拒否される問題を解決する方法

問題の説明 (以下の説明は Windows 環境に限定されます): D:\develop\ide\m...

mysql8.0 でユーザーを作成して権限を付与する際のエラーの解決方法の詳細な説明

質問1:エラーを報告する書き込み方法: GRANT OPTION を使用して、'123123...

Linux で推奨される 9 つの優れたコード比較ツールの概要

コードを書くとき、2 つのファイル間の違い、または同じファイルの異なるバージョン間の違いを知る必要が...

HTML 9グリッドレイアウトの実装方法

ウェブサイトのレイアウトの多様化は、当社のフロントエンドの得意分野です。最近、UC ブラウザのデフォ...

MySQLの日付加算と減算関数の詳細な説明

1. 追加時間()指定した秒数を日付に追加する select addtime(now(),1); -...

MySQL のバイナリおよび varbinary データ型の詳細な説明

序文BINARY と VARBINARY は、文字列ではなくバイナリ文字列を格納する点を除いて、CH...

MySQL で誤って削除したテーブル データを回復する方法 (必読)

バックアップがあれば、非常に簡単です。最新のバックアップ データを生成し、mysqlbinlog を...

Linux システムで PATH 環境変数を設定する方法 (3 つの方法)

1. Windows システムでは、JDK のインストールなど、多くのソフトウェアのインストールで...

MySQL グループレプリケーションの設定手順 (推奨)

MySQL-Group-Replication は、MySQL-5.7.17 で開発された新しい機...

MySQL マルチインスタンス構成のアプリケーションシナリオ

目次MySQL 複数インスタンスマルチインスタンスの概要マルチインスタンスとは何ですか?複数のインス...