注意: 本文操做环境为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>