mysql故障_mysql故障记录

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

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

方法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_INCREMENTCREATE 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/profile4.新建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;

意思是删除匿名用户2cf86abf831a21f34b9cf682474b7693.pnga773b57ce5c85eb5ccf2f3690ee4c4dc.png5.为了root登录安全,设置只能本机和指定ip远程登录update user set host='10.0.0.150' where  host='localhost'; #这是更改的,如果直接添加好像不会9be8e8574a8d06d4980a24db01af0e7c.png测试:70ff71be249318445f7109ca8df789d5.png注意: –h 选项是指定服务器的不是指定自己的3.mysql值插入中文乱码,mysql> show variables like '%char%'; #查看默认的字符集,要改成gbk?0f4a48b7af663cbe456d6893412d8293.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值