日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長(zhǎng)提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請(qǐng)做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會(huì)員:747

 

作者:趙黎明

愛可生 MySQL DBA 團(tuán)隊(duì)成員,Oracle 10g OCM,MySQL 5.7 OCP,擅長(zhǎng)數(shù)據(jù)庫性能問題診斷、事務(wù)與鎖問題的分析等,負(fù)責(zé)處理客戶 MySQL 及我司自研 DMP 平臺(tái)日常運(yùn)維中的問題,對(duì)開源數(shù)據(jù)庫相關(guān)技術(shù)非常感興趣。

本文來源:原創(chuàng)投稿

*愛可生開源社區(qū)出品,原創(chuàng)內(nèi)容未經(jīng)授權(quán)不得隨意使用,轉(zhuǎn)載請(qǐng)聯(lián)系小編并注明來源。


本文關(guān)鍵字:升級(jí)、windows、賬號(hào)管理

背景

最近有去某客戶那里支持 MySQL 實(shí)例升級(jí),他們的實(shí)例版本比較多,有 5.5、5.6、5.7,外加各種小版本,平臺(tái)也很多,有 linux、Windows。對(duì)于 Unix/Linux 平臺(tái)的 MySQL 版本升級(jí),大家可能再熟悉不過了,但對(duì)于 windows 平臺(tái)的,可能接觸地較少。由于項(xiàng)目上有需求,自己也在 Windows 環(huán)境上測(cè)試了一把,有了些心得,想跟大家分享一些經(jīng)驗(yàn),于是有了本文。這里主要是針對(duì)比較常見的 5.6 到 5.7 的升級(jí)。

限制

  • MySQL 官方提供了 2 種介質(zhì)的升級(jí)方式:一種是 MySQL Installer 的方式(需要下載 MSI 可執(zhí)行程序,進(jìn)行圖形化安裝),另一種則是 noinstall zip 包的方式(就是我們熟悉的綠色軟件,解壓即用的那種,當(dāng)然 MySQL 作為數(shù)據(jù)庫軟件,也沒傻瓜到那種程度,還是需要一些額外操作的),推薦使用第 2 種方式,系統(tǒng)侵入性小,方便快捷。
  • 連續(xù)大版本的升級(jí)(5.6 to 5.7)不能用 MySQL Installer,這種場(chǎng)景只支持 zip 方式。
  • 社區(qū)版和企業(yè)版之間,也不能用 MySQL Installer 升級(jí),需要用 zip 方式。
  • 除了介質(zhì),升級(jí)的方法也有 2 種:一種是 IN-PLACE 方式(適用于數(shù)據(jù)量較大、小版本或連續(xù)版本的升級(jí)),另一種是邏輯方式(適用于數(shù)據(jù)量小、跨越大版本的升級(jí))。
  • 對(duì)于大數(shù)據(jù)庫,即便是采用 IN-PLACE 方式升級(jí),也可能會(huì)花費(fèi)較長(zhǎng)時(shí)間,因?yàn)閳?zhí)行 mysql_upgrade 時(shí),默認(rèn)也會(huì)對(duì)業(yè)務(wù)表進(jìn)行數(shù)據(jù)轉(zhuǎn)換和修復(fù)(這個(gè)問題在客戶那兒也遇到了,300G 左右的庫,有大量 MyISAM 表,最大的單表有 40G。修復(fù)過程其實(shí)是通過創(chuàng)建臨時(shí)表進(jìn)行重建,而他們的磁盤性能又不好,跑了很久都沒有結(jié)束,后來通過 -s 參數(shù)跳過對(duì)業(yè)務(wù)表的修復(fù))。
  • 如果是 Milestone 版和 GA 版之間的升級(jí),也只能通過邏輯方式進(jìn)行。

環(huán)境準(zhǔn)備

雖然是在講升級(jí),這里也稍微提一下 Windows 上安裝實(shí)例的方法。首先,準(zhǔn)備一臺(tái) Windows 主機(jī)(我這里用的是 Windows 10),去官網(wǎng)下載好 5.6.x,5.7.x for Windows 的 zip 包,我選擇了社區(qū)版的 5.6.30 和 5.7.30(最新 GA)的包。

解壓完的 zip包 是這樣的,有點(diǎn)像 Linux 上的二進(jìn)制包:

技術(shù)分享 | 如何優(yōu)雅地在 Windows 上從 MySQL 5.6 升級(jí)到 5.7

 


技術(shù)分享 | 如何優(yōu)雅地在 Windows 上從 MySQL 5.6 升級(jí)到 5.7

 

安裝 5.6 環(huán)境

安裝很簡(jiǎn)單,最小化配置只需要把 my-default 參數(shù)中示例的幾個(gè)參數(shù)前的注釋符號(hào)去掉,并配置上相應(yīng)的值,就可以啟動(dòng)了,當(dāng)然,如果是生產(chǎn)環(huán)境,肯定會(huì)自定義一堆參數(shù),此處略過。

技術(shù)分享 | 如何優(yōu)雅地在 Windows 上從 MySQL 5.6 升級(jí)到 5.7

 

改完后如下,然后就可以用這個(gè)參數(shù)文件去初始化實(shí)例了:

技術(shù)分享 | 如何優(yōu)雅地在 Windows 上從 MySQL 5.6 升級(jí)到 5.7

 

初始化實(shí)例后,再啟動(dòng)實(shí)例,接著創(chuàng)建并配置 Windows 服務(wù),以后就可以通過啟停服務(wù)對(duì) MySQL 實(shí)例進(jìn)行管理。

升級(jí) 5.6 至 5.7

這里不討論詳細(xì)的升級(jí)步驟,與安裝實(shí)例其實(shí)差不多,主要說一下升級(jí)時(shí)要注意的點(diǎn)(本次測(cè)試采用 IN-PLACE 方式)。

  • 首次安裝完 5.7(zip 方式)后,出于安全性考慮,需要設(shè)置 skip-grant-tables 進(jìn)入實(shí)例,修改 root 密碼,刪除空賬號(hào)(先執(zhí)行 flush privileges;)。
  • 服務(wù)的創(chuàng)建、刪除都要用管理員身份運(yùn)行 cmd 后再執(zhí)行執(zhí)行,示例:mysqld install mysql5630 / mysqld remove mysql5630。
  • 如果啟動(dòng)實(shí)例是用 mysqld --console 執(zhí)行的,會(huì)在屏幕輸出實(shí)例啟動(dòng)的一些 error 日志,一旦退出這個(gè)窗口,實(shí)例就會(huì)終止(因此,建議僅在首次測(cè)試實(shí)例能否正常啟動(dòng)時(shí)使用)。
  • 5.7 的 zip 包解壓后沒有 data 目錄和 my.ini 配置文件,可以將 5.6 中的 data 目錄和 my.ini 拷貝過來(拷 data 前要停實(shí)例),如果本來就已經(jīng)指定在 basedir 之外的地方,也可以直接用,然后修改 5.7 配置文件的 datadir 與原來 5.6 的位置一致。
  • 如果 5.6 是 zip 安裝,5.7 也是 zip 安裝,并且 5.7 解壓到 5.6 的目錄之外,建議修改環(huán)境變量后先執(zhí)行 mysql -V,檢查其是否被正確地配置了(官方推薦解壓到同一個(gè)目錄中,這樣可以不用修改環(huán)境變量)。
  • 盡量不要使用舊版的 my.cnf,并且用 mysqld --print-defaults 檢查默認(rèn)參數(shù)。
  • 升級(jí)到 5.7 后,當(dāng)執(zhí)行 mysqld install mysql5730 時(shí)(添加 5.7 實(shí)例的服務(wù)),如果報(bào)找不到 dll 動(dòng)態(tài)庫鏈接文件 MSVCR120.dll、MSVCP120.dll,則需要下載并安裝相應(yīng)版本的的 Visual C++ 程序)。

參考鏈接:

https://www.groovypost.com/howto/fix-visual-c-plus-plus-redistributable-windows-10/

https://answers.microsoft.com/en-us/windows/forum/windows_7-performance/missing-msvcp120dll-file/f0a14d55-73f0-4a21-879e-1cbacf05e906

各個(gè) dll 文件對(duì)應(yīng)的 Visual C++ 版本:

技術(shù)分享 | 如何優(yōu)雅地在 Windows 上從 MySQL 5.6 升級(jí)到 5.7

 

安裝完以后,可以查看 dll 動(dòng)態(tài)庫鏈接文件與對(duì)應(yīng) Visual C++ 版本之間的關(guān)系:

技術(shù)分享 | 如何優(yōu)雅地在 Windows 上從 MySQL 5.6 升級(jí)到 5.7

 

我的環(huán)境中要正常運(yùn)行 5.7.30 實(shí)例,需要安裝 Visual C++ 2012、Visual C++ 2013,之后就可以正常創(chuàng)建服務(wù)。

升級(jí)排錯(cuò)案例

安裝完 5.7.30 實(shí)例后,創(chuàng)建并啟動(dòng) windows 服務(wù):

技術(shù)分享 | 如何優(yōu)雅地在 Windows 上從 MySQL 5.6 升級(jí)到 5.7

 

通過 SC 啟動(dòng)服務(wù)后卻立即停止了:

技術(shù)分享 | 如何優(yōu)雅地在 Windows 上從 MySQL 5.6 升級(jí)到 5.7

 

用 NET 命令也無法啟動(dòng),error 日志也沒有輸出:

技術(shù)分享 | 如何優(yōu)雅地在 Windows 上從 MySQL 5.6 升級(jí)到 5.7

 

嘗試刪除服務(wù)再重新添加:

技術(shù)分享 | 如何優(yōu)雅地在 Windows 上從 MySQL 5.6 升級(jí)到 5.7

 

此時(shí)服務(wù)還沒有被創(chuàng)建:

技術(shù)分享 | 如何優(yōu)雅地在 Windows 上從 MySQL 5.6 升級(jí)到 5.7

 

通過 SC 再次啟動(dòng)后,服務(wù)有了,但仍然是已停止?fàn)顟B(tài):

技術(shù)分享 | 如何優(yōu)雅地在 Windows 上從 MySQL 5.6 升級(jí)到 5.7

 

再次刪除服務(wù)后直接啟動(dòng) mysqld,在登錄客戶端后發(fā)現(xiàn)了端倪,原來是用 5.6.30 的 mysqld 命令啟動(dòng)了:

技術(shù)分享 | 如何優(yōu)雅地在 Windows 上從 MySQL 5.6 升級(jí)到 5.7

 

立即檢查 my.ini 參數(shù),發(fā)現(xiàn)參數(shù)中果然是用了 5.6.30 的路徑:

技術(shù)分享 | 如何優(yōu)雅地在 Windows 上從 MySQL 5.6 升級(jí)到 5.7

 

停止進(jìn)程,修改參數(shù)并重新啟動(dòng) 5.7.30 進(jìn)程和服務(wù):

技術(shù)分享 | 如何優(yōu)雅地在 Windows 上從 MySQL 5.6 升級(jí)到 5.7

 

msyql5730 服務(wù)恢復(fù)正常,不會(huì)再自動(dòng)停止了:

技術(shù)分享 | 如何優(yōu)雅地在 Windows 上從 MySQL 5.6 升級(jí)到 5.7

 

服務(wù)端(mysqld)和客戶端(mysql)進(jìn)程也運(yùn)行正常:

技術(shù)分享 | 如何優(yōu)雅地在 Windows 上從 MySQL 5.6 升級(jí)到 5.7

 

檢查數(shù)據(jù)庫(注意,此時(shí)仍然是沒有 sys 庫的,因?yàn)槭前?5.6 的 data 目錄直接拿來啟動(dòng)實(shí)例的):

技術(shù)分享 | 如何優(yōu)雅地在 Windows 上從 MySQL 5.6 升級(jí)到 5.7

 

執(zhí)行 mysql_upgrade,重建系統(tǒng)庫:

技術(shù)分享 | 如何優(yōu)雅地在 Windows 上從 MySQL 5.6 升級(jí)到 5.7

 

至此,完成 5.6.30 to 5.7.30 的升級(jí)(是不是 so easy?)。

技術(shù)分享 | 如何優(yōu)雅地在 Windows 上從 MySQL 5.6 升級(jí)到 5.7

 

要注意,執(zhí)行完 mysql_upgrade 后需要重啟實(shí)例,否則會(huì)報(bào)以下錯(cuò)誤:

技術(shù)分享 | 如何優(yōu)雅地在 Windows 上從 MySQL 5.6 升級(jí)到 5.7

 

重啟實(shí)例后,可以正常使用了:

技術(shù)分享 | 如何優(yōu)雅地在 Windows 上從 MySQL 5.6 升級(jí)到 5.7

 

一個(gè)有趣的登陸測(cè)試

  • 配置了 3 個(gè) root 賬號(hào),來源分別為 ::1,127.0.0.1',localhost。
  • 在賬號(hào)密碼都不輸入的情況下,Windows 默認(rèn)會(huì)用 ODBC@localhost 這個(gè)用戶連接。
  • 在加上 -uroot 后,會(huì)優(yōu)先使用 root@'::1' 這個(gè)賬號(hào)來連接,用戶仍然使用的是 root@localhost。
  • 把 root@'::1' 賬號(hào)刪除后,會(huì)使用 root@localhost 的賬號(hào)連接。
  • 把 root@localhost 賬號(hào)也刪除后,默認(rèn)不會(huì)使用 [email protected] 的賬號(hào)連接,除非指定了 -h127.0.0.1。
  • 在 Windows 中,無論是 ::1、localhost 還是 127.0.0.1,哪怕是使用 -S 進(jìn)行連接,也都是 TCP/IP 連接。
mysql> select user,host from mysql.user;
+---------------+-------------+
| user | host |
+---------------+-------------+
| root | 10.186.64.% |
| root | 127.0.0.1 |
| root | ::1 |
| mysql.session | localhost |
| mysql.sys | localhost |
| root | localhost |
+---------------+-------------+
6 rows in set (0.00 sec)

mysql> exit
Bye
C:UsersAdministrator>mysql
ERROR 1045 (28000): Access denied for user 'ODBC'@'localhost' (using password: NO)

C:UsersAdministrator>mysql -uroot
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

C:UsersAdministrator>mysql -uroot -p
Enter password: ********
Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 7
Server version: 5.7.30-log MySQL Community Server (GPL)

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

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

mysql> select current_user(),user();
+----------------+----------------+
| current_user() | user() |
+----------------+----------------+
| root@::1 | root@localhost |
+----------------+----------------+
1 row in set (0.00 sec)

mysql> drop user root@'::1';
Query OK, 0 rows affected (0.06 sec)

mysql> exit
Bye
C:UsersAdministrator>mysql -uroot -p
Enter password: ********
Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 8
Server version: 5.7.30-log MySQL Community Server (GPL)

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

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

mysql> select current_user(),user();
+----------------+----------------+
| current_user() | user() |
+----------------+----------------+
| root@localhost | root@localhost |
+----------------+----------------+
1 row in set (0.02 sec)

mysql> drop user root@localhost;
Query OK, 0 rows affected (0.03 sec)

mysql> exit
Bye
C:UsersAdministrator>mysql -uroot -p
Enter password: ********
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

C:UsersAdministrator>mysql -uroot -p -h127.0.0.1
Enter password: ********
Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 10
Server version: 5.7.30-log MySQL Community Server (GPL)

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

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

mysql> select current_user(),user();
+----------------+----------------+
| current_user() | user() |
+----------------+----------------+
| [email protected] | root@localhost |
+----------------+----------------+
1 row in set (0.00 sec)

mysql> s
--------------
mysql Ver 14.14 Distrib 5.7.30, for Win64 (x86_64)

Connection id: 10
Current database:
Current user: root@localhost
SSL: Cipher in use is ECDHE-RSA-AES128-GCM-SHA256
Using delimiter: ;
Server version: 5.7.30-log MySQL Community Server (GPL)
Protocol version: 10
Connection: 127.0.0.1 via TCP/IP
Server characterset: latin1
Db characterset: latin1
Client characterset: gbk
Conn. characterset: gbk
TCP port: 3306
Uptime: 6 hours 41 min 40 sec

Threads: 1 Questions: 26 Slow queries: 0 Opens: 123 Flush tables: 1 Open tables: 116 Queries per second avg: 0.001
--------------

mysql> show variables like 'socket';
+-----------------------------------------+-------+
| Variable_name | Value |
+-----------------------------------------+-------+
| socket | MySQL |
+-----------------------------------------+-------+
3 rows in set, 1 warning (0.01 sec)

mysql> exit
Bye
C:UsersAdministrator>mysql -uroot -p -S MySQL

Enter password: ********
Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 16
Server version: 5.7.30-log MySQL Community Server (GPL)

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

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

mysql> s
--------------
mysql Ver 14.14 Distrib 5.7.30, for Win64 (x86_64)

Connection id: 16
Current database:
Current user: root@localhost
SSL: Cipher in use is ECDHE-RSA-AES128-GCM-SHA256
Using delimiter: ;
Server version: 5.7.30-log MySQL Community Server (GPL)
Protocol version: 10
Connection: localhost via TCP/IP
Server characterset: latin1
Db characterset: latin1
Client characterset: gbk
Conn. characterset: gbk
TCP port: 3306
Uptime: 7 hours 6 min 23 sec

Threads: 1 Questions: 63 Slow queries: 0 Opens: 137 Flush tables: 1 Open tables: 130 Queries per second avg: 0.002
--------------

升級(jí)步驟匯總

最后,再把升級(jí)的各個(gè)步驟羅列一遍:

1. 下載 5.7.30 的 zip 包并解壓到新的目錄。

2. 安裝 Visual C++ 2012/2013(或更多版本)。

3. 停應(yīng)用,停止 5.6 實(shí)例(可以通過停服務(wù)來操作,停止服務(wù)前建議記錄一下 GTID 或 binlog file 和 position 位置),刪除服務(wù)。

4. 備份一份 5.6 實(shí)例的 datadir,包括 binlog(整個(gè)目錄 copy 到別的目錄存放)。

5. 拷貝 5.6 實(shí)例的 datadir 和 my.ini 到 5.7 實(shí)例 basedir 目錄,調(diào)整并優(yōu)化參數(shù)值(注意要確保路徑一致,確認(rèn)已開啟 5.7 新特性相關(guān)參數(shù),如增強(qiáng)半同步、MTS 等)。

6. 修改系統(tǒng)環(huán)境變量,把可執(zhí)行路徑指向 5.7 實(shí)例的 basedir/bin。

7. 啟動(dòng) 5.7 實(shí)例,創(chuàng)建服務(wù)并啟動(dòng)。

8. 驗(yàn)證服務(wù)端、客戶端版本是否正確。

9. 確認(rèn)無誤后,執(zhí)行 mysql_upgrade 升級(jí)數(shù)據(jù)字典(會(huì)升級(jí)系統(tǒng)庫:mysql,ps,sys,沒有會(huì)重建)。

10. 重啟實(shí)例。

11. 再次校驗(yàn) 5.7 的參數(shù),盡量保持與 5.6 的兼容,尤其要注意 sql_mode 的默認(rèn)值對(duì)業(yè)務(wù)的影響。

12. 清理 5.6 實(shí)例的 basedir 和 datadir 目錄(可選)。

13. 如果是主從環(huán)境,還要考慮 slave_net_timeout 參數(shù)默認(rèn)值改變帶來的影響(主庫 error 日志中出現(xiàn) “ER_RPL_ZOMBIE_ENCOUNTERED” 的報(bào)錯(cuò))。

在 5.7.7 以前,該參數(shù)默認(rèn)是 3600s,之后改為了 60s,需要重新執(zhí)行 change master to 語句,并且顯式指定 master_heartbeat_period=xx,因?yàn)閺?5.7.4 開始,只有執(zhí)行 reset slave 才能將其重置為默認(rèn)值(slave_net_timeout 值的一半)。另外提一句,也是從 5.7.4 開始,執(zhí)行 change master to 語句時(shí),可以不用先停止復(fù)制線程了。

參考鏈接:

https://dev.mysql.com/doc/refman/5.7/en/change-master-to.html

https://dev.mysql.com/doc/refman/5.7/en/upgrading-from-previous-series.html

https://dev.mysql.com/doc/refman/5.7/en/replication-options-slave.html#sysvar_slave_net_timeout

總結(jié)

本文主要闡述了如何優(yōu)雅地通過 ZIP&IN-PLACE 方式在 Windows 服務(wù)器上將 MySQL 5.6 實(shí)例升級(jí)到 5.7。

對(duì) MySQL 官方提供的一些升級(jí)方式和相關(guān)限制做了說明。

通過一個(gè)實(shí)際的升級(jí)案例來展示如何在升級(jí)過程中排查錯(cuò)誤。

演示了一個(gè)關(guān)于賬號(hào)登陸的小測(cè)試,要注意區(qū)分賬號(hào)的來源部分、current_user(),user() 之間的差別,前者是 mysql.user 表中創(chuàng)建的賬號(hào),后者是當(dāng)前操作系統(tǒng)的登錄用戶。

最后對(duì)整個(gè)升級(jí)步驟做了總結(jié),羅列了一些升級(jí)時(shí)的注意點(diǎn)。

參考鏈接:

https://dev.mysql.com/doc/refman/5.7/en/windows-installation.html

https://dev.mysql.com/doc/refman/5.7/en/windows-upgrading.html

分享到:
標(biāo)簽:MySQL
用戶無頭像

網(wǎng)友整理

注冊(cè)時(shí)間:

網(wǎng)站:5 個(gè)   小程序:0 個(gè)  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會(huì)員

趕快注冊(cè)賬號(hào),推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學(xué)四六

運(yùn)動(dòng)步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動(dòng)步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績(jī)?cè)u(píng)定2018-06-03

通用課目體育訓(xùn)練成績(jī)?cè)u(píng)定