上期教程网友笔记整理
MySQL 重置密码
如果你忘记 MySQL 密码,可以通过修改 my.cnf 文件添加 skip-grant-tables 来重置密码,步骤如下:
1、打开 my.cnf 配置文件,找到 [mysqld] ,然后在该行下面添加以下参数:
skip-grant-tables
重启 MySQL 服务:
service mysql restart
登录 MySQL,此时不需要密码,直接回车:
# mysql -u root -p
更改 root 密码 为 123456:
mysql> use mysql; mysql> update user set authentication_string=password("123456") where user='root'; mysql> flush privileges; # 刷新权限
注意密码字段名 5.7 版本的是 authentication_string,之前的为 password。
修改完后,记得注释掉 my.cnf 中的 skip-grant-tables 参数,重启 MySQL 服务,就可以用你设置的密码登录了。
关闭 MySQL 服务器:
service mysql stop
进入目录,以安全模式启动 MySQL
cd /usr/local/mysql/bin ./mysqld_safe --skip-grant-tables &
注意:
可能你的系统没有 safe_mysqld 程序(Windows 或 Ubuntu操作系统) ,可以使用 mysqld:
mysqld --skip-grant-tables &
启动后, root 用户以空密码登录 mysql:
# mysql -u root mysql> update mysql.user set password=PASSWORD('123456') where User='root'; # 修改密码 mysql> flush privileges; # 刷新权限 mysql> quit
启动 MySQL:
service mysql start
这是就可以使用新密码 123456 登录了。
如果你知道密码,可以使用以下命令:
# mysqladmin -u root -p password 新密码
假如楼上的方式改密码没有成功(我就没有), 记得在 update 的时候顺便把 plugin 改成 mysql_native_password:
update user set authentication_string=password("123456"),plugin='mysql_native_password' where user='root';
首先安装后,执行任何指令都会提示:
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
可以用以下指令修改你密码为 123456。
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456' PASSWORD EXPIRE NEVER;
之后使用以下指令刷新权限:
flush privileges;
注意指令末尾的分号。
退出后重新登陆。
Windows 64 位 mysql 8.0.12 版本包解压中没有 data 目录和 my-default.ini 文件以及服务无法启动的解决办法以及修改初始密码的方法。
1、没有 my-default.ini 文件,你可以在根目录下自己创建一个 my.ini 文件,具体内容如下:
[mysql] # 设置mysql客户端默认字符集 default-character-set=utf8 [mysqld] # 设置3306端口 port = 3306 # 设置mysql的安装目录 basedir=C:\web\mysql-8.0.11 #允许最大连接数 max_connections=200 #服务端使用的字符集默认为8比特编码的latin1字符集 character-set-server=utf8 #创建新表时将使用的默认存储引擎 default-storage-engine=INNODB
2、如果设置 mysql 数据库的数据的存放目录:
datadir=C:\web\sqldata
这样会导致服务无法启动,不要添加这一句,也不要自己新建 data 文件夹,由 mysql 自动生成 data 就好。
以管理员的方式打开 cmd 命令窗口(直接打开 cmd 运行,可能会报错),并且进入到 mysql 安装目录的 bin 目录下。然后输入以下命令:
mysqld install mysqld --initialize net start mysql
最后就会生成 data 目录。
我用 Windows10 安装 mysql 出现的问题。
1.编码错误
mysql Found option without preceding group in config file D:\System\mysql\my.ini at line 1
解决:请将 my.ini 文件格式转为 ANSI 编码。
2.时区错误
The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value if you want to utilize time zone support.
需要在配置文件 [mysqld] 中加入:
default-time-zone = '+8:00'
在键入任何命令都会报这个错的时候:
You must reset your password using ALTER USER statement before executing this statement.
意思是需要重设密码,重设密码的命令如下:
alter user user() identified by "密码";
例如:
alter user user() identified by "123456";
MySQL 修改 root 密码的 4种方法(以windows为例)
方法 1: 用 SET PASSWORD 命令
首先登录MySQL。
格式:
mysql> set password for 用户名@localhost = password('新密码');
例子:
mysql> set password for root@localhost = password('123');
方法 2:用 mysqladmin
格式:
mysqladmin -u用户名 -p旧密码 password 新密码
例子:
mysqladmin -uroot -p123456 password 123
方法 3:用 UPDATE 直接编辑 user 表
首先登录MySQL。
mysql> use mysql; mysql> update user set password=password('123') where user='root' and host='localhost'; mysql> flush privileges;
方法 4:在忘记 root 密码的时候,可以这样,以 windows 为例:
- 1. 关闭正在运行的 MySQL 服务。
- 2. 打开 DOS 窗口,转到 mysql\bin 目录。
- 3. 输入 mysqld --skip-grant-tables 回车。--skip-grant-tables 的意思是启动MySQL服务的时候跳过权限表认证。
- 4. 再开一个 DOS 窗口(因为刚才那个 DOS 窗口已经不能动了),转到 mysql\bin 目录。
- 5. 输入 mysql 回车,如果成功,将出现MySQL提示符 >。
- 6. 连接权限数据库: use mysql; 。
- 6. 改密码:update user set password=password("123") where user="root";(别忘了最后加分号) 。
- 7. 刷新权限(必须步骤):flush privileges; 。
- 8. 退出 quit。
- 9. 注销系统,再进入,使用用户名 root 和刚才设置的新密码 123 登录。
Navicat 连接 Mysql8.0.11 出现 2059 错误
在使用 8+ 以上 MySQL 时,navicat premium 连接 mysql 数据库时,会报2059错误;
原因: 8+ 版本使用的密码加密规则为 caching_sha2_password。
而 navicate 驱动目前不支持新加密规则,解决问题方法有两种,一种是升级 navicat 驱动,一种是把 mysql 用户登录密码加密规则还原成 mysql_native_password,这里我们将 mysql 规则修改回之前的 mysql_native_password,
ALTER USER 'root'@'localhost' IDENTIFIED BY '你的密码' PASSWORD EXPIRE NEVER; # 修改加密规则 ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的密码'; # 更新一下用户的密码 FLUSH PRIVILEGES; #刷新权限
8.0 以上版本修改密码使用:
ALTER user 'root'@'localhost' IDENTIFIED BY '你的密码';
如:
mysql> ALTER user 'root'@'localhost' IDENTIFIED BY '123456'; mysql> FLUSH PRIVILEGES;
用以前的方法会报这个错:
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
注意一定要有分号。
在 8.0 以上的某些版本中,使用 mysqld --skip-grant-tables 命令跳过权限表认证的的命令可能会失效且不提供任何报错。
此时可使用:
mysqld --console --skip-grant-tables --shared-memory
MySQL 管理
启动及关闭 MySQL 服务器
Windows 系统下
在 Windows 系统下,打开命令窗口(cmd),进入 MySQL 安装目录的 bin 目录。
启动:
cd c:/mysql/bin mysqld --console
关闭:
cd c:/mysql/bin mysqladmin -uroot shutdown
Linux 系统下
首先,我们需要通过以下命令来检查MySQL服务器是否启动:
ps -ef | grep mysqld
如果MySql已经启动,以上命令将输出mysql进程列表, 如果mysql未启动,你可以使用以下命令来启动mysql服务器:
root@host# cd /usr/bin ./mysqld_safe &
如果你想关闭目前运行的 MySQL 服务器, 你可以执行以下命令:
root@host# cd /usr/bin ./mysqladmin -u root -p shutdown Enter password: ******
MySQL 用户设置
如果你需要添加 MySQL 用户,你只需要在 mysql 数据库中的 user 表添加新用户即可。
以下为添加用户的实例,用户名为guest,密码为guest123,并授权用户可进行 SELECT, INSERT 和 UPDATE操作权限:
root@host# mysql -u root -p Enter password:******* mysql> use mysql; Database changed mysql> INSERT INTO user (host, user, password, select_priv, insert_priv, update_priv) VALUES ('localhost', 'guest', PASSWORD('guest123'), 'Y', 'Y', 'Y'); Query OK, 1 row affected (0.20 sec) mysql> FLUSH PRIVILEGES; Query OK, 1 row affected (0.01 sec) mysql> SELECT host, user, password FROM user WHERE user = 'guest'; +-----------+---------+------------------+ | host | user | password | +-----------+---------+------------------+ | localhost | guest | 6f8c114b58f2ce9e | +-----------+---------+------------------+ 1 row in set (0.00 sec)
在添加用户时,请注意使用MySQL提供的 PASSWORD() 函数来对密码进行加密。 你可以在以上实例看到用户密码加密后为: 6f8c114b58f2ce9e.
注意:在 MySQL5.7 中 user 表的 password 已换成了authentication_string。
注意:password() 加密函数已经在 8.0.11 中移除了,可以使用 MD5() 函数代替。
注意:在注意需要执行 FLUSH PRIVILEGES 语句。 这个命令执行后会重新载入授权表。
如果你不使用该命令,你就无法使用新创建的用户来连接mysql服务器,除非你重启mysql服务器。
你可以在创建用户时,为用户指定权限,在对应的权限列中,在插入语句中设置为 'Y' 即可,用户权限列表如下:
- Select_priv
- Insert_priv
- Update_priv
- Delete_priv
- Create_priv
- Drop_priv
- Reload_priv
- Shutdown_priv
- Process_priv
- File_priv
- Grant_priv
- References_priv
- Index_priv
- Alter_priv
另外一种添加用户的方法为通过SQL的 GRANT 命令,以下命令会给指定数据库TUTORIALS添加用户 zara ,密码为 zara123 。
root@host# mysql -u root -p Enter password:******* mysql> use mysql; Database changed mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP -> ON TUTORIALS.* -> TO 'zara'@'localhost' -> IDENTIFIED BY 'zara123';
以上命令会在mysql数据库中的user表创建一条用户信息记录。
注意: MySQL 的SQL语句以分号 (;) 作为结束标识。
/etc/my.cnf 文件配置
一般情况下,你不需要修改该配置文件,该文件默认配置如下:
[mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock [mysql.server] user=mysql basedir=/var/lib [safe_mysqld] err-log=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid
在配置文件中,你可以指定不同的错误日志文件存放的目录,一般你不需要改动这些配置。
管理MySQL的命令
以下列出了使用Mysql数据库过程中常用的命令:
-
USE 数据库名 :
选择要操作的Mysql数据库,使用该命令后所有Mysql命令都只针对该数据库。mysql> use RUNOOB; Database changed
-
SHOW DATABASES:
列出 MySQL 数据库管理系统的数据库列表。mysql> SHOW DATABASES; +--------------------+ | Database | +--------------------+ | information_schema | | RUNOOB | | cdcol | | mysql | | onethink | | performance_schema | | phpmyadmin | | test | | wecenter | | wordpress | +--------------------+ 10 rows in set (0.02 sec)
-
SHOW TABLES:
显示指定数据库的所有表,使用该命令前需要使用 use 命令来选择要操作的数据库。mysql> use RUNOOB; Database changed mysql> SHOW TABLES; +------------------+ | Tables_in_runoob | +------------------+ | employee_tbl | | runoob_tbl | | tcount_tbl | +------------------+ 3 rows in set (0.00 sec)
-
SHOW COLUMNS FROM 数据表:
显示数据表的属性,属性类型,主键信息 ,是否为 NULL,默认值等其他信息。mysql> SHOW COLUMNS FROM runoob_tbl; +-----------------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-----------------+--------------+------+-----+---------+-------+ | runoob_id | int(11) | NO | PRI | NULL | | | runoob_title | varchar(255) | YES | | NULL | | | runoob_author | varchar(255) | YES | | NULL | | | submission_date | date | YES | | NULL | | +-----------------+--------------+------+-----+---------+-------+ 4 rows in set (0.01 sec)
-
SHOW INDEX FROM 数据表:
显示数据表的详细索引信息,包括PRIMARY KEY(主键)。mysql> SHOW INDEX FROM runoob_tbl; +------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ | Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | +------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ | runoob_tbl | 0 | PRIMARY | 1 | runoob_id | A | 2 | NULL | NULL | | BTREE | | | +------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ 1 row in set (0.00 sec)
-
SHOW TABLE STATUS [FROM db_name] [LIKE 'pattern'] \G:
该命令将输出Mysql数据库管理系统的性能及统计信息。mysql> SHOW TABLE STATUS FROM RUNOOB; # 显示数据库 RUNOOB 中所有表的信息 mysql> SHOW TABLE STATUS from RUNOOB LIKE 'runoob%'; # 表名以runoob开头的表的信息 mysql> SHOW TABLE STATUS from RUNOOB LIKE 'runoob%'\G; # 加上 \G,查询结果按列打印
Gif 图演示: