忘记MySQL的root密码该怎么办

在MySQL日常开发或者是维护中,有一些问题或是故障往往是难以避免的,如丢失密码、表损坏。在此总结一下常忘记MySQL的root密码解决办法:

7.1 单实例mysql启动和关闭方法

1.登录数据库所在服务器,手动kill掉Mysql进程

(1)常规方法启动数据库

关闭进程的命令为:kill 进程号
关闭进程的命令为:taskkill 进程号 怎么查看进程号呢?
我们都知道MySQL的进程号一般都会保存在Mysql数据目录下的,它记录了Mysql的服务进程号。文件名为hostname.pid,如下,其中YEGZT8JOIIU2LKY为主机名。

1.启动mysql服务命令

linux下查看进程通过使用ps命令;在win下,我们也可以通过tasklist查看进程号,

[root@localhost ~]# /etc/init.d/mysqld start
Starting MySQL. SUCCESS!

打开该文件,可以看到,里面仅仅记录着进程号

2.查看mysql端口

现在为了方便,我主要演示win下操作,不准备打开虚拟机在测试了。如果我们不熟悉taskkill命令,可以通过taskkill
/来查看命令。

[root@localhost ~]# ss -lnt|grep 3306
LISTEN     0      50                        *:3306                     *:* 

2.使用–skip-grant-tables选项重启MySQL服务

3.查看mysql进程

linux下 语法:./bin/mysqld_safe –skip-grant-tables
其中–skip-grant-tables选项代表启动mysql
(注意win下安装的Mysql,我使用mysqld –skip-grant-tables )

会启动两个进程第一个就是mysql_safe第二个是mysqld

3.使用空密码的root用户连接MySQL,并修改root口令

[root@localhost ~]# ps -ef|grep mysql|grep -v grep
root   2796  1  0 16:23 pts/000:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/usr/local/mysql/var --pid-file=/usr/local/mysql/var/localhost.localdomain.pid
mysql  2912   2796  0 16:23 pts/000:00:00 /usr/local/mysql/libexec/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/var --user=mysql --log-error=/usr/local/mysql/var/localhost.localdomain.err --pid-file=/usr/local/mysql/var/localhost.localdomain.pid --socket=/tmp/mysql.sock --port=3306 

修改如下

4.MySQL数据库启动原理

因为使用–skip-grant-tables启动,故使用set password命令失败。

/etc/init.d/mysqld
是一个shell启动脚本,启动后最终会调用mysqld_safe脚本,最后调用mysqld服务启动mysql。

使用update语句,直接更新mysql数据库中user表。

如下,/etc/init.d/mysqld脚本中调用的mysqld_safe的程序。

4.更新权限

$bindir/mysqld_safe --datadir=$datadir --pid-file=$server_pid_file $other_args >/dev/null 2>&1 &

5.重新登录

(2)初始化数据库时MySQL系统输出的给出的启动方法

退出后,发现在此使用mysql -uroot登录,会登陆不成功,只能使用密码登陆。

Mysqld_safe –user=mysql &

以上就是解决root密码忘记的方法,希望对大家的学习有所帮助。

提示:

1.当找回root密码时,会经常使用mysqld_safe –user=mysql &带参数启动

2.我们自己开发数据库启动脚本时,会用到这个方法。

3./etc/init.d/mysqld和mysqld_safe
–user=mysql的启动实质一样。一般出故障的时候我们用mysqld_safe来启动,因为可以加参数。

[root@localhost ~]# cd /usr/local/mysql/|mysqld_safe &

(3)常规方法关闭数据库

1.关闭MySQL命令

[root@localhost ~]# /etc/init.d/mysqld stop

Shutting down MySQL. SUCCESS!

[root@localhost ~]# ss -lnt|grep 3306

2.MySQL常规关闭数据库原理

'stop')
# Stop daemon. We use a signal here to avoid having to know the
# root password.
# The RedHat / SuSE lock directory to remove
lock_dir=/var/lock/subsys/mysqlmanager
# If the manager pid_file doesn't exist, try the server's
if test ! -s "$pid_file"
then
  pid_file=$server_pid_file
  lock_dir=/var/lock/subsys/mysql
fi
if test -s "$pid_file"
then
  mysqlmanager_pid=`cat $pid_file`
  if (kill -0 $mysqlmanager_pid 2>/dev/null)
  then
echo $echo_n "Shutting down MySQL"
kill $mysqlmanager_pid
# mysqlmanager should remove the pid_file when it exits, so wait for it.
wait_for_pid removed "$mysqlmanager_pid"; return_value=$?
  else
log_failure_msg "MySQL manager or server process #$mysqlmanager_pid is not running!"
rm $pid_file
  fi

(4)强制关闭mysql

Killall mysqld

Pkill mysqld

Killall -9 mysqld

Kill pid

提示:第二种方法启动和关闭数据库一般生产环境不用,特别是关闭命令。

强调:尽量不要野蛮杀死mysql服务,生产高并发环境可能会引起数据丢失。

下面引用老男孩老师的博文,野蛮杀死数据库导致的故障企业案例:

(5) 优雅关闭数据库方法

第一种mysqladmin方法

[root@localhost ~]# mysqladmin -uroot -p123456 shutdown

第二种方法自带的脚本
/etc/init.d/mysqld stop

7.1.1多实例mysql启动与关闭方法实例

启动:

/data/3306/mysql start
/data/3307/mysql start

关闭:

/data/3306/mysql stop
/data/3306/mysql stop

多实例启动脚本实现启动和关闭方法

启动:

${cmdPath}/mysqld_safe --defaults-file=${myPath}/my.cnf --user=mysql --basedir=${softPath} --datadir=${myPath}/data &>/dev/null &

澳门金沙vip,关闭:

mysqladmin -u"${my_user}" -p"${my_pass}" -S "$socketfile" shutdown

7.2 登录mysql方法

7.2.1单实例mysql登录

① Mysql 刚装完数据库无需密码登录,不要密码。

② Mysql –uroot 刚装完数据库无需密码登录,不要密码。

③ Mysql –uroot –p 这是标准的命令行登录命令。

④ Mysql –uroot –p’123456’
非脚本一般不这样用,密码明文会泄露密码可以掩饰history功能解决。

解决方法:

History –c清空历史记录

History –d 删除指定行