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天
第二句 不驗證有效期
第三句 設定為預設值
文章轉自青彥部落格: