mysql故障记录

0.MySQL数据库安全模式登陆

当使用mysql数据库提示密码错误或或忘记密码无权限等问题时,可以通过mysql的安全模式启动数据库,使所有用户可以完全访问所有的表,可以对用户重设密码,也可以进行权限修改。

ERROR 1045 (28000):Access denied for user 'root'@'localhost' (using password: YES)

方法1 :MySQL配置文件my.cnf中,在[mysqld]下添加skip-grant-tables,关闭MySQL服务并重新开启;

    输入命令:mysql –uroot    

更改user表中root的密码或者权限

 

 

方法2

1:首先关闭mysql数据库,并结束所有mysqld进程。

#service mysqld stop          #netstat -anpt确认3306关了

2:以安全模式登陆数据库。(linux下可能要mysqld_safe  才能识别window一般是mysql_safe)

#mysqld_safe --skip-grant-tables &           #centos7?,另外开启一个进程,窗口进程不能关闭,需用其他窗口连接

3:其他窗口登陆mysql数据库。

#mysql -uroot

4:更改user表中的用户密码。

> update mysql.user set password=password('qwer1234') where user="root";

>flush privileges;

5:对root用户赋权限。

>grant all on *.* to 'root'@'%' identified by '123456';

>flush privileges;

然后就可以使用root用户,PASSWD密码登陆mysql数据库了。按照上面的方法,当其它用户忘记密码是,可以对此用户进行密码修改并赋权限

 

 

1.mysql> insert into user(host,user,password) values("localhost","peter1",password("123456"));
ERROR 1364 (HY000): Field 'ssl_cipher' doesn't have a default value或者创建好表后,输入password的值时提示太长,但在建表的时候字符长度设置是够的

解决:我的是centos7,mysql版本是 Server version: 5.6.39 MySQL Community Server (GPL)

原因:在我的配置文件my.cnf中有这样一条语句

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

指定了严格模式,为了安全,严格模式禁止通过insert 这种形式直接修改mysql库中的user表进行添加新用户

解决办法:

将配置文件中的STRICT_TRANS_TABLES删掉,即改为:

sql_mode=NO_ENGINE_SUBSTITUTION

然后重启mysql即可

 

 

2.为什么建表的时候都要添加默认的  ID INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT

CREATE TABLE TABLE_1
(
ID INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
// ID列为无符号整型,该列值不可以为空,并不可以重复,而且自增。

NAME VARCHAR(5) NOT NULL
)
AUTO_INCREMENT = 100;(ID列从100开始自增)

PRIMAPY是主键的意思,表示定义的该列值在表中是唯一的意思,不可以有重复。

UNSIGNED是无符号的意思,代表该字段没有正负。

AUTO_INCREMENT可以理解为自动递增的意思,每增加一条记录,值会自动加1。(例如在上面的例子中,ID列每增加一条记录,便会从100自增) 。
 
 
 

3.防止mysql不加where条件导致误操作
我们知道使用update、delete是一个非常危险的操作,如果使用这两个语句后面没有加where条件,那么将会导致整张表的记录被修改或删除。

其实我们只要在登录的时候加上 “-U”参数就可以避免这种情况的发生

1# mysql -uroot -p123456 -U

为了以后方便,我们可以设置别名并加入到环境变量

# alias mysql='mysql -U'

# echo "alias mysql='mysql -U'" >>/etc/profile

 
4.新建mysql用户后设置了密码了,无法登录

[root@localhost ~]# mysql -utest -p
Enter password:
ERROR 1045 (28000): Access denied for user 'test'@'localhost' (using password: YES)

 
解决办法:删除匿名用户,因为普通用户的验证发生匹配的是匿名用户,所以空密码是可以登录进去的,但加上设置的密码就不行了
mysql> use mysql
mysql> delete from user where user='';
mysql> flush privileges;
意思是删除匿名用户
image  image 
 
 
5.为了root登录安全,设置只能本机和指定ip远程登录
 
update user set host='10.0.0.150' where  host='localhost';   #这是更改的,如果直接添加好像不会
image 
 
测试:
image 
注意: –h 选项是指定服务器的不是指定自己的
 
 
 
 
 
 
 
 
 
 
3.mysql值插入中文乱码,
mysql> show variables like '%char%';   #查看默认的字符集,要改成gbk?
 image 
 
 
posted @ 2018-04-17 16:11  彭荣俭  阅读(168)  评论(0编辑  收藏  举报