注意: 本文操做環境爲win10系統wsl下的Ubuntu18.04,對於原生的Ubuntu18.04一樣適用。MySQL默認版本爲5.7,其餘版本不適用。mysql
安裝步驟
1.更新源:sql
sudo apt update
2.安裝mysql:數據庫
sudo apt install mysql-server
wsl下使用上述命令安裝就直接安裝上去了,沒有設置密碼的地方,這時候不管怎麼登錄,都沒法登陸上去。ubuntu
chenyc@DESKTOP-Q5J25HR:~$ mysql ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2) chenyc@DESKTOP-Q5J25HR:~$ mysql -u root -p Enter password: ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2) chenyc@DESKTOP-Q5J25HR:~$
設置root用戶密碼:vim
chenyc@DESKTOP-Q5J25HR:~$ sudo mysql_secure_installation Securing the MySQL server deployment. Enter password for user root: Error: Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
發現沒法設置,看報錯信息,說的是不能鏈接到mysqld.sock
套接字,猜測是mysql服務沒有開啓。安全
開啓mysql服務:bash
chenyc@DESKTOP-Q5J25HR:~$ sudo service mysql start * Starting MySQL database server mysqld No directory, logging in with HOME=/ [ OK ]
從新設置密碼: 使用sudo mysql_secure_installation
命令,有幾個地方須要用戶確認。socket
Press y|Y for Yes, any other key for No:y
選y
,前面提示大體的意思是:默認使用空的密碼鏈接,該種鏈接方式能夠做爲測試使用,可是不安全,問是否要從新設置密碼。xss
Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 0
這裏是讓選擇密碼強度,從前面提示能夠知道,有LOW
,MEDIUM
,STRONG
三種強度可選,咱們選擇0
便可。ide
New password: Re-enter new password:
這個沒什麼好說的,讓設置密碼,並確認新密碼。
Remove anonymous users? (Press y|Y for Yes, any other key for No) : y
問是否移除匿名用戶,匿名用戶留着也沒什麼用,能夠移除掉,選擇y
。
Disallow root login remotely? (Press y|Y for Yes, any other key for No) : n
是否禁止root用戶遠程登陸,在沒有設置其餘用戶以前,只能經過root用戶登陸,因此不能禁止,選擇n
。
Remove test database and access to it? (Press y|Y for Yes, any other key for No) : n
是否移除測試數據庫,選擇n
。
Reload privilege tables now? (Press y|Y for Yes, any other key for No) : n
是否從新載入特權表,最好不動它,選否。
下面是設置密碼的全過程。
chenyc@DESKTOP-Q5J25HR:~$ sudo mysql_secure_installation Securing the MySQL server deployment. Connecting to MySQL using a blank password. VALIDATE PASSWORD PLUGIN can be used to test passwords and improve security. It checks the strength of password and allows the users to set only those passwords which are secure enough. Would you like to setup VALIDATE PASSWORD plugin? Press y|Y for Yes, any other key for No: y There are three levels of password validation policy: LOW Length >= 8 MEDIUM Length >= 8, numeric, mixed case, and special characters STRONG Length >= 8, numeric, mixed case, special characters and dictionary file Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 0 Please set the password for root here. New password: Re-enter new password: Estimated strength of the password: 25 Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : y By default, a MySQL installation has an anonymous user, allowing anyone to log into MySQL without having to have a user account created for them. This is intended only for testing, and to make the installation go a bit smoother. You should remove them before moving into a production environment. Remove anonymous users? (Press y|Y for Yes, any other key for No) : y Success. Normally, root should only be allowed to connect from 'localhost'. This ensures that someone cannot guess at the root password from the network. Disallow root login remotely? (Press y|Y for Yes, any other key for No) : n ... skipping. By default, MySQL comes with a database named 'test' that anyone can access. This is also intended only for testing, and should be removed before moving into a production environment. Remove test database and access to it? (Press y|Y for Yes, any other key for No) : n ... skipping. Reloading the privilege tables will ensure that all changes made so far will take effect immediately. Reload privilege tables now? (Press y|Y for Yes, any other key for No) : n ... skipping. All done!
以上設置完成後,使用剛剛設置的root用戶密碼,再次鏈接數據庫,成功鏈接上。
chenyc@DESKTOP-Q5J25HR:~$ sudo mysql -u root -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 6 Server version: 5.7.29-0ubuntu0.18.04.1 (Ubuntu) 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>
編碼設置
查看編碼:
mysql> show variables like 'character%'; +--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | latin1 | | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | latin1 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+ 8 rows in set (0.00 sec)
能夠看到,剛剛安裝好的mysql默認有不少是latin1
的編碼格式,對漢字的支持很差,所以須要改爲utf8
編碼格式。
修改mysql數據庫編碼的步驟:
1.中止mysql服務:
chenyc@DESKTOP-Q5J25HR:~$ /etc/init.d/mysql stop * Stopping MySQL database server mysqld cat: /var/run/mysqld/mysqld.pid: Permission denied [fail]
發現沒有權限,加上sudo
再去執行:
chenyc@DESKTOP-Q5J25HR:~$ sudo /etc/init.d/mysql stop * Stopping MySQL database server mysqld [ OK ]
服務中止成功。
2.修改配置文件: 進入配置文件目錄:
cd /etc/mysql/mysql.conf.d
修改以前先備份:
sudo cp mysqld.cnf mysqld.cnf.2
接下來修改配置文件,執行以下命令:
sudo vim mysqld.cnf
修改兩個地方:
# 修改處1:添加如下2行 [client] default-character-set=utf8
[mysqld] # 修改處2:添加如下3行 default-storage-engine=INNODB character-set-server=utf8 collation-server=utf8_general_ci
修改完成後,重啓數據庫:
chenyc@DESKTOP-Q5J25HR:~$ sudo service mysql start * Starting MySQL database server mysqld [ OK ]
再次登陸,發現登不上了:
chenyc@DESKTOP-Q5J25HR:~$ mysql -u root -p Enter password: ERROR 1698 (28000): Access denied for user 'root'@'localhost'
使用sudo cat /etc/mysql/debian.cnf
查看debian-sys-maint密碼,發現密碼是下面這個玩意:
chenyc@DESKTOP-Q5J25HR:~$ sudo cat /etc/mysql/debian.cnf # Automatically generated for Debian scripts. DO NOT TOUCH! [client] host = localhost user = debian-sys-maint password = LMCuPijw9kX5cRsS socket = /var/run/mysqld/mysqld.sock [mysql_upgrade] host = localhost user = debian-sys-maint password = LMCuPijw9kX5cRsS socket = /var/run/mysqld/mysqld.sock
所以,可使用debian-sys-maint
用戶先登陸上去,修改密碼:
chenyc@DESKTOP-Q5J25HR:~$ mysql -udebian-sys-maint -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 18 Server version: 5.7.29-0ubuntu0.18.04.1 (Ubuntu) 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>
使用上面的password
,成功登陸。
修改密碼,執行以下語句:
UPDATE mysql.user SET authentication_string=PASSWORD('你的密碼'), PLUGIN='mysql_native_password' WHERE USER='root';
執行時發現報錯:
mysql> UPDATE mysql.user SET authentication_string=PASSWORD('cyc2010'), PLUGIN='mysql_native_password' WHERE USER='root'; ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
說不符合安全規範,估計是以前設置安全級別的那地方的問題,須要從新設置一下:
mysql> set global validate_password_policy=0; Query OK, 0 rows affected (0.00 sec)
validate_password_length(密碼長度)參數默認爲8,修改成1:
mysql> set global validate_password_length=1; Query OK, 0 rows affected (0.00 sec)
再次修改密碼成功。
mysql> UPDATE mysql.user SET authentication_string=PASSWORD('cyc2010'), PLUGIN='mysql_native_password' WHERE USER='root'; Query OK, 1 row affected, 1 warning (0.00 sec) Rows matched: 1 Changed: 1 Warnings: 1
受權遠程登陸:
mysql> grant all privileges on *.* to 'root'@'%' identified by 'cyc2010' with grant option; Query OK, 0 rows affected, 1 warning (0.01 sec)
設置完成後,再次重啓服務:
chenyc@DESKTOP-Q5J25HR:~$ sudo /etc/init.d/mysql restart * Stopping MySQL database server mysqld [ OK ] * Starting MySQL database server mysqld No directory, logging in with HOME=/ [ OK ]
使用root用戶登陸:
chenyc@DESKTOP-Q5J25HR:~$ mysql -u root -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 4 Server version: 5.7.29-0ubuntu0.18.04.1 (Ubuntu) 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>
成功登陸,查看編碼格式:
mysql> show variables like 'character%'; +--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | utf8 | | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | utf8 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+ 8 rows in set (0.00 sec)
發現都變成了utf8,說明設置成功了。
系統重啓後失效問題
重啓wsl-Linux子系統:
//WSL-Ubuntu18.04 LTS 重啓方法 //以管理員權限運行cmd >net stop LxssManager //中止 >net start LxssManager //啓動
重啓系統後,再次登陸,發現又登不上了:
chenyc@DESKTOP-Q5J25HR:/mnt/c/Users/cheny$ mysql -u root -p Enter password: ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
看報錯信息,應該是mysql服務沒有啓動,啓動服務:
chenyc@DESKTOP-Q5J25HR:/mnt/c/Users/cheny$ sudo service mysql start [sudo] password for chenyc: * Starting MySQL database server mysqld No directory, logging in with HOME=/ [ OK ]
再次登陸,發現登錄成功。
chenyc@DESKTOP-Q5J25HR:/mnt/c/Users/cheny$ mysql -u root -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 4 Server version: 5.7.29-0ubuntu0.18.04.1 (Ubuntu) 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>