1. 程式人生 > >phpstudy 升級mysql的版本為5.7,解決navicate無法登入mysql問題

phpstudy 升級mysql的版本為5.7,解決navicate無法登入mysql問題

[Err] 1294 - Invalid ON UPDATE clause for '欄位名' column報錯的資料表字段:`欄位名` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP

朋友說同一個 sql 檔案他可以導成功。所以我猜想可能是資料庫版本的問題,朋友的資料庫版本是 5.6,

我查了下本地的資料庫版本是 5.5.53。網上查了一下,果然是版本的問題,5.5 和 5.6 在 TIMESTEMP 的行為上有所不同,5.6.5 之前的版本不支援多個CURRENT_TIMESTAMP 預設值。

由於本地用的整合環境是 phpStudy 2016,沒有找到升級 MySQL 版本的選項,所以自己升級一下。

從官網上下載高版本的 MySQL :https://dev.mysql.com/downloads/file/?id=467269,選的版本是 5.7.17(後面才發現 5.7 版本的安裝、系統表字段等又和之前的版本有所不同)。



 步驟:

0x00

備份原來 phpStudy 中 MySQL 安裝目錄



0x01

把下載的 MySQL 壓縮檔案解壓至 phpStudy 下的 MySQL目錄,複製 my-default.ini ,重新命名為 my.ini。

開啟 my.ini,找到 #basedir 處編輯:

basedir=D:/phpStudy/MySQL
datadir=D:/phpStudy/MySQL/data


0x02

把 MySQL 安裝路徑新增至系統環境變數



過程:計算機—>系統屬性—>高階系統配置—>環境變數



選擇PATH,在其後面新增: 你的mysql bin資料夾的路徑 (如:我的是:D:\Program Files\MySQL\MySQL Server 5.6\bin ) 修改後的PATH為:

PATH=…….;D:\Program Files\MySQL\MySQL Server 5.6\bin (需注意:1.必須在原有PATH後加英文輸入下的分號;2.是追加,不是覆蓋。)



0x03

在 cmd 下進入 MySQL 的 bin 目錄(我的是 D:/phpStudy/MySQL/bin),執行:

mysqld --initialize
初始化資料庫



0x04

安裝服務:

mysqld -install
啟動服務:

net start MySQL


0x05

此時登入 MySQL 報錯:

C:\Users\dell>mysql -uroot -p
Enter password: ****
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
嘗試修改 root 使用者密碼:

關閉服務net stop MySQL

用安全模式開啟,mysqld --skip-grant-tables

這個時候,游標會一直閃。注意,不要動,開啟另一個命令列視窗。



登入 mysql -u root -p

密碼為空,直接回車;

就可以進去了

然後

use mysql;

(可能先前的版本密碼的擡頭是password,5.7.11是 authentication_string,可以select * from user,檢視一下)

(老版本)update user set password=password("123456") where user="root";

(5.7.11)update user set authentication_string=password("123456") where user="root";


最後

重新整理許可權:

FLUSH PRIVILEGES;


重新登入。



升級後隨phpstudy啟動

命令列執行:mysqld --remove mysql

然後 在phpstudy中服務管理器總能安裝mysql服務







此時檢視 mySQL 版本:





mysql> select version();
+-----------+
| version() |
+-----------+
| 5.7.17    |
+-----------+


遇見的錯:不能解決可以mysqld --console檢視錯誤日誌

逐步解決比如這個

嘗試移除mysql服務



出的錯應該差不多都是這個樣的,把以下寫入配置檔案

#sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES 
sql_mode=NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

#更改sql的模式
explicit_defaults_for_timestamp=true

#使用預設的時間戳
secure_file_priv=E:/Dback/phpstudy/PHPTutorial/tmp
secure_file_priv=E:/Dback/phpstudy/PHPTutorial/tmp
secure_file_priv=E:/Dback/phpstudy/PHPTutorial/tmp

解決navicate無法登入mysql問題,顯示密碼過期

1,用mysql命令列登入mysql的root使用者



2,重新修改root密碼 SET PASSWORD FOR 'root'@'localhost' = PASSWORD('newpass');





mysql 5.7增加了兩個欄位password_last_changed、password_lifetime來完善安全策略。

上面的方法僅僅治標不治本。

可以設定引數default_password_lifetime來延長使用期限

或者

ALTER USER 'root'@localhost' PASSWORD EXPIRE INTERVAL 90 DAYS;ALTER USER 'root'@'localhost' PASSWORD EXPIRE NEVER;ALTER USER 'root'@'localhost' PASSWORD EXPIRE DEFAULT;


ALTER USER 'root'@localhost' PASSWORD EXPIRE INTERVAL 90 DAYS;
ALTER USER 'root'@'localhost' PASSWORD EXPIRE NEVER;
ALTER USER 'root'@'localhost' PASSWORD EXPIRE DEFAULT;
這三句具體作用是什麼呢?

第一句有效期驗證 90天
第二句 不驗證有效期
第三句 設定為預設值


文章轉自青彥部落格:

青彥部落格