Probleme und Lösungen beim Ersetzen von Oracle durch MySQL

Probleme und Lösungen beim Ersetzen von Oracle durch MySQL

Migrationstools

Beim Testen wurde PowerDesigner zur Konvertierung der Tabellenstruktur und Navicat zum Importieren der Daten verwendet. Die Datenmenge in der Produktionsumgebung ist groß und Kollegen in der Datengruppe werden zu gegebener Zeit andere Tools auswählen, um sie zu migrieren und zu ergänzen.

Anwendungstransformation

mysql8.0-Treiberpaket hinzufügen

Verwenden Sie mysql-connector-java-8.0.15.jar. Wenn es von Maven verwaltet wird, fügen Sie Abhängigkeiten direkt hinzu:

                <!--MySql-Treiber-->
		<Abhängigkeit>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>8.0.15</version>
			<scope>Laufzeit</scope>
		</Abhängigkeit>

Ändern der Datenquellenkonfiguration

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

Objekttransformation

  • Wenn Sie Hibernate verwenden, löschen Sie die Auto-Inkrement-Sequenz des Primärschlüssels in der Konfigurationsdatei, stellen Sie den Primärschlüssel in MySQL auf Auto-Inkrement ein oder erstellen Sie eine entsprechende Funktion für die Sequenz. Wenn Sie einen MySQL-Cluster verwenden, ändert sich die Art und Weise, wie der Primärschlüssel generiert wird.
  • Überprüfen Sie jede SQL-Anweisung, insbesondere die in Mybatis eingefügten SQL-Anweisungen, einschließlich:
    • Änderung des Primärschlüssels: Löschen Sie die Sequenz, ändern Sie den Primärschlüssel in der Datenbank auf Auto-Inkrement oder erstellen Sie eine entsprechende Auto-Inkrement-Funktion
    • Um die Felder mit MySQL-Schlüsselwörtern zu verarbeiten, verwenden Sie den Bezeichner ``
    • Handhabung des Datumsformats
    • Ändern Sie die Rownum-Bedingungsabfrage in eine Limit-Bedingungsabfrage

Problemzusammenfassung

Problem: Lokale Remote-Verbindung zur MySQL-Datenbank, Meldung 10060 Login-Ausnahme

  • Mögliche Gründe für dieses Problem:

1. Auf das Netzwerk kann nicht zugegriffen werden. 2. Der Dienst ist nicht gestartet. 3. Die Firewall ist nicht geschlossen. 4. Der Firewall-Port auf dem Server ist nicht geöffnet. 5. Der Port wird nicht überwacht. 6. Unzureichende Berechtigungen. Ich bin hier, um das Problem zu beheben und herauszufinden, warum Port 3306 auf dem Testdatenbankserver nicht geöffnet ist.

  • Lösung:
sudo vim /etc/sysconfig/iptables
-A INPUT -p tcp -m Status --state NEU -m tcp --dport 3306 -j AKZEPTIEREN
sudo service iptables neu starten
sudo iptables -L -n

Problem: Beim Herstellen einer Verbindung mit MySQL8 über Navicat tritt der Fehler 2059 auf.

  • Grund: Die Verschlüsselungsregel in Versionen vor mysql8 lautet mysql_native_password, und nach mysql8 lautet die Verschlüsselungsregel caching_sha2_password
  • Lösung: Ändern Sie die Verschlüsselungsregeln
mysql -uroot -ppassword #Anmeldenmysql verwenden; #Datenbank auswählenALTER USER 'root'@'%' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER; #Verschlüsselungsmethode ändernALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'password'; #Benutzerpasswort aktualisierenFLUSH PRIVILEGES; #Berechtigungen aktualisieren

Problem: Bei der Verwendung von Navicat zur Datenmigration wird ein Fehler gemeldet --> [Err] [Dtf] 1426 - Zu große Genauigkeit 7 für „TIME_CREATE“ angegeben. Das Maximum ist 6.

  • Grund: Der DATE-Typ von Oracle hat 7 Ziffern, während der Zeittyp von MySQL höchstens 6 Ziffern hat und daher nicht importiert werden kann.
  • Lösung: Ändern Sie DATE in der Oracle-Datenbank in TIMESTAMP und ändern Sie die Länge auf 6 (achten Sie darauf, sowohl den Typ als auch die Länge vor dem Speichern zu ändern), dann können Sie importieren.

Problem: Fehler beim Einfügen eines Varchar-Felds während der Datenmigration --> Daten zu lang für Spalte „DESIGNER“ in Zeile 1

  • Grund: Oracle und MySQL verwenden unterschiedliche Kodierungssätze, was zu unterschiedlichen Speicherlängenanforderungen für dieselben Zeichen führt (weitere vertiefte Kenntnisse sind erforderlich).
  • Lösung: Sie müssen die Feldlänge in msyql erweitern

Problem: SpringBoot stellt eine Verbindung zu MySQL her und meldet einen Fehler --> Unbekannte Systemvariable „query_cache_size“

  • Grund: Die Version des MySQL-Treiber-JAR-Pakets ist zu niedrig und nicht mit MySQL 8.0 kompatibel.
  • Lösung: Verwenden Sie mysql-connector-java-8.0.15.jar und ändern Sie den Treibernamen in com.mysql.cj.jdbc.Driver

Problem: Nach der Umstellung auf MySQL werden die auf der Front-End-Seite der Anwendung angezeigten chinesischen Schriftzeichen verstümmelt.

  • Ursache: Überprüfen Sie das Kodierungsformat aus drei Dimensionen: Datenbank, Server und Seite
    • Überprüfung des MySQL-Datenbankkodierungsformats
    • Überprüfen Sie das Server-Kodierungsformat
    • Überprüfung des Frontend-Seitencodierungsformats

Schließlich wurde festgestellt, dass das Kodierungsformat in der Navicat-Verbindung auf UTF-8 eingestellt war, was dazu führte, dass die importierten Daten in Navicat normal angezeigt wurden, in der Datenbank und den Abfrageergebnissen jedoch verstümmelt waren. Ich habe das wirklich lange geprüft, aber mir ist der Grund für das Tool nicht aufgefallen. .

  • Lösung: Setzen Sie das Kodierungsformat zurück, importieren Sie die Daten und zeigen Sie sie normal an.

Oben finden Sie Einzelheiten zu den aufgetretenen Problemen und Lösungen beim Wechsel von Oracle zu MySQL. Weitere Informationen zum Wechsel von Oracle zu MySQL finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM!

Das könnte Sie auch interessieren:
  • Allgemeine Schreibbeispiele für MySQL- und Oracle-Batch-Insert-SQL
  • Echtzeit-Datensynchronisierung von MySQL mit Oracle

<<:  JavaScript-Grundlagenvariablen

>>:  VMware ESXI-Servervirtualisierungscluster

Artikel empfehlen

Beispiel und Lösung für einen SQL-Injection-Sicherheitslückenprozess

Codebeispiel: öffentliche Klasse JDBCDemo3 { öffe...

Verwenden Sie js, um js-Funktionen in Iframe-Seiten aufzurufen

In letzter Zeit habe ich jeden Tag an meinen Absch...

MySQL lernen: Drei Paradigmen für Anfänger

Inhaltsverzeichnis 1. Paradigmenfundament 1.1 Der...

Konkretes Beispiel einer MySQL-Mehrtabellenabfrage

1. Verwenden Sie die SELECT-Klausel, um mehrere T...

Docker ermöglicht mehrere Port-Mapping-Befehle

wie folgt: docker run -d -p 5000:23 -p 5001:22 --...

Beispielcode zur Implementierung der Alipay-Sandbox-Zahlung mit Vue+SpringBoot

Laden Sie zunächst eine Reihe von Dingen aus der ...

Implementierungsbeispiel zum Schließen der Browserabmeldung in Vue

Inhaltsverzeichnis 1. beforeunload-Ereignis 2. Er...

FTP-Remoteverbindung zu Linux über SSH

Installieren Sie zunächst SSH in Linux. Nehmen Si...

Lösung für das zu langsame Herunterladen des Docker-Images

Der Download des Docker-Images hängt oder ist zu ...

So erben Sie die CSS-Zeilenhöhe

Wie wird die Zeilenhöhe vererbt?Schreiben Sie ein...