连接池:由于每次建立连接需要消耗很多时间,连接池的作用就是将这些连接缓存下来,下次可以直接用已经建立好的连接,提升服务器性能。
存储引擎:直白些说就是管理数据库操作(存储、更新、查询等)的一种方法。
查看mysql用户列表
select * from mysql.user;
select User,Host from mysql.user;
创建用户
create user 'test'@'localhost' identified by '123456'; #本地登录
create user 'test'@'%' identified by '123456'; #远程登录,包括localhost
flush privileges; #刷新系统权限列表
赋予用户权限
赋予test用户操作form数据库任何表的查询权限
grant select on form.* to 'test'@'%'
赋予test用操作test数据库任何表的所有权限
grant all privileges on form.* to 'test'@'localhost' identified by '123456'; #适用于mysql8以下版本
grant all privileges on form.* to 'test'@'localhost' #适用于mysql任何版本,mysql8以上仅支持此语句,后面携带密码会报错
注意:给某个用户赋予所有权限后,再赋予单独的权限,没有意义,不会覆盖。
赋予权限后不用刷新权限,在其它客户端已登录时,也会立即生效,无需退出重新登录。
删除用户
delete from mysql.user where user='test' and host='localhost';
flush privileges; #刷新系统权限列表
忘记密码,重置密码
设置免密登录
找到mysql配置文件my.cnf,在[mysqld]入中加上一行跳过权限限制(跳过授权表,不会去读那个表,直接进入MySQL)
skip-grant-tables
保存退出,重启mysql服务
这次仅使用mysql命令即可登录
重置用户密码
update mysql.user set authentication_string=password('123456') where user='test'
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('123456');
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
上面三种在MySQL5.7.6以前都适用
然而,在MySQL 5.7.6以后,password()函数已经被废弃,并且在MySQL 5.7.11以后,password()函数被彻底移除。因此,建议使用ALTER USER 'root'@'localhost' IDENTIFIED BY 'root';命令设置密码。
设置密码时出现下面的错误提示:
ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement
先执行
flush privileges;
刷新权限列表,再执行设置密码sql,然后再次刷新权限,改回配置,重启mysql服务器,使用新密码即可登录
连接阻塞
在其它客户端登录时,若出现这种错误
ERROR 1129 (HY000): Host '10.168.1.203' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'
这是由于同一个ip在短时间内产生太多中断的数据库连接而导致的阻塞(超过mysql数据库max_connection_errors的最大值)。
解决方法:
在被连接的远程服务器中,使用mysqladmin flush-hosts命令清理一下hosts文件(不知道mysqladmin在哪个目录下可以使用命令查找:whereis mysqladmin)
在查找到的目录下使用命令修改
/usr/bin/mysqladmin flush-hosts -h10.168.1.150 -P3308 -uroot -prootpwd;
注意:配置有master/slave主从数据库的要把主库和从库都修改一遍。