前提:客户端服务器端必须在同一台机器上面才能修改
如果mysql库里面没有其他用户数据,可以直接初始化mysql库。
但是如果mysql库创建了很多用户就不能进行初始化了。只能从新找回密码
要想找回管理员密码必须停止mysql服务
service mysqld stop
然后手动启动mysql。编辑/etc/init.d/mysqld
找到 有个 $bindir/mysqld_safe --datadir="$datadir" --pid-file="mysqld_pid_file_path" $other_args >/dev/null 2>&1 &
修改为:
$bindir/mysqld_safe --skip--grant-tables --skip-networking --datadir="$datadir" --pid-file="mysqld_pid_file_path" $other_args >/dev/null 2>&1 &
再启动mysql服务。
然后登陆上去后再设置密码注意这里再修改密码时候只能去改mysql.user表里面的password 字段了
update user set Password=password(‘设置的新密码‘); where user=‘root‘;
然后在退出mysql,停止mysql服务,重新编辑/etc/init.d/mysqld 把刚才改的字段再改回去。
再重新启动mysql服务即可
方法2:
使用mysqld_safe 命令加上一些参数,登陆时候不使用授权表
首先停止mysql服务
然后:
mysqld_safe --skip-grant-tables --user=mysql &
直接新开一个shell输入mysql即可进入
如果无法进入,提示
mysqld_safe Starting mysqld daemon with databases from /mydata/data
mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended
请查看/var/log/mysqld.log
我查看到日志显示这样:
160412 6:21:04 [ERROR] /usr/local/mysql/bin/mysqld: Can‘t create/write to file ‘/var/run/mysqld/mysqld.pid‘ (Errcode: 2)
160412 6:21:04 [ERROR] Can‘t start server: can‘t create PID file: No such file or directory
160412 06:21:04 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended
应该是/var/run/mysqld目录不存在,系统无法在此目录找到pid文件
解决:新建目录,在目录下面建立pid文件
mkdir /var/run/mysqld
在目录下面新建mysqld.pid文件,并授权该目录下面的所有文件为mysql用户,mysql组
[root@Centos log]# cd /var/run/mysqld
[root@Centos mysqld]# touch mysqld.pid
[root@Centos run]# chown -R mysql.mysql mysqld
接着去修改mysqlku里面user表
update mysql.user set password = password(‘your pwd‘);
最后刷新权限
flush privileges;
最后再启动mysql服务
之前你使用免密码登陆之后,mysql服务已经被启动了,是以无授权表方式启动的,当你update改完密码之后,需要重启mysql服务,你会这样
/etc/init.d/mysqld stop
此时他会提示你PID文件不存在。因为你之前启动不是使用/etc/init.d/mysqld start 启动的因此就不会生成pid文件
所以不能通过这样重启。
正确重启方式:
mysqladmin -u root -p shutdown
/etc/init.d/mysqld start