mysql忘记root密码解决及mysql的四个故障解决小结

linux下面修改mysql的root用户密码

首先是登陆到mysql数据库,如果你的密码是空,想添加新的密码,通过代码:mysql -u root 进入mysql系统;如果你的root用户有密码,想修改密码,通过代码:mysql -u root -p 回车,然后再输入旧密码进入mysql系统。


  1. #mysql -u root

  2. mysql> use mysql;

  3. mysql> updateusersetpassword=password('newPWD') whereuser='root';

  4. mysql> flush previleges;

  5. mysql> quit;

  6. # service mysqld restart

   不过有时候数据库以防结果不立刻生效,可以先关闭数据库进程 # killall mysqld  然后再启动数据库 #service mysqld start。


一、windows下破解:

1、停止mysql服务

2、进入命令窗口,进入mysql安装目录下的bin目录下,跳过权限检测,启动mysql

mysql\bin>mysqld-nt --skip-grant-tables

3、重新打开一个窗口,进入bin目录下,设置新的root密码

mysql\bin>mysqladmin -u root  flush-privileges password "newpassword"

mysql\bin>mysqladmin -u root -p shutdown 提示你输入密码,输入newpassword进入数据库

4、停止mysql server,用正常模式启动mysql,然后用上面账号就可以登陆数据库库了。


二、linux下破解:

vi /etc/my.cnf# 在里面添加一行skip-grant-tables # 保存退出# 重启mysql服务services mysql restart# 这里登录mysql就不需要密码了mysql -uroot -p# 修改mysql的root密码use mysql;update user set password=password(‘123’)where user='root';# 最后


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
vi /etc/my .cnf
# 在里面添加一行
skip-grant-tables
# 保存退出
# 重启mysql服务
services mysql restart
# 这里登录mysql就不需要密码了
mysql -uroot -p
# 修改mysql的root密码
use mysql;
update user set password=password(‘123’)where user= 'root' ;
# 最后刷新权限
flush privileges
quit


/date/mysql/bin/mysqld_safe --user=mysql &   # 启动mysql后台运行
vi /etc/rc.d/rc.local                        # 开机启动执行  可用于开机启动脚本
/etc/rc.d/rc3.d/S55sshd        # 开机启动和关机关闭服务连接    # S开机start  K关机stop  55级别 后跟服务名
ln -s -f /date/httpd/bin/apachectl /etc/rc.d/rc3.d/S15httpd   # 将httpd启动程序脚本连接到开机启动目录



mysql的三个故障解决小结

1、MySQl服务无法启动

   我们在使用mysql的过程中,常会遇到MySQl服务无法启动,具体报错信息:Starting MySQL ERROR.The server quit without updating PID file (/[FAILED]l/mysql/)

   对这样的错误,网上的分析解释有很多,有人分析把skip-federated这个参数屏蔽就可以了,也有人认为删除mysql-bin.index这个文件就可以启动服务。或者检查MYSQL日志,如果提示有参数配置错误,也很容易导致这个错误。

比较快速有效的解决办法就是做好数据库备份,然后只需如下两步,就可快速使数据库恢复正常。

进入MYSQL安装位置下的scripts目录,执行

 ./mysql_install_db --defaults-file=/etc/my.cnf --basedir=/usr/local/mysql --datadir=/var/mysql/data --user=mysql     (初始化MYSQL数据库)

然后再执行 ./mysqld_safe --user=mysql --datadir=/var/mysql/data &  (安全启动模式)

这时候就可正常启动MYSQL了。

(注:参数可根据mysql实际的安装目录和数据目录进行调整)


2、配置MYSQL同步时的Slave_IO_Running状态异常

   在配置MYSQL同步时,丛机显示:

   Slave_IO_Running: Connecting

   Slave_SQL_Running: Yes

确保两台MYSQL主机网络是互通的。当出现这种错误时,没有显示正常状态的YES,这个问题主要是因为授权出现错误或不匹配。比如授权的用户不匹配或授权的从机IP不对,都会出现Connecting这个显示。

通过show slave status\G 命令,仔细观察这两个显示状态,都为YES才正常。

3、配置MYSQL同步时的Slave_SQL_Running状态异常

   在配置MYSQL同步时,丛机显示:

    Slave_IO_Running: YES

    Slave_SQL_Running: No

这个问题一般有两个原因:

A.程序可能在slave上进行了写操作

B.也可能是slave机器重起后,事务回滚造成的.


解决办法一:

mysql> slave stop;

mysql> set GLOBAL SQL_SLAVE_SKIP_COUNTER=1; (在start slave时,从当前位置起,跳过一个event。)

mysql> slave start;


解决办法二、

首先停掉Slave服务:slave stop

到主服务器上查看主机状态:

记录File和Position对应的值


进入master

mysql> show master status;

+----------------------+----------+--------------+------------------+

| File                 | Position | Binlog_Do_DB | Binlog_Ignore_DB |

+----------------------+----------+--------------+------------------+

| localhost-bin.000009 | 33622483 |     weichat  |  mysql,test      | 

+----------------------+----------+--------------+------------------+

1 row in set (0.00 sec)

然后到slave服务器上执行手动同步:

mysql> change master to 

> master_host='master_ip',

> master_user='user', 

> master_password='pwd', 

> master_port=3306, 

> master_log_file=localhost-bin.000009', 

> master_log_pos=326 ;

1 row in set (0.00 sec)

mysql> slave start;

1 row in set (0.00 sec)


mysql> show slave status\G


*************************** 1. row ***************************

            Master_Log_File: localhost-bin.000009

        Read_Master_Log_Pos: 326

             Relay_Log_File: localhost-relay-bin.000027

              Relay_Log_Pos: 1014014

      Relay_Master_Log_File: localhost-bin.000009

           Slave_IO_Running: Yes

          Slave_SQL_Running: Yes

            Replicate_Do_DB: weichat

手动同步需要先停止master的写操作!

注意:

Slave_IO_Running:连接到主库,并读取主库的日志到本地,生成本地日志文件

Slave_SQL_Running:读取本地日志文件,并执行日志里的SQL命令。

4.mysql用户无法远程登录

MySQL的默认配置root帐户只能在本地登录。远程登录会出现如下提示:

1103 �C host xxx.xxx.xxx.xx is not allowed to connec to this mysql server.

1045 �C Access denied for user ‘root’@’10.163.225.155′ (using password: YES).

原因是MySQL指定了某个账户只能在某个地方登录服务器;例如:[email protected] 表示账户 root 只能在IP地址为 19.168.1.155 的机器上登录MySQL服务器。

解决办法:

1)修改root账户可在某地址登录(地址可以是IP地址、机器名、域名、%表示任何地址)来解决问题,已root身份登录执行命令:

mysql>use mysql;

mysql>update user set host=’%’ where user=’root’;

mysql>flush privileges; ― 刷新MySQL的系统权限相关表;

到这里已经完成了,如果还是登录不了的话就尝试重启下MySQL;

2)创建一个账户使其能远程登录,已root身份登录执行命令:

mysql> grant 权限1,权限2,…权限n on 数据库名称.表名称 to 用户名@用户地址 identified by ‘连接口令’;

权限1,权限2,…权限n代表select,insert,update,delete,create,drop,index,alter,grant,references,reload,shutdown,process,file等14个权限。
赋予用户部分权限

all privileges 或者 all 代替,表示赋予用户全部权限。
当数据库名称.表名称被*.*代替,表示赋予用户操作服务器上所有数据库所有表的权限。
用户地址可以是localhost,也可以是ip地址、机器名字、域名。也可以用’%’表示从任何地址连接。
‘连接口令’不能为空,否则创建失败。

mysql>grant select,insert,update,delete,create,drop on vtdc.employee to [email protected] identified by ‘123′;
给来自10.163.225.87的用户joe分配可对数据库vtdc的employee表进行select,insert,update,delete,create,drop等操作的权限,并设定口令为123。如果没有joe用户就会自动创建他。

mysql>grant all privileges on vtdc.* to [email protected] identified by ‘123′;
给来自10.163.225.87的用户joe分配可对数据库vtdc所有表进行所有操作的权限,并设定口令为123。

mysql>grant all privileges on *.* to [email protected] identified by ‘123′;
给来自10.163.225.87的用户joe分配可对所有数据库的所有表进行所有操作的权限,并设定口令为123。

mysql>grant all privileges on *.* to joe@localhost identified by ‘123′;
给本机用户joe分配可对所有数据库的所有表进行所有操作的权限,并设定口令为123。

3)使用127.0.0.1替换localhost来试试看

4)''@localhost记录的影响(用户名是空,主机字段是localhost的记录影响了)

    delete mysql.user where user = ''; 以后,service mysqld restart 重启mysql



Linux下面Oracle安装  

 http://jasonliping.blog.51cto.com/471157/1399939

 http://blog.51cto.com/zt/629

你可能感兴趣的:(mysql,数据库忘记root密码)