已測試可用的版本
MySQL5.7戈次、MySQL 8.0娃兽;
環(huán)境:
windows7/10
MySQL5.7.24免安裝版/MySQL8.0免安裝版
項目需求
需要實現(xiàn)一個自動化MySQL配置安裝及初始化數(shù)據(jù)庫(初始化包括:設(shè)置用戶名和密碼,導(dǎo)入初始數(shù)據(jù)庫)。
批處理
用來對某對象進行批量的處理玷禽,即可通過批處理讓相應(yīng)的軟件執(zhí)行自動化操作。
MySQL免安裝版使用步驟:
1.配置環(huán)境變量
2.創(chuàng)建MySQL配置文件
3.注冊MySQL服務(wù)
4.啟動MySQL服務(wù)
5.設(shè)置MySQL數(shù)據(jù)庫用戶名密碼為指定的賬戶密碼乌询。
6.導(dǎo)入數(shù)據(jù)庫
本文章問題的解決方式就是使用批處理來實現(xiàn)以上步驟榜贴。
批處理實現(xiàn)以上步驟,以下代碼塊內(nèi)容復(fù)制保存在一個.bat文件中即可使用:
1.配置環(huán)境變量:
set PATH=%PATH%;%MYSQL_HOME%;
set RegV=HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
reg add "%RegV%" /v "MYSQL_HOME" /d %MYSQL_HOME%
reg add "%RegV%" /v "Path" /t REG_EXPAND_SZ /d "%PATH%" /f
2.創(chuàng)建配置文件:
echo [mysql]>>%mysql%\my.ini
echo default-character-set=utf8>>%mysql%\my.ini
echo [mysqld]>>%mysql%\my.ini
echo port = 3306>>%mysql%\my.ini
echo basedir=%mysql:\=\\%>>%mysql%\my.ini
echo datadir=%mysql:\=\\%\\data>>%mysql%\my.ini
echo max_connections=200>>%mysql%\my.ini
echo character-set-server=utf8>>%mysql%\my.ini
echo default-storage-engine=INNODB>>%mysql%\my.ini
3.注冊MySQL服務(wù):
mysqld --initialize-insecure --user=mysql
mysqld -install MySQL
4.啟動MySQL服務(wù):
net start MySQL
5.導(dǎo)入編輯好的.sql文件妹田,搞定唬党。
(如果不需要導(dǎo)入默認數(shù)據(jù)庫,去掉 < 右側(cè)內(nèi)容鬼佣,此時運行該腳本將自動配置并登入MySQL驶拱,然后用相應(yīng)版本的設(shè)置密碼指令對mysql設(shè)置密碼即可)
mysql -uroot --skip-password -P3306 < %mysql%wellbore.sql
寫腳本過程中遇到的問題:
1.官方安裝步驟安裝的MySQL數(shù)據(jù)庫初始化密碼為隨機密碼,需要打開安裝目錄的文件查找密碼晶衷;
2.MySQL的登錄存在交互蓝纲,需要人工輸入密碼;
3.登錄MySQL會跳轉(zhuǎn)到MySQL中晌纫,批處理指令不能跟隨跳轉(zhuǎn)到MySQL税迷,如何實現(xiàn)數(shù)據(jù)庫的導(dǎo)入和修改密碼為用戶的指定密碼操作。
解決方法:
1锹漱、2. 瀏覽文檔箭养,可以通過mysqld --initialize-insecure --user=mysql生成空密碼,賬號為默認賬號root哥牍,再通過--skip略過密碼輸入的指令毕泌,即可登入MySQL喝检。
3.在.sql中添加需要在MySQL中做的操作,通過批處理 < 操作在登陸時直接將.sql導(dǎo)入到mysql撼泛,避免批處理指令無法正確的在MySQL中實現(xiàn)挠说。
解釋:在使用MySQL的過程中,導(dǎo)出數(shù)據(jù)庫時生成的.sql文件里面都是由一句一句SQL指令組成的坎弯,而導(dǎo)入數(shù)據(jù)庫時則是將.sql文件中的指令全部執(zhí)行一遍纺涤,所以根據(jù)這個原理,對.sql進行編寫抠忘,即可實現(xiàn)初始化數(shù)據(jù)庫的功能撩炊。
用戶要求導(dǎo)入默認數(shù)據(jù)庫,設(shè)置數(shù)據(jù)庫為指定密碼崎脉,所以在編輯后的.sql文件如下拧咳。
update(2019.7.10):
文章寫于18年11月23日,最近新項目剛好使用了該腳本囚灼,就整理一下發(fā)布了出來骆膝。
安裝新版本MySQL8.0,用舊版set password指令設(shè)置密碼時會出現(xiàn)如下錯誤提示:
[MYSQL:ER_NOT_SUPPORTED_AUTH_MODE:Client does not support authentication protocol]
原因:MySQL8.0使用了新的密碼認證方式
解決:使用如下新的指令來設(shè)置密碼:
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'password';