一、apt安装
root@hollowman-F117:~# apt install mysql-server
二、初始化数据库
初始安装的数据库默认会有一个root用户,且没有密码,需要进行初始化操作并设置密码。
root@hollowman-F117:~# mysql_secure_installation
按提示选择密码设置规则[0,1,2]、输入密码,其他都输入Y(y)。
三、如何远程连接数据库
初始安装的数据库,虽然有root用户,但并不允许远程连接,当然我们可以给root用户设定远程连接,但这并不安全,可以新建一个用户并允许远程连接即可。
1.新建用户
用root用户进入mysql
root@hollowman-F117:~# mysql -u root -p
创建hollowman用户,密码也设置为hollowman(如果创建出现错误提示,请看第四点):
mysql>create user 'hollowman'@ '%' identified by 'hollowman';
这条语句的作用是在mysql.user表中新建了一条用户数据,其中用户名为hollowman,密码为hollowman,plugin默认为caching_sha2_password
,权限基本为N,也就是否。
mysql> select user,host,plugin from mysql.user;
+------------------+-----------+-----------------------+
| user | host | plugin |
+------------------+-----------+-----------------------+
| debian-sys-maint | localhost | caching_sha2_password |
| mysql.infoschema | localhost | caching_sha2_password |
| mysql.session | localhost | caching_sha2_password |
| mysql.sys | localhost | caching_sha2_password |
| root | localhost | auth_socket |
plugin是什么?plugin是mysql进行用户连接时的密码验证方式。
2.给用户赋权
因为新建的用户权限基本为否,因此需要给用户赋予权限
mysql>grant all on *.* to 'hollowman'@'%';
all表示全部权限(insert,update,delete等),*.*表示任意数据库的任意表格。
3.修改配置文件
ubuntu20.04通过apt安装的mysql服务配置文件本是/etc/mysql/my.cnf
,不过该文件并未实质配置数据,而是在文件中添加了2个连接文件,而其中/etc/mysql/mysql.conf.d/mysqld.cnf
才是真正的服务器配置文件
初始安装的数据库配置文件并不允许远程访问,需要配置
root@hollowman-F117:~# vim /etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld]
user = mysql
pid-file = /var/run/mysqld/mysqld.pid # 去掉此行前的注释
socket = /var/run/mysqld/mysqld.sock # 去掉此行前的注释
port = 3306 # 去掉此行前的注释
datadir = /var/lib/mysql # 去掉此行前的注释
#bind-address = 127.0.0.1 #注释此行
#mysqlx-bind-address = 127.0.0.1 #注释此行
key_buffer_size = 16M
myisam-recover-options = BACKUP
log_error = /var/log/mysql/error.log
max_binlog_size = 100M
四、密码设置/修改不成功?
错误提示: ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
1.密码没有指定验证方式或者验证方式不正确?
该错误一般是修改密码过程出现,因为创建用户时设定了验证方式,那我们修改密码时也必须指定这个验证方式。以修改root%localhost密码为例:
mysql> alter user 'root'@'localhost' identified with auth_socket by '新密码';
这里的auth_socket就是通过select user,host,plugin from mysql.user查询出来的root用户对应的plugin字段。
2.不符合密码设定规则?
首先查看密码设置规则
mysql> SHOW VARIABLES LIKE 'validate_password%';
+--------------------------------------+--------+
| Variable_name | Value |
+--------------------------------------+--------+
| validate_password.check_user_name | ON |
| validate_password.length | 8 |
| validate_password.mixed_case_count | 1 |
| validate_password.number_count | 1 |
| validate_password.special_char_count | 1 |
| validate_password.dictionary_file | |
| validate_password.policy | MEDIUM |
+--------------------------------------+--------+
7 rows in set (0.00 sec)
validate_password_dictionary_file
字典文件validate_password_length
长度的最小值,这里是8。validate_password_mixed_case_count
大小写的最小个数。validate_password_number_count
数字的最小个数。validate_password_special_char_count
特殊字符的最小个数。validate_password.policy
密码策略,它有3个值(在初始化数据库时可以看到这个信息):
Policy Tests Performed
0 or LOW Length
1 or MEDIUM Length; numeric, lowercase/uppercase, and special characters
2 or STRONG Length; numeric, lowercase/uppercase, and special characters; dictionary file
- 当为0时,密码策略只要符合validate_password_length规则就可,也就是密码长度需大于等于8。
- 当为1时,除了长度要求,还有数字、大小写字母和特殊字符等要求。
- 当为2时,除了上述要求,还必须符合数据字典要求
如懒得设置复杂密码,可通过set global validate_password.policy=0
来修改密码设置规则为0,也就是只要满足长度为8的要求即可。