如何在 Windows 上安装多个 MySQL,实现 MySQL 跨电脑移植使用
如何在 Windows 上安裝多個 MySQL,實現 MySQL 跨電腦移植使用
- 初次安裝
- MySQL 移植使用
- 附錄
- 其它 MySQL 命令
- 查看本 MySQL 數據存放目錄
MySQL 的各種其它安裝方法:
-
在 Winodws 中使用安裝包安裝 MySQL:https://blog.csdn.net/wangpaiblog/article/details/112000033
-
在 Windows 中使用免安裝包安裝 MySQL:https://blog.csdn.net/wangpaiblog/article/details/121571927
-
在 Linux 中安裝 MySQL:https://blog.csdn.net/wangpaiblog/article/details/120259448
??實現了在 Windows 上安裝多個 MySQL、MySQL 跨電腦移植使用的標準是,如果在一個 Windows 上安裝了一個 MySQL,然后將此 MySQL 數據拷貝到第二臺沒有安裝過 MySQL 的 Windows 上,第二臺 Windows 可以無附加條件地通過一定的方法來訪問此 MySQL 數據庫,且數據庫中的數據沒有損失。達到了上述的標準就認為實現了 MySQL 的跨電腦移植使用。
??MySQL 可以實現這樣的技術。具體來說,如果可以將一臺 Windows 上的數據庫拷貝到第二臺電腦上,第二臺電腦只需要重新注冊 MySQL 服務和修改配置文件中關于 MySQL 的安裝與數據路徑即可使用原先的數據。
【實現原理】
??從本質上來說,MySQL 不需要安裝,只是需要在操作系統中注冊 MySQL 服務。原因是,MySQL 的服務模塊和其它應用的一樣,是一種在后臺無限循環靜默運行的程序。它作為守護進程,必須要事先由操作系統將其啟動,其它 MySQL 組件才能得以運行。只要它啟動之后,其它使用 MySQL 的進程就可以自行啟動 MySQL 客戶進程來實現對 MySQL 數據庫的訪問。
初次安裝
筆者的環境:
-
MySQL 8.0.27
-
Windows 10 教育版
具體步驟如下:
先在一臺電腦使用 MySQL 的免安裝包安裝 MySQL,這個過程同上面的教程【在 Windows 中使用免安裝包安裝 MySQL】類似。為了避免不必要的踩坑,這里還是重新描述一下。
假設已經按照教程【在 Windows 中使用免安裝包安裝 MySQL】中的指示下載好了 MySQL 的免安裝包。這里以 MySQL 8.0.27 例。
如果是同一臺電腦上安裝多個 MySQL,那么是不能設置環境變量的,這會導致沖突,而且也沒有必要,因為可以通過完整的絕對路徑來運行 MySQL。
將下載好的 mysql-8.0.27-winx64.zip 解壓縮,得到 MySQL 安裝目錄。安裝目錄應該是一種含文件夾 bin 的目錄。在筆者的 Windows,各路徑如下:
-
MySQL 安裝目錄:D:\mysql-8.0.27-winx64
-
MySQL 命令目錄:D:\mysql-8.0.27-winx64\bin
-
MySQL 數據庫數據存放目錄:D:\mysql-8.0.27-winx64\data
-
MySQL 端口號:3306
在 MySQL 的目錄下創建一個 MySQL 配置文件 my.ini。此配置文件是用來規定 MySQL 服務進程的參數信息。
[mysql] # 設置 MySQL 客戶端默認字符集 default-character-set=utf8 [mysqld] #設置 MySQL 端口號 port = 3306 #skip-grant-tables # 設置 MySQL 的安裝目錄 basedir=D:\mysql-8.0.27-winx64\ # 設置 MySQL 數據庫的數據的存放目錄 datadir=D:\mysql-8.0.27-winx64\data # 允許最大連接數 max_connections=200 # 服務端使用的字符集 character-set-server=utf8 # 創建新表時將使用的默認存儲引擎 default-storage-engine=INNODB[client] #default_character_set=utf8【踩坑提醒】
??此處 basedir、 datadir 的路徑中不要使用中文,而且應該使用斜杠 / 來代替反斜杠 \。原因是反斜杠 \ 可能引發轉義的問題。比方說,如果路徑中含 \test,那么 MySQL 會首先將 \t 解釋成制表符。因此,也可以在原來的每個反斜杠 \ 后面再加一個反斜杠 \,這樣也能解決轉義的問題。
??如果引發了轉義的問題,將出現如下報錯:
mysqld: Can't create/write to file 'XXX' (OS errno 2 - No such file or directory)一般來說,只需要修改上面配置文件 my.ini 中的端口 port、MySQL 安裝目錄 basedir、MySQL 數據存放路徑 datadir。
以管理員身份運行 CMD。如果不以管理員身份運行,將會有報錯 Install/Remove of the Service Denied!。
以管理員身份運行 CMD 的方法有很多,這里只舉一例。
使用如下命令找到 CMD 的路徑,然后右鍵單擊,選擇 以管理員身份運行。通常,CMD 的路徑位于 C:\Windows\System32\cmd.exe。
where cmdD:\>where cmd C:\Windows\System32\cmd.exeD:\>
現在,如果成功啟動了 CMD 窗口,窗口上應該有 管理員 字樣,窗口顯示的當前路徑為 C:\Windows\system32。
使用如下命令進入 MySQL 所在的磁盤。
d:C:\Windows\system32>d:D:\>
使用如下命令進入 MySQL 安裝路徑。
cd mysql-8.0.27-winx64\binD:\>cd mysql-8.0.27-winx64\binD:\mysql-8.0.27-winx64\bin>
現在,應該就在 CMD 中以管理員身份進入到了 MySQL 的命令目錄。輸入命令 mysqld install xxx 在操作系統中注冊 MySQL 服務,其中,xxx 可以任意取名。
mysqld install mysql01D:\mysql-8.0.27-winx64\bin>mysqld install mysql01 Service successfully installed.D:\mysql-8.0.27-winx64\bin>
此時,應該可以在 Windows 中看到剛剛注冊的 MySQL 服務。
上面的配置文件編輯完成之后。使用如下命令初始化 MySQL 目錄。
mysqld --initializeD:\mysql-8.0.27-winx64\bin>mysqld --initializeD:\mysql-8.0.27-winx64\bin>
使用命令 net start xxx 啟動 MySQL 服務。其中,xxx 是前面起的 MySQL 服務名。
net start mysql01D:\mysql-8.0.27-winx64\bin>net start mysql01 mysql01 服務正在啟動 . mysql01 服務已經啟動成功。D:\mysql-8.0.27-winx64\bin>
【踩坑提醒】
??如果此處出現 服務無法啟動 的情況,請檢查:
-
前面配置文件中的 MySQL 安裝目錄設置的是否正確
-
前面配置文件中的 MySQL 數據庫數據存放目錄設置的是否正確
-
前面配置文件中設置的端口號是否已被占用
使用命令 mysql -u root -p -Pxxx 進入 MySQL 數據庫。其中,xxx 是前面在配置文件中設置的端口號。
mysql -u root -p -P3306此處將會提示輸入密碼。這個密碼是由前面執行命令 mysqld --initialize 時生成的,它在前面設置的 數據庫數據存放目錄 中的文件 計算機名.err 中。具體方法是用記事本打開該文件,找到帶 password 的一行 A temporary password is generated for root@localhost:。此文字后面的就是生成的隨機密碼(此密碼不帶空格)。輸入密碼后即可進入數據庫。
D:\mysql-8.0.27-winx64\bin>mysql -u root -p -P3306 Enter password: ****** Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 8 Server version: 8.0.27 MySQL Community Server - GPLCopyright (c) 2000, 2021, Oracle and/or its affiliates.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>【踩坑提醒】
??如果上面的命令省略參數 -Pxxx,則相當于提供的是 MySQL 默認端口號 3306。如果這與前面的配置文件中設置的不一致,這將引發如下報錯:
ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost:3306' (10061)初次登錄之后需要修改密碼。修改密碼的命令為:ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '新密碼';。其中,新密碼 要被換成自己設置的密碼,且 新密碼 要位于單引號之中。
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'helloworld';mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'helloworld'; Query OK, 0 rows affected (0.02 sec)mysql>
【踩坑提醒】
??在 MySQL 5.7 及以前的版本,修改密碼的命令是 set password for root@localhost =password(‘新密碼’);。如果在 MySQL 8.0 中使用該命令,會發生如下報錯:
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'password(‘helloworld’)' at line 1MySQL 登錄成功后,就可以使用 MySQL 語言來對數據庫進入控制了。
在使用完數據庫后,就可以考慮退出了。退出 MySQL 的方法是,先使用命令 exit 來退出登錄。
exitmysql> exit ByeD:\mysql-8.0.27-winx64\bin>
使用命令 net stop xxx 退出 MySQL 服務。其中,xxx 是前面起的 MySQL 服務名。
net stop mysql01D:\mysql-8.0.27-winx64\bin>net stop mysql01 mysql01 服務正在停止. mysql01 服務已成功停止。D:\mysql-8.0.27-winx64\bin>
【提示】
??如果讀者非常愛干凈,可以在此處將前面注冊的 MySQL 服務也一并移除。使用命令 sc delete xxx 即可。其中,xxx 是前面起的 MySQL 服務名。
sc delete xxxD:\mysql-8.0.27-winx64\bin>sc delete mysql01 [SC] DeleteService 成功D:\mysql-8.0.27-winx64\bin>
??但是,這樣做了之后,下次再登錄時,需要額外先執行前面的命令 mysqld install xxx 再次安裝 MySQL 服務。(此時只需要注冊 MySQL 服務,不需要執行 MySQL 初始化。)
退出之后,如果需要再次登錄,只需要從前面的命令 net start xxx 開始進行即可。示例如下:
D:\mysql-8.0.27-winx64\bin>net start mysql01 mysql01 服務正在啟動 . mysql01 服務已經啟動成功。D:\mysql-8.0.27-winx64\bin>mysql -u root -p -P3306 Enter password: ****** Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 8 Server version: 8.0.27 MySQL Community Server - GPLCopyright (c) 2000, 2021, Oracle and/or its affiliates.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>MySQL 移植使用
下面來進行數據庫移植。可以選擇先在原數據庫中創建一些初始數據,以供移植后驗證移植成功。這里假設已經完成了這個步驟。下面開始創建另一個 MySQL 服務。這個過程可以在前面那臺電腦上進行,也可以在另一臺電腦上進行。筆者已經分別進行了驗證,均已成功。
將原電腦的 MySQL 安裝目錄拷貝到另一個任意目錄,這里以 E:\ 為例。在新 MySQL 服務中,各目錄如下
- MySQL 安裝目錄:E:\mysql-8.0.27-winx64
- MySQL 命令目錄:E:\mysql-8.0.27-winx64\bin
- MySQL 數據庫數據存放目錄:E:\mysql-8.0.27-winx64\data
- MySQL 端口號:3402
【提示】
??準確地說,拷貝的時候只需要拷貝 MySQL 數據庫數據存放目錄 中的文件,而且在拷貝之后,登錄數據庫的密碼應該是原數據庫的密碼。
對目錄下的配置文件 my.ini 中的 MySQL 安裝目錄 basedir、MySQL 數據存放路徑 datadir 作相應的修改。配置文件 my.ini 中的端口 port 要改成另一個不會與已有沖突的端口號。
【踩坑提醒】
??很多人可能想著將 MySQL 數據庫數據存放目錄 設置成相對目錄,這樣將 MySQL 安裝目錄整個進行拷貝移動時也不需要修改配置文件。但實際上,這行不通。配置文件 my.ini 中記載的目錄不能是相對路徑。
??不過,這不是沒有應對的辦法,可以在 MySQL 啟動前,使用一種腳本代碼來將配置文件 my.ini 中的絕對路徑設置成正確的值。很多編程語言都可以實現這一點。
使用管理員身份運行 CMD,并進入 MySQL 命令目錄。這里是: E:\mysql-8.0.27-winx64\bin。
輸入命令 mysqld install xxx 在操作系統中注冊 MySQL 服務,其中,xxx 可以任意取名。
mysqld install mysql02E:\mysql-8.0.27-winx64\bin>mysqld install mysql02 Service successfully installed.E:\mysql-8.0.27-winx64\bin>
【注意】
??此處不需要再使用命令 mysqld --initialize 來初始化 MySQL 目錄,因為已經有了移植之后的數據了。
使用命令 net start xxx 啟動 MySQL 服務。其中,xxx 是前面起的 MySQL 服務名。
net start mysql02E:\mysql-8.0.27-winx64\bin>net start mysql02 mysql02 服務正在啟動 ... mysql02 服務已經啟動成功。E:\mysql-8.0.27-winx64\bin>
使用命令 mysql -u root -p -Pxxx 進入 MySQL 數據庫。其中,xxx 是前面在配置文件中設置的端口號。此處應該會提示輸入密碼。如果移植是成功的,此密碼應該是移植前自設的密碼。
mysql -u root -p -P3402E:\mysql-8.0.27-winx64\bin>mysql -u root -p -P3402 Enter password: ****** Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 8 Server version: 8.0.27 MySQL Community Server - GPLCopyright (c) 2000, 2021, Oracle and/or its affiliates.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>
到這一步,就完成了 在 Windows 上安裝多個 MySQL,實現 MySQL 跨電腦移植使用 的全部步驟。讀者可以自行試一下,由于使用了不同的端口號,即便是在同一臺電腦上運行這兩個 MySQL 也不會也沖突,而且移植之后的數據依舊可以訪問。
可以看出,在創建第二個 MySQL 服務時,只使用了一些 CMD 命令。只要將這些命令提前寫入任意的一種腳本語言中,就可以無障礙地實現對移植之后數據庫的訪問。歡呼吧,少年!
附錄
其它 MySQL 命令
查看本 MySQL 數據存放目錄
??這需要先登錄所需要查詢的 MySQL 客戶端才行。如果已經登錄,輸入如下命令即可:
show global variables like "%datadir%";總結
以上是生活随笔為你收集整理的如何在 Windows 上安装多个 MySQL,实现 MySQL 跨电脑移植使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MySQL 免安装版的下载与配置教程
- 下一篇: 解决MySQL报错ERROR 2003