mysql_upgrade——檢查和升級mysql表

1.mysql_upgrade簡介

mysql_upgrade檢查所有數據庫中與mysql服務器當前版本不兼容的所有表。mysql_upgrade也會升級系統表,以便你能使用新添加的權限或功能。如果mysql_upgrade發現一張表可能不兼容,將該表進行檢查,如果發現問題,則試圖對其進行修復。如果不能修復,則需要人工進行表和索引的重建或修復。每次升級mysql,都需要運行mysql_upgrade。
從mysql5.7.5開始,mysql_upgrade直接與mysql服務器進行通信,向其發送發送特定SQL語句以進行升級。mysql5.7.5前,mysql_upgrade運行mysql和mysqlcheck客戶端程序來進行所需的操作。對之前的mysql安裝,如果通過rpm包在linux上安裝mysql,那麼,你必須安裝服務器和客戶端rpms。mysql_upgrade包括在服務器rpm,但需要客戶端rpm,因爲其包括mysqlcheck。
2.mysql_upgrade注意事項
1)從mysql5.7.12開始,--ealy-plugin-load默認爲空。爲了加載keyring_file插件,需要顯式使用非空值的--early-plugin-load選項。
mysql5.7.11中,--early-plugin-load值默認爲keyring_file插件庫文件的名字,因此,插件被默認加載。innodb表空間加密要求innodb初始化前加載keyring_file插件,因此,
從5.7.11升級到5.7.12時該選項默認值的改變將導致不兼容。已經加密innodb表空間的管理員必須顯式採取行動以確保繼續加載keyring_file插件:那就是用指定值爲插件庫文件的--early-plugin-load
選項啓動服務器。
2)如果你從mysql5.7.2之前的版本升級到mysql5.7.2或更高的版本,mysql.user表的變化需要特定步驟用mysql_upgrade進行升級。
3)windows server2008,vista及更新版本上,必須用administrator權限運行mysql_upgrade。可以administrator運行命令提示符並在其下運行升級命令。
4)升級前應該總是備份當前的mysql安裝。某些升級相關的不兼容也許需要升級和運行mysql_upgrade前進行一些特殊處理。

3.使用mysql_grade進行升級

爲了使用mysql_upgrade,確信mysql服務器正在運行。接着,可以像如下那樣運行以檢查和修復表及升級系統表:
shell> mysql_upgrade [options]
爲了使系統表的變化起作用,運行mysql_upgrade後,停止並重啓mysql服務器。
如果有多個mysql服務器實例在運行,用合適的連接參數運行mysql_upgrade以連接到渴望的服務器。例如:運行在本機3306到3308端口的服務器,通過連接到合適的端口來升級每個實例:
shell> mysql_upgrade --protocol=tcp -P 3306 [other_options]
shell> mysql_upgrade --protocol=tcp -P 3307 [other_options]
shell> mysql_upgrade --protocol=tcp -P 3308 [other_options]
unix上的本機連接,--protocol=tcp選項強制用TCP/IP而非unix套接字文件來連接。
mysql_upgrade處理所有數據庫中的所有表,因此,其可能需要很長時間才能完成。每個表處理期間將被鎖定且其他會話不可訪問。檢查和修復操作可能比較耗時,特別是大表。
所有檢查和修復的表將被標上當前mysql版本號。這確保下次對該服務器的相同版本運行mysql_upgrade時,可以知道是否有必要在對該表進行檢查和修復。
mysql_upgrade也會將mysql版本號存入數據目錄下名爲mysql_upgrade_info的文件。這將用於快速檢查所有表是否已被該版本檢查以便跳過表檢查。爲了忽視該文件且無論如何都進行檢查,可以使用--force選項。
從mysql5.7.2開始,mysql_upgrade檢查user表數據行,對任何plugin列爲空的數據行,將其設置爲'mysql_native_password'或'mysql_old_password',這取決於password列值的哈希格式。從mysql5.7.5開始,移去了對pre-4.1口令哈希和mysql_old_password的支持,因此,如果憑據使用與插件兼容的哈希格式,mysql_upgrade將值爲空的plugin列設置爲'mysql_native_password'。使用pre-4.1哈希的數據行必須手工升級。
mysql_upgrade不會對help表的內容進行升級。
從mysql5.7.7開始,除非以--skip-sys-schema選項運行,否則,如果sys模式未安裝,mysql_upgrade將會安裝該模式,如果已安裝則將其升級爲目前版本。如果sys模式已存在且沒發現version視圖,mysql_upgrade將會返回錯誤,假設其爲用戶創建的模式:
Error occurred: A sys schema exists with no sys.version view.
如果用戶已經創建了sys模式,爲了成功升級,必須重命名該模式。爲了升級這種場景,首先移去或重命名已存在的sys模式。
mysql5.7.9及其更高版本,mysql_upgrade會檢查用通用分區處理器創建的innodb分區表,並試圖將其升級爲innodb本地分區(用於mysql5.7.6及其更高版本)。也是從mysql5.7.9開始,可以在客戶端用alter table ...upgrade partitioning SQL語句將其升級。
默認的,mysql_upgrade以mysql root用戶運行。當你運行mysql_upgrade時root密碼已過期,將會返回密碼已過期的信息,且mysql_upgrade升級失敗。爲了糾正該問題,重置root密碼並再次運行mysql_upgrade。
首先,以root用戶連接mysql服務器:
shell> mysql -u root -p
Enter password: **** <- 這裏輸入密碼
通過合適的工具重置密碼。從mysql5.7.6開始,用alter user:
mysql> ALTER USER USER() IDENTIFIED BY 'root-password';
mysql5.7.6之前,用set password:
mysql> SET PASSWORD = PASSWORD('root-password');
退出mysql並再次運行mysql_upgrade:
shell> mysql_upgrade [options]

4.mysql_upgrade相關選項
mysql_upgrade支持如下選項,可以在命令行或在選項文件的[mysql_upgrade]和[client]組指定。
1)--help:顯示一個短幫助信息後結束。
2)--basedir=dir_name:mysql的安裝路徑,該選項在mysql5.7.2中被移去。
3)--bind-address=ip_address:多網卡的計算機上,用該選項用於選擇連接mysql服務器的網卡。該選項在mysql5.7.5中被添加。
4)--character-sets-dir=dir_name:安裝字符集的目錄。
5)--compress, -C:如果客戶端和服務器都支持壓縮,則壓縮客戶端和服務器間的所有信息。該選項的-C格式在mysql5.7.5中添加。
6)--datadir=dir_name:數據目錄的路徑。該選項在mysql5.7.2中被移去。
7)--debug[=debug_options], -# [debug_options]:寫調試(debugging)日誌。典型的debug_options串爲d:t:o,file_name(文件名)。默認爲d:t:O,/tmp/mysql_upgrade.trace.
8)--debug-check:程序結束時打印調試信息。
9)--debug-info, -T:程序結束時打印調試信息和內存及CPU使用統計信息。
10)--default-auth=plugin:用於客戶端認證插件的hint。
11)--default-character-set=charset_name:用特定字符集名作爲默認字符集。
12)--defaults-extra-file=file_name:讀全局選項文件後但(unix)用戶選項文件前讀取該選項文件。如果該文件不存在或不可訪問,將會發生錯誤。如果文件名爲相對文件路徑而非絕對路徑,則其相對當前目錄。
13)--defaults-file=file_name:僅用給出的選項文件。如果文件不存在或不可訪問,將會報錯。如果僅給出相對路徑而非絕對路徑,則文件名相對於當前目錄。
14)--defaults-group-suffix=str:不僅讀取慣用的選項組,還讀取慣用名和str後綴的選項組。例如:mysql_upgrade通常讀取[client]和[mysql_upgrade]組。如果指定了--defaults-group-suffix=_other選項,
則mysql_upgrade也會讀取[client_other]和[mysql_upgrade_other]組。
15)--force:即使mysql_upgrade已經在當前mysql版本上執行過,也忽略mysql_upgrade_info文件並強制執行mysql_upgrade。
16)--host=host_name, -h host_namemysql_upgrade:連接到被給主機上的mysql服務器。
17)--login-path=name:從.mylogin.cnf登錄路徑文件命名的login path組讀取選項。“login path”是一個包含確定連接到mysql服務器和登錄認證賬號的選項的選項組。爲了創建和修改登錄路徑文件,使用
mysql_config_editor工具。
18)--max-allowed-packet=value:用於客戶端和服務器通信的緩衝的最大大小。默認爲24m。最小值和最大值爲4KB和2GB。該選項在mysql5.7.25版本被添加。
19)--net-buffer-length=value:用於客戶端和服務器通信的緩衝的初始大小。默認值爲1MB-1KB。最小和最大值爲4K和16MB。該選項在mysql5.7.25版本被添加。
20)--no-defaults:不讀取任何選項文件。如果由於選項文件中的位置選項導致程序啓動失敗,--no-defaults能用於阻止讀取這些選項。.mylogin.cnf文件是個例外,如果該文件存在,任何情況下都會被讀取。
這允許使用--no-defaults時通過比命令行更安全的方式指定口令。
21)--password[=password], -p[password]:連接到服務器時所用的口令。如果使用端選項格式(-p),選項和口令間不能有空格。如果漏掉命令行--password或--p選項後面的口令,mysql_upgrade將會提示輸入
一個口令。命令行確定口令被認爲是不安全的。
22)--pipe, -W:windows上,用命名管道連接到服務器。該選項只有在服務器支持命名管道連接時才被使用。
23)--plugin-dir=dir_name:尋找插件的目錄。如果--default-auth選項用於確定認證插件但mysql_upgrade並未發現時,將會指定該選項。
24)--port=port_num, -P port_num:用於連接的TCP/IP端口號。
25)--print-defaults:打印程序名和其從選項文件中讀取的所有選項。
26)--protocol={TCP|SOCKET|PIPE|MEMORY}:用於連接到服務器的連接協議。當其他連接參數導致使用一個並非你需要的協議時,可以使用該選項進行指定。
27)--shared-memory-base-name=name:windows上,用於連接到本地服務器所用共享內存的名字。默認值爲mysql,共享內存名是大小寫敏感的。服務器必須用--shared-memory選項啓動以開啓共享內存連接功能。
28)--skip-sys-schema:從mysql5.7.7開始,如果沒有,mysql_upgrade將會安裝sys模式,否則,將其升級爲當前版本。--skip-sys-schema選項將阻止該行爲。該選項在mysql5.7.7版本中被添加。
29)--socket=path, -S path:連接到localhost時所用的unix套接字文件(socket file),或,windows上,所用的命名管道名。
30)--ssl*:以--ssl開始的選項確定是否用SSL連接到服務器,並指定發現SSL祕鑰和證書的地方。
31)--tls-version=protocol_list:客戶端允許的加密連接的協議。數值爲逗號分隔的包含一個或更多協議名的列表。能用於該選項的協議依賴於用來編譯mysql的SSL庫。該選項在mysql5.7.10版本中被添加。
32)--tmpdir=dir_name, -t dir_name:用於創建臨時文件的目錄路徑名。該選項在mysql5.7.5版本中因爲不再用臨時文件的實現而被移去。
33)--upgrade-system-tables, -s:僅升級系統表而不升級數據。
34)--user=user_name, -u user_name:連接到服務器時用的mysql用戶名。默認爲root用戶。
35)--verbose:詳細模式。打印有關程序行爲的更多信息。
36)--version-check, -k:檢查mysql_upgrade正連接的服務器的版本,以便確認與mysql_upgrade構建時的版本是一樣的。如果不是,mysql_upgrade將結束。該選項默認開啓;爲了關閉該檢查,使用
--skip-version-check選項。該選項在mysql5.7.2中被添加。
37)--write-binlog:默認的,mysql_upgrade的二進制日誌被關閉。如果想將程序的行爲記錄到二進制日誌中,可用--write-binlog選項運行程序。當服務器以全局事務鑑定符(GTIDs)開啓模式運行時,mysql_upgrade
不能開啓二進制日誌。
 

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