MYSQL实用

118 阅读4分钟

mysql重置密码

查询日志

如果是第一次登录,不知道密码的情况下,且使用yum等方式安装,可用以下命令查看默认密码

grep 'temporary password' /var/log/mysqld.log

跳过登录验证

修改mysql的配置文件---my.conf

在最头部的[mysqld]下添加

skip-grant-tables # 跳过登录验证

之后在重启mysql服务

systemctl restart mysqld

用以下命令进入mysql

mysql -uroot

之后切换mysql数据库,进行用户root密码的修改

user mysql; # 切换到mysql数据库下
update user set password=password('新密码') where user='root' #修改root用户的密码
flush privileges; # 刷新权限,使其立即生效
select host,user,password from user;# 可查看修改后用户的权限
exit;退出

之后可尝试使用新的密码进入mysql,成功之后,将原先在my.conf下添加的跳过验证语句删除,并保存,重启mysql服务

设置远程登录

  • 其中*.*,第一个表示的是数据库,第二个是表,如果为都为*表示为所有数据库和表的权限
  • ’root‘@’%‘,root是用户名,即远程登录的用户名,%是准许连接的ip,%表示任意

mysql8.0

# 第一次设置root远程登录,并配置远程密码使用如下SQL命令
create user 'root'@'%' IDENTIFIED WITH mysql_native_password BY '密码!';	-- 密码需要符合:大于8位,有大写字母,有特殊符号,不能是连续的简单语句如123,abc
grant all on *.* to 'root'@'%'; # 授予权限
alter user 'root'@'%' identified with mysql_native_password by '密码';
FLUSH PRIVILEGES; # 刷新权限

mysql5.7

GRANT ALL PRIVILEGES ON *.* TO '数据库用户名'@'%' IDENTIFIED BY '密码' WITH GRANT OPTION; # 授予权限
ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';

之后再重启mysql,如果远程连接不上,可能是云服务器的防火墙没关,或者把3306端口开发

systemctl restart mysqld; # 重启mysql
systemctl stop firewalld; # 关闭防火墙

MYSQL进阶知识

SQL性能分析

-- session 查看当前会话,也不是很懂
-- global 是查询全局数据
-- 其中like 后接的字符匹配 _表示一个占位符,任意
show global status like 'Com_______'
-- 查看慢查询日志是否开启
show VARIABLES LIKE 'slow_query_log'

-- profile 帮助做sql优化时查看时间,查看是否支持profile
select  @@have_profiling 
-- 查看profile是否开启
select @@profiling;
-- 开启profile
set profiling=1;
-- 开启profile后,每次sql的执行时间都会被记录下来
-- 查看每一条sql的基本耗时
show profiles;
-- 查看指定query_id的sql语句各个阶段的耗时情况,query_id通过上面语句查询得出
show profiles for query query_id;
-- 查看指定query_id的sql语句cpu的使用情况
show profile cpu for query query_id;

开启慢查询日志

/etc/my.cnf配置文件下,添加如下配置,之后再重启mysql

systemctl restart mysqld

# 开启MySQL慢日志查询开关
slow_query_log=1
# 设置慢日志的时间为2秒,SQL语句执行时间超过2秒,就会视为慢查询,记录慢查询日志
long_query_time=2

其他

MySql的版本问题

  • 8.0的默认字符编码utf8,即utfmb3,也可以选择utfmd4存储,因为utf8mb3无法存储表情包哪些特殊字符,表的排序规则utf8mb4_0900_ai_ci
  • 5.7的默认字符编码utf8,表的排序规则utf8_general_ci

mysql安装问题

启动问题

如果在linux系统上安装MySQL出现无法启动的情况,可以通过如下的命令来查看是否缺少依赖

 ldd /usr/sbin/mysqld

如果显示如下依赖:libssl.so.10 not found,可通过如下命令进行安装

yum install compat-openssl10

最后再次重启即可

MySQL无法登录问题

本地登录时显示 Can't connect to local MySQL server through socket '/XXX/mysql.sock'等 ,先查看是否存在对应的文件,如果存在,则考虑是否是权限问题

 chmod -755 /var/lib/mysql

如果是不存在对应的文件,则查找系统是否存在 mysql.sock文件(mysql8.0的一般在/var/lib/mysql), 如果找到对应的sock文件,则建立软连接链接到不存在的目录里

ln -s /var/lib/mysql/mysql.sock /xx/mysql.sock

最后重启MySQL重新登录即可

最大连接数问题

MySQL默认配置的最大连接数为151,当出现连接数激增的情况时,会出现拒绝连接的情况,这时我们需要通过调整最大连接数来满足我们的需求,查询MySQL的最大连接数可通过如下命令查看

show variables like 'max_connections';

编辑my.cnf

在my.cnf添加最大连接数的配置,然后重启MySQL。

max_connections = 1000