glibc時區不生效_Django學習踩坑關於Mysql的時區設定
技術標籤:glibc時區不生效linux 修改時區linux修改時區mysql linux zip包mysql無法啟動mysql時區
最近在學習django網課,但是由於是之前的課程,所以很多內容都更新換代了,一邊學習一邊踩坑,順便將其一起記錄下來。
這次主要是兩部分,一部分是關於Mysql的崩潰事件,我在折騰Mysql的時區設定時把它搞崩了,net start mysql無法啟動,一直提示“MySQL 服務正在啟動 ..MySQL 服務無法啟動。”百度了很多答案,雷同,無法解決,最後還是谷歌靠譜點,解決了問題(或者說解決了一半,因為原來的資料丟失無法恢復,這也說明了備份的重要性),我的mysql版本為mysql8,windows10系統,首先進入到mysql8目錄下,刪除data目錄,再利用cmd進入到mysql8/bin目錄下,依次輸入4個命令(每個命令回車一次)
mysqld -removemysqld --initializemysqld --initialize-insecuremysqld -install
此時再次輸入net start mysql順利啟動,而且可以發現mysql8目錄下面再次多了一個data目錄,但是因為mysql進行了初始化,所以在CMD我們輸入mysql -u root -p是無法進入到資料庫裡面的,報錯如下
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using passwor...
我們可以開啟data目錄,在裡面找到一個以err為字尾的檔案,以文字形式開啟它,在裡面可以找到類似這樣的一句話:
A temporary password is generated for [email protected]: FHIflBW!N6%U
這個後面即是我們所需要的的密碼,進入到mysql資料庫後,我們就可以將密碼進行修改啦
alter user user() identified by "新密碼";
第二個坑是在Django專案中,對models下面的DateTimeField欄位進行了mysql資料庫對映,但是在views中無法提取到相關資料,程式碼如下:
articles = Article.objects.filter(create_time__date=datetime(year=2020,month=11,day=10))print(articles.query)>> SELECT `modifiedArticle_table`.`id`, `modifiedArticle_table`.`title`, `modifiedArticle_table`.`content`, `modifiedArticle_table`.`category_id`, `modifiedArticle_table`.`create_time` FROM `modifiedArticle_table` WHERE DATE(CONVERT_TZ(`modifiedArticle_table`.`create_time`, 'UTC', 'Asia/Shanghai')) = 2020-11-10print(articles)>> <QuerySet []>
原因是Mysql資料庫中預設不存在諸如'UTC', 'Asia/Shanghai'這些時區資訊,我們需要前往Mysql官網下載相關時區資訊載入進來,網址如下:
https://dev.mysql.com/downloads/timezones.html
我們可以看到以Mysql5.7為界限分為了兩個下載包,因為我是mysql8,所以我下載了下面的包:timezone_2020d_posix_sql.zip,具體如何使用,感興趣的也可以去看看,通過點選下方的For 5.7 installation details檢視(實在沒辦法,中文網際網路查不到這些資料),我們可以看到裡面有linux、mac和windows教學方法,windows處理方法如下:
將下載的檔案解壓出來,然後利用如下命令列將其載入到Mysql當中(千萬別傻乎乎的複製貼上,按照官網的指導就行)
mysql -u root -p mysql < file_name
如何測試是否成功載入時區呢?摘錄官網如下:
The test uses this query:SELECT CONVERT_TZ('2007-03-11 2:00:00','US/Eastern','US/Central') AS time1,CONVERT_TZ('2007-03-113:00:00','US/Eastern','US/Central')AStime2;
如果兩個時區的結果顯示一致,則說明成功載入。如果還未生效請重啟一下Mysql。
如果在你未安裝之前,執行這條命令提示為空,