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

推薦する

div間のギャップの解決策

HTMLのdivブロックを使用していて、ブロックの中央をしっかりと接続できず、解決できない場合1. ...

VMware14 に CentOS 7 をインストールするグラフィック チュートリアル

CentOS の紹介CentOS は、Red Hat Linux が提供する無料で利用できるソースコ...

CSS のインライン スタイルに変換するソリューション (css-inline)

シーンについて話すメールを送信サードパーティのウェブサイトにHTMLを埋め込む他の編集者の記事をコピ...

バッチモードでtopコマンドを実行する方法

top コマンドは、Linux システムのパフォーマンスを監視するために誰もが使用している最適なコマ...

MySQLデータベースのマスタースレーブレプリケーションと読み取り書き込み分離に関する詳細なチュートリアル

目次序文1. MySQL マスタースレーブレプリケーション1. サポートされているレプリケーションの...

elementui の el-popover スタイルの変更が有効にならない問題の解決策

element-uiを使用する場合、el-popoverというよく使われるコンポーネントがありますが...

MySQL 5.5.56 インストール不要版の設定方法

MySQL 5.5.56無料インストール版の設定方法をテキストコードで詳しく説明します。具体的な内容...

XHTML 入門チュートリアル: XHTML Web ページ画像アプリケーション

<br />適度に画像を追加すると、Web ページがより美しくなります。 画像タグ &l...

枠線や境界線のない iframe を使用するための完全ガイド (実践経験のまとめ)

<iframe src=”ページのURL” width=”100″ height=”30″ f...

Dockerコンテナ内でホストDocker操作を呼び出して実行する

まず、この投稿は Docker 初心者向けです。もちろん、ベテランであれば記事中の分割線以降の操作方...

Linux サーバーに埋め込まれた ddgs および qW3xT.2 マイニング ウイルスの対処の実践記録

序文仮想通貨の狂気的な投機により、マイニングウイルスは犯罪者が最も頻繁に使用する攻撃方法の 1 つに...

vue3 を使用してカウント関数コンポーネントのカプセル化例を実装する

目次序文1. カプセル化の重要性2. どのようにカプセル化しますか? 1. アイデア2. 準備2. ...

Dockerfile を使用したカスタムイメージの構築の実装

目次序文Dockerfile の紹介Dockerfileはイメージプロセスを構築するDockerfi...

MySQL コマンドラインでよく使われる 18 個のコマンド

日常的なウェブサイトの保守と管理では、多くの SQL ステートメントが使用されます。熟練して使用する...

タオバオモールのホームページ上の大きな画像のデザイン構造に関する分析と意見(写真)

前回、Taobaoの詳細ページを分析した後(クリックして表示)、ショッピングモールの基本テンプレート...