xampp 中 mysql的相關配置
最近開始接觸PHP,而一般搭建PHP環境使用的都是xampp 這個集成環境,由於之前我的系統中已經安裝了mysql服務,所以在啟動mysql的時候出現一些列錯誤,我通過查詢各種資料解決了這個問題,現在記錄一下,方便日後遇到同樣的問題時能夠快速解決,也為遇到同樣問題的朋友提供一種解決的思路。
啟動
剛開始時我在點擊啟動mysql的時候發現它一直卡在嘗試啟動mysql這個位置,xampp提示內容如下:
Attempting to start MySQL service...
它啟動不成功但是也不提示出錯,而且查詢日誌發現沒有錯誤的日誌,這個時候我想到應該是我本地之前安裝了mysql,導致失敗。而且我還將mysql安裝成為了服務,後來查詢相關資料,有網友說需要將mysql服務的地址改為xampp下mysql所在地址,具體怎麽改我就不寫了,一般都可以找到,但是我想說的是,這個方式好像在我這邊不起作用。那麽就幹脆一點直接刪除服務就好了。
sc delete mysql
上述命令直接刪除mysql這個服務。然後重啟xampp,再次啟動mysql,它終於報錯了。只要報錯就好說了,現在來查詢日誌,發現日誌如下:
2018-10-13 22:52:19 37d0 InnoDB: Warning: Using innodb_additional_mem_pool_size is DEPRECATED. This option may be removed in future releases, together with the option innodb_use_sys_malloc and with the InnoDB‘s internal memory allocator. 2018-10-13 22:52:19 14288 [Note] InnoDB: innodb_empty_free_list_algorithm has been changed to legacy because of small buffer pool size. In order to use backoff, increase buffer pool at least up to 20MB. 2018-10-13 22:52:19 14288 [Note] InnoDB: Using mutexes to ref count buffer pool pages 2018-10-13 22:52:19 14288 [Note] InnoDB: The InnoDB memory heap is disabled 2018-10-13 22:52:19 14288 [Note] InnoDB: Mutexes and rw_locks use Windows interlocked functions 2018-10-13 22:52:19 14288 [Note] InnoDB: _mm_lfence() and _mm_sfence() are used for memory barrier 2018-10-13 22:52:19 14288 [Note] InnoDB: Compressed tables use zlib 1.2.3 2018-10-13 22:52:19 14288 [Note] InnoDB: Using generic crc32 instructions 2018-10-13 22:52:19 14288 [Note] InnoDB: Initializing buffer pool, size = 16.0M 2018-10-13 22:52:19 14288 [Note] InnoDB: Completed initialization of buffer pool 2018-10-13 22:52:19 14288 [Note] InnoDB: Highest supported file format is Barracuda. 2018-10-13 22:52:19 14288 [Warning] InnoDB: Resizing redo log from 2*3072 to 2*320 pages, LSN=1600607 2018-10-13 22:52:19 14288 [Warning] InnoDB: Starting to delete and rewrite log files. 2018-10-13 22:52:19 14288 [Note] InnoDB: Setting log file C:\xampp\mysql\data\ib_logfile101 size to 5 MB 2018-10-13 22:52:19 14288 [Note] InnoDB: Setting log file C:\xampp\mysql\data\ib_logfile1 size to 5 MB 2018-10-13 22:52:19 14288 [Note] InnoDB: Renaming log file C:\xampp\mysql\data\ib_logfile101 to C:\xampp\mysql\data\ib_logfile0 2018-10-13 22:52:19 14288 [Warning] InnoDB: New log files created, LSN=1601036 2018-10-13 22:52:19 14288 [Note] InnoDB: 128 rollback segment(s) are active. 2018-10-13 22:52:19 14288 [Note] InnoDB: Waiting for purge to start 2018-10-13 22:52:19 14288 [Note] InnoDB: Percona XtraDB (http://www.percona.com) 5.6.39-83.1 started; log sequence number 1600607 2018-10-13 22:52:20 3508 [Note] InnoDB: Dumping buffer pool(s) not yet started 2018-10-13 22:52:20 14288 [Note] Plugin ‘FEEDBACK‘ is disabled. 2018-10-13 22:52:20 14288 [ERROR] Could not open mysql.plugin table. Some plugins may be not loaded 2018-10-13 22:52:20 14288 [ERROR] Can‘t open and lock privilege tables: Table ‘mysql.servers‘ doesn‘t exist 2018-10-13 22:52:20 14288 [Note] Server socket created on IP: ‘::‘. 2018-10-13 22:52:20 14288 [ERROR] Fatal error: Can‘t open and lock privilege tables: Table ‘mysql.user‘ doesn‘t exist 2018-10-13 22:55:18 3024 InnoDB: Warning: Using innodb_additional_mem_pool_size is DEPRECATED. This option may be removed in future releases, together with the option innodb_use_sys_malloc and with the InnoDB‘s internal memory allocator. 2018-10-13 22:55:18 12324 [Note] InnoDB: innodb_empty_free_list_algorithm has been changed to legacy because of small buffer pool size. In order to use backoff, increase buffer pool at least up to 20MB.
找到其中的ERROR項,發現它提示mysql.user這個表不存在,這個表保存的是mysql的賬號信息,如果沒有這個,它無法知道哪些是合法用戶,合法用戶又有哪些權限,因此這裏就需要創建這個表。通過查詢資料發現這是由於未進行mysql數據初始化的緣故,這個錯誤經常見於通過源碼包在編譯安裝的時候。這個時候需要使用命令 mysql_install_db
來初始化數據庫表
mysql_install_db --user=mysql -d C:\xampp\mysql\data\
-d 後面跟上mysql表數據所在路徑
執行之後發現程序又報錯了,這次提示mysql的版本不對
Can‘t find messagefile "D:\mysql-8.0.11-winx64\share\errmsg.sys". Probably from another version of MariaDB
這個時候就很奇怪了,我啟動的是xampp中的mysql,為何它給我定位的是之前安裝的MySQL所在路徑呢?出現這種現象肯定是系統中的相關配置的路徑不對,之前已經刪掉了mysql服務,那麽應該不可能會是服務配置導致的,剩下的應該就是環境變量了,通過一個個的查看環境變量,終於發現了 MYSQL_HOME這個變量給的是 D:\mysql-8.0.11-winx64
這個路徑,我們將這個環境變量的值修改為xampp中mysql的路徑然後再執行命令初始化mysql表數據,這個時候成功了。
完成了這些操作,我這邊就可以通過xampp面板啟動mysql了。
數據庫配置
剛開始時使用root賬戶登錄是不需要密碼的,這樣是很危險的操作,容易發生數據泄露,為了安全起見,首先給root賬戶輸入一個復雜的密碼
mysqladmin -uroot -p password
回車之後它會讓你輸入新的密碼,如果是修改密碼可以使用下面的命令
mysqladmin -uroot -p"test" password
其中test為原始密碼
在回車之後它會讓你輸入新的密碼
我們為root設置了一個相對復雜的密碼,但是與Linux系統相似,為了安全一般不能隨便給出root賬戶,這個時候就需要一個非root賬戶並為它設置相關權限,我們可以在進入mysql後,使用grant
命令來創建賬戶以及分配權限
grant all privileges on *.* to masimaro@localhost identified by "masimarotest";
flush privileges;
它的語法格式為: grant 權限 on 數據庫.表 to 用戶名@主機 identified by "密碼"
- 權限,
all privileges
表示所有權限,如果不想分配所有權限,可以考慮使用select,insert,update,delete,create,drop,index,alter,grant,references,reload,shutdown,process,file
權限中的任意一個或者多個。 - 數據庫,表:我們可以指定具體的用戶對具體的數據庫表有何種權限
- 主機:主機可以是localhost,%(任意主機),或者具體的主機名、ip等等,表示這個賬戶只能通過對應的主機來登錄
分配完成之後通過 flush privileges;
語句來保存我們分配的賬戶和權限
為了方便操作,還可以對phpmyadmin進行配置,以便能夠使用phpmyadmin來連接並操作mysql數據庫。
可以在phpmyadmin目錄中找到 config.inc.php
文件,找到這麽幾行
$cfg[‘Servers‘][$i][‘user‘] = ‘‘; //連接數據庫的用戶
$cfg[‘Servers‘][$i][‘password‘] = ‘‘; //連接數據庫的用戶密碼
$cfg[‘Servers‘][$i][‘host‘] = ‘127.0.0.1‘; //數據庫所在主機
$cfg[‘Servers‘][$i][‘controluser‘] = ‘root‘; //phpmyadmin 所使用的配置賬戶
$cfg[‘Servers‘][$i][‘controlpass‘] = ‘‘; //配置賬戶的密碼
根據具體情況配置這些信息之後,就可以直接連上PHPmyadmin了,然後根據它的提示來初始化相關數據庫和表即可
xampp 中 mysql的相關配置