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