Oracle更換為MySQL遇到的問題及解決
遷移工具
測試時,使用powerdesinger進行表結構轉換,使用Navicat進行數據導入。 生產環境數據量較大,會由數據組同事選用其他工具進行遷移,到時再行補充。
應用改造
添加mysql8.0驅動包
使用mysql-connector-java-8.0.15.jar,如果是maven管理,直接添加依賴:
<!--MySql 驅動 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.15</version> <scope>runtime</scope> </dependency>
修改數據源配置
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.url=jdbc:mysql://host:ip/database?useUnicode=true&characterEncoding=utf8 spring.datasource.username=root spring.datasource.password=password
對象改造
- 如果使用的hibernate,將配置文件中主鍵自增的序列刪除掉,在mysql中將主鍵設置為自增;或者為序列創建對應函數。使用mysql集群的話,主鍵的生成方式還會有改動。
- 逐條sql檢查,特別是mybatis中拼接的sql語句,包括:
- 主鍵修改:序列sequence刪除,數據庫中主鍵改為自增;或創建對應自增函數
- 對涉及mysql關鍵字的字段進行處理,使用“標識
- 日期格式處理
- rownum條件查詢改為limit條件查詢
問題匯總
問題:本地遠程連接mysql數據庫,報10060登錄異常
- 出現該問題可能的原因:
1、網絡不通; 2、服務未啟動; 3、防火墻未關閉; 4、服務器上防火墻端口未開放; 5、端口未被監聽; 6、權限不足。 我這裡是排查發現測試數據庫服務器上3306端口未開放原因。
- 解決方法:
sudo vim /etc/sysconfig/iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 3306 -j ACCEPT sudo service iptables restart 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 – Too-big precision 7 specified for ‘TIME_CREATE’. Maximum is 6.
- 原因:oracle的DATE類型是7位,而mysql的時間類型最多6位,所以無法導入。
- 解決方法:將oracle庫中的DATE改為TIMESTAMP,同時長度改成6 (一定要把類型和長度都修改後才保存),即可導入。
問題:數據遷移中varchar字段插入報錯 –> Data too long for column ‘DESIGNER’ at row 1
- 原因:Oracle與mysql采用不同的編碼集,導致即使相同的字符,存儲長度要求也不一樣(需進一步深入瞭解)
- 解決辦法:需要在msyql擴展字段長度
問題:SpringBoot連接mysql報錯–> Unknown system variable ‘query_cache_size’
- 原因:使用mysql驅動jar包版本過低,不兼容mysql8.0
- 解決:使用mysql-connector-java-8.0.15.jar,驅動名換為com.mysql.cj.jdbc.Driver
問題:更改為mysql後,應用前端頁面查詢中文顯示亂碼
- 原因:從數據庫、服務器、頁面三個維度排查編碼格式
- MySQL數據庫編碼格式排查
- 服務器編碼格式排查
- 前端頁面編碼格式排查
最終發現,是在Navicat連接中,設置瞭編碼格式為utf-8,導致導入的數據在Navicat中看到是正常的,但數據庫中是亂碼,查詢結果也是亂碼。這個真的查瞭好久,沒註意到時工具的原因。。
- 解決辦法:重新設置編碼格式,導入數據,顯示正常
以上就是Oracle換為MySQL遇到的問題及解決的詳細內容,更多關於Oracle換為MySQL的資料請關註WalkonNet其它相關文章!
推薦閱讀:
- MySql 8.0及對應驅動包匹配的註意點說明
- Navicat連接MySQL8.0的正確方法(親測有效)
- Navicat連接mysql報錯1251錯誤的解決方法
- 完美解決docker安裝mysql後Navicat連接不上的問題
- mysql8.0.27配置步驟以及註意事項