記一次TEST環境數據庫遷移

背景

公司自建了PAAS平臺,可以支持CI/CD流程。我們發佈流程是mit->test->uat->prod。分別對應開發、測試、驗收、生產環境,環境之間是互相隔離的。

有個歷史的數據庫只有TEST環境纔有,爲了便於調試,需要拷貝一份到MIT環境,以下是遇到的問題記錄。
在這裏插入圖片描述

安全可靠的數據遷移方式

工具

推薦文章:https://www.cnblogs.com/swtjavaspace/p/9698167.html

navicat使用 工具->數據傳輸 可以很方便的把一臺機器的數據庫同步到另一臺機器(包括結構和數據)
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

遇到問題

Got a packet bigger than ‘max_allowed_packet’ bytes With statement

如果某個數據庫表的內容太大,會導致失敗。此時修改數據庫配置即可。

vim /etc/my.conf  # windows下是my.ini

# [mysqld]下加入一行 注意是mysqld
max_allowed_packet=16M

systemctl restart mariadb # 然後重啓mysql

重啓mysql

systemctl restart mariadb

執行一下語句查看是否生效:

MariaDB [(none)]> show VARIABLES like '%max_allowed_packet%';
+--------------------------+------------+
| Variable_name            | Value      |
+--------------------------+------------+
| max_allowed_packet       | 16777216   |
| slave_max_allowed_packet | 1073741824 |
+--------------------------+------------+
2 rows in set (0.00 sec)

16777216 代表16M,默認是1024。

Invalid default value for 'CREATE_TIME’報錯的解決方法

在這裏插入圖片描述
源表裏面某個字段時datetime類型,默認值使用了CURRENT_TIMESTAMP來生成默認時間,導入的時候報錯了。根據網上資料,這個功能需要 mysql5.7 版本以上才支持:

查看mysql版本

[root@10-0-59-117 ~]# mysql -uroot -p
Enter password: 
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 253
Server version: 5.5.60-MariaDB MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

方案一:升級mysql 5.7以上。
方案二:修改默認值CURRENT_TIMESTAMP爲NULL。
方案三:跳過。

因爲有些表其實用不到,所以我選擇了方案三,在進行數據傳輸的時候把報錯的表先跳過了。後面如果有需要再手動導出導入來修正。

參考:
https://www.jianshu.com/p/2f30786a5a6a
https://www.cnblogs.com/han-1034683568/p/11418264.html

忽略表名大小寫

dos't not exist bi_sqa.sys_log

遷移完成後,啓動服務,提示表名不存在。經過檢查發現代碼裏面使用的 大寫表名,而Linux裏面的mysql是默認不啓用忽略表名大小寫功能的。

mysql.confmysqld 下加入下面的配置,然後重啓mysql即可。

[mysqld]
lower_case_table_names=1

查看是否生效

MariaDB [(none)]>  show variables like "%case%";
+------------------------+-------+
| Variable_name          | Value |
+------------------------+-------+
| lower_case_file_system | OFF   |
| lower_case_table_names | 1     |
+------------------------+-------+
2 rows in set (0.00 sec)

顯示 1,則代表已經Ok了。

推薦使用小寫表名

如果啓用了 lower_case_table_names 後,系統全部使用小寫表名,如果此時出現 大寫 的表名,則會提示不存在的問題。

所以,如果系統模塊比較多,涉及多種開發語言(C++/JAVA)等,推薦使用小寫表名,可以提前規避一些問題。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章