• MySQL 教程 1.2


    上期教程网友笔记整理

    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 图演示:

  • 相关阅读:
    目标检测(4)—— 经典算法和常用指标
    大语言模型|人工智能领域中备受关注的技术
    基于jenkins+k8s实现devops
    TensorFlow深度学习!构建神经网络预测股票!
    UED Landing 页 - 定时抓取掘金文章
    IDEA-集成VisualVM插件,启动Java VisualVM
    Spring Boot技术知识点:如何解读@Validated注解
    PHP | imagettftext() 函数
    Linux 模块管理方法之 DKMS
    c++ virtual base class
  • 原文地址:https://blog.csdn.net/SHADOW_xhx/article/details/134489503