mysql报错Your password has expired的解决办法

mysql数据库一直用的很好,突然一天就登陆不了了,一直报错,不管用哪个用户登录,包括root用户登录都是提示密码过期,不能登录请使用一个可以登录的客户端登录。

从网上查了很多解决方案,但是都是必须登录mysql>命令行才能修改,但是我的情况很特殊,就是mysql -u root -p 之后输入密码也是提示密码过期不能登录,提示信息:ERROR 1862 (HY000): Your password has expired. To log in you must change it using a client that supports expired passwords.

也就是说root都登录不了当然不能执行任何命令了,网上又说使用mysqld –skip-grant-tables 命令启动mysql,我启动之后,使用mysql -u root 不需要密码进入mysql>命令行,但是还是不能执行修改密码的命令,提示没有权限。

基本上使用命令行已经无法找到解决办法了,最后看到有人说使用官方的客户端可以解决此问题,于是就上mysql官网http://www.mysql.com/products/workbench/ 下载了一个最新的客户端mysql workbench,安装完成之后,建立一个mysql远程数据库连接并保存,然后打开连接就提示修改密码了,修改密码之后问题解决,提示修改密码界面如下:

linux系统安装mysql

linux安装mysql服务分两种安装方法:

①源码安装,优点是安装包比较小,只有十多M,缺点是安装依赖的库多,安装编译时间长,安装步骤复杂容易出错;

②使用官方编译好的二进制文件安装,优点是安装速度快,安装步骤简单,缺点是安装包很大,300M左右。以下介绍linux使用官方编译好的二进制包安装mysql。

工具/原料

  • mysql-5.6.17-linux-glibc2.5-i686.tar.gz
  • mysql-5.6.17-linux-glibc2.5-x86_64.tar.gz
  • linux系统,32位、64位均可

方法/步骤

  1. 到mysql官网下载mysql编译好的二进制安装包,在下载页面Select Platform:选项选择linux-generic,然后把页面拉到底部,64位系统下载Linux – Generic (glibc 2.5) (x86, 64-bit),32位系统下载Linux – Generic (glibc 2.5) (x86, 32-bit)

    1

    2

     

  2. 解压32位安装包:

    进入安装包所在目录,执行命令:tar mysql-5.6.17-linux-glibc2.5-i686.tar.gz

    3

     

  3. 复制解压后的mysql目录到系统的本地软件目录:

    执行命令:cp mysql-5.6.17-linux-glibc2.5-i686 /usr/local/mysql -r

    注意:目录结尾不要加/

    4

     

  4. 添加系统mysql组和mysql用户:

    执行命令:groupadd mysql和useradd -r -g mysql mysql

    5

    6

     

  5. 安装数据库:

    进入安装mysql软件目录:执行命令 cd /usr/local/mysql

    修改当前目录拥有者为mysql用户:执行命令 chown -R mysql:mysql ./

    安装数据库:执行命令 ./scripts/mysql_install_db –user=mysql

    修改当前目录拥有者为root用户:执行命令 chown -R root:root ./

    修改当前data目录拥有者为mysql用户:执行命令 chown -R mysql:mysql data

    到此数据库安装完毕

    7

     

  6. 启动mysql服务和添加开机启动mysql服务:

    添加开机启动:执行命令cp support-files/mysql.server /etc/init.d/mysql,把启动脚本放到开机初始化目录

    启动mysql服务:执行命令service mysql start

    执行命令:ps -ef|grep mysql 看到mysql服务说明启动成功,如图

    8

     

  7. 修改mysql的root用户密码,root初始密码为空的:

    执行命令:./bin/mysqladmin -u root password ‘密码’

    9

     

  8. 把mysql客户端放到默认路径:

    ln -s /usr/local/mysql/bin/mysql /usr/local/bin/mysql

    注意:建议使用软链过去,不要直接包文件复制,便于系统安装多个版本的mysql

    10

mysql 重复记录

不希望数据表中有重复记录的时候我们可以给表添加一个联合唯一索引
例如,user表中有user_id,user_name两个字段,如果不希望有两条一摸一样的的user_id和user_name,我们可以给user表添加两个字段的联合唯一索引:
alter table user add unique index(user_id,user_name);
这样当向表中添加相同记录的时候,会返回1062的添加失败信息。
但是有一种情况是表中已经有n个重复的记录,这时候我们才想起来要添加唯一索引,再执行上面的操作时,数据库会告诉你已经有重复的记录了,建立索引失败,这时候,我们可以用下面的操作:
alter ignore table user add unique index(user_id,user_name);
它会删除重复的记录(别怕,会保留一条),然后建立唯一索引,高效而且人性化。
尤其是绿色的那条sql,在建立索引的同时删除了重复数据,相当有用。
下面介绍一下mysql的几种索引
查看索引  show index from 数据库表名
alter table 数据库add index 索引名称(数据库字段名称)

PRIMARY KEY(主键索引)
ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` )

UNIQUE(唯一索引)
ALTER TABLE `table_name` ADD UNIQUE (`column`)

INDEX(普通索引)
mysql>ALTER TABLE `table_name` ADD INDEX index_name ( `column` )

FULLTEXT(全文索引)
ALTER TABLE `table_name` ADD FULLTEXT ( `column` )

多列索引
ALTER TABLE `table_name` ADD INDEX index_name ( `column1`, `column2`, `column3` )

1.普通索引。
这是最基本的索引,它没有任何限制。它有以下几种创建方式:
(1) 创建索引:CREATE INDEX indexName ON tableName(tableColumns(length));如果是CHAR,VARCHAR类型,length可以小于字段实际长度;如果是 BLOB 和 TEXT 类型,必须指定length,下同。
(2)修改表结构:ALTER tableName ADD INDEX [indexName] ON (tableColumns(length))
(3)创建表的时候直接指定:CREATE TABLE tableName ( […], INDEX [indexName] (tableColumns(length)) ;

2.唯一索引。
它与前面的”普通索引”类似,不同的就是:索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一。它有以下几种创建方式:
(1)创建索引:CREATE UNIQUE INDEX indexName ON tableName(tableColumns(length))
(2)修改表结构:ALTER tableName ADD UNIQUE [indexName] ON (tableColumns(length))
(3)创建表的时候直接指定:CREATE TABLE tableName ( […], UNIQUE [indexName] (tableColumns(length));

3.主键索引
它 是一种特殊的唯一索引,不允许有空值。一般是在建表的时候同时创建主键索引:CREATE TABLE testIndex(i_testID INT NOT NULL AUTO_INCREMENT,vc_Name VARCHAR(16) NOT NULL,PRIMARY KEY(i_testID)); 当然也可以用ALTER命令。