跳至主要內容

mysql

大约 13 分钟

mysql


MariaDB

MariaDB 起源于 MySQL。当 Oracle 公司于 2010 年收购了 MySQL 后,MySQL 的原始开发者之一 Monty Widenius 启动了 MariaDB 作为 MySQL 的一个分支。目的是确保社区能够保持一个完全开源的版本。

MariaDB 设计为与 MySQL 兼容,初衷是作为 MySQL 的直接替代品。这意味着它使用与 MySQL 相同的协议和 API。因此,在很多情况下,用于 MySQL 的工具和客户端(例如 mysql 命令行工具) 也可以与 MariaDB 一起使用。


安装

Windows

官方安装包

MySQL :: Download MySQL Installer --- MySQL :: 下载 MySQL 安装程序open in new window

MySQL :: MySQL Downloads --- MySQL :: MySQL 下载open in new window 找到 Community 版本入口

image-20230704175739573

image-20230704175902000

image-20230704175932855

直接装的话可能会卡在这一步:

image-20230704180643186

需要到 Latest supported Visual C++ Redistributable downloads | Microsoft Learn --- 最新支持的 Visual C++ Redistributable 下载 |微软学习open in new window 进行下载

image-20230704180957590

image-20230704181012782

安装完 VC++ 后再次运行安装程序会发现还需要装 Python

image-20230705094434308

在 22 年, Python 3.10 的保有量就比较大了, 因此这里选择了安装 Python3.10

image-20230605112325787

image-20230705100419828

安装完 Python 后再次运行 MySQL 安装程序

image-20230705100857573

image-20230705100921051

image-20230705101652493

image-20230705102552702

image-20230705102931456

image-20230705105214364

这里设置了一个比较弱的密码是有相关需求, 正常使用应当设置一个强密码

image-20230705112338025

image-20230705112358941

image-20230705112414758

image-20230705112608601

image-20230705112626119

image-20230705112713093

image-20230705112728676

使用刚才创建的 root 密码 check 一下链接再 Next

image-20230705112821210

image-20230705112833612

image-20230705112902125

image-20230705112916504

image-20230705132804828\

image-20230705132851148

image-20230705132903178


手动配置

mysql的安装与配置——详细教程 - Winton-H - 博客园 (cnblogs.com)open in new window

  • 下载mysql 免安装版open in new window

    该链接指向的是截至 2020.12.2 最新版的 mysql 社区版最新下载链接, 或者自行到 mysql :: mysql Downloadsopen in new window 选择具体版本下载

    image-20221128004735707

    image-20221128004757314

    image-20221128004839123

  • 下载完成后解压到你想把 mysql 安装在的目录

    该目录不可有中文与空格

  • 安装 mysql 的服务

    • 打开解压后的文件夹中的 bin 文件夹,单击 Windows 文件资源管理器左上角的文件->打开Windows Powershell->以管理员身份打开Windows Powershell

      Win11 的话 win+X 选择 Windows Powershell(管理员) 打开, 使用

      cd [当前文件夹路径]
      
      转到当前文件夹路径
    • 输入
      .\mysqld --install
      
      并回车
    • 之后会显示安装成功的提示:Service successfully installed.
  • 初始化 mysql

    • 输入

      .\mysqld --initialize --console
      

      并回车

    • 将会显示几行文字,复制最后一行root@localhost:字样后面的字符串o?0yxuffh?E.

      这串字符串是初始化生成的随机密码

  • 开启 mysql 的服务

    • 输入

      net start mysql
      

      并回车

    • 将会显示mysql 服务已经启动成功的字样

  • 登录验证 mysql 是否安装成功

    • 输入

      .\mysql -u root -p
      

      并回车,将会让你输入密码

      密码就是刚才生成的临时密码,输入并回车即可

      这里需要注意的是: 若刚才生成临时密码的时候最后有个.的话注意这里的. 不是句号,而是密码的一部分

    • 登陆成功后当前光标前面会有mysql>

  • 修改密码

    • 登录成功后输入

      alter user 'root'@'localhost' identified by 'root';
      
      • 这样即可将密码改为root

      • 同理,将最后 by 后面的root改成你自己想修改成的密码吧

      • 修改成功后将会显示Query OK, 0 rows affected字样

      • 输入

        exit
        

        并回车以退出 mysql

      • 验证密码

        • 输入

          .\mysql -u root -p
          

          并回车,将会让你输入密码

        • 输入你刚才修改好的密码

        • 能够再次成功进入则修改成功

  • 设置系统的全局变量:

    • 桌面->右键"此电脑"->属性->左侧高级系统设置->环境变量

      Win 11 的话 设置 -> 系统 -> 关于 -> 高级系统设置 -> 环境变量

      image-20220327122623794

    • 进入后上面是用户变量,下面是系统变量

      • 点击 下面的新建按钮, 新建一个系统变量
        • 变量名填mysql
        • 变量值填你将 mysql 安装的位置
          • 例如我填的是C:\Database\mysql\mysql-8.0.22-winx64
        • 单击确定以完成新建
      • 进入系统变量Path变量
        • 单击新建
        • 输入%mysql%\bin
      • 完成后逐级确定以完成配置
  • 配置完系统变量之后要登录 mysql 只需

    • Win + R输入cmd并回车打开命令行窗口

    • 输入

      mysql -u root -p
      

      并回车即可

  • 在 mysql 目录下创建一个 ini 或 cnf 配置文件,在这里我创建的是 ini 配置文件,里面写的代码是 mysql 的一些基本配置

    • mysql 目录就是刚才配置环境变量时的 mysql 安装位置
      • 我的就是C:\Database\mysql\mysql-8.0.22-winx64
      • 打开该文件夹新建一个文本文档并连同文件扩展名一同改为my.ini
        • 打开my.ini,键入以下配置并保存退出
          [mysqld]
          character-set-server=utf8mb4
          bind-address=0.0.0.0
          port=3306
          default-storage-engine=INNODB
          [mysql]
          default-character-set=utf8mb4
          [client]
          default-character-set=utf8mb4
          
  • 到这里就已经配置完成了

  • 你可以在 Navicat 中连接配置好的 mysql

    • 打开 Navicat
    • 左上连接->mysql
      • 连接名自拟
      • 主机:localhost
      • 端口:3306
      • 用户名:root
      • 密码:你刚才配置好的 mysql 的密码
    • 输入完成并单击确定后会在当前窗口左栏出现一个你自拟的链接名,双击它,若它变绿了就说明连接上你配置的 mysql 了
  • 到这里 mysql 的安装,配置与连接就已经完成了,更详细的步骤以及可能出现的问题可以移步原博主的博客链接open in new window查看



启用远程访问权限

MySQL开启远程访问权限-阿里云开发者社区 (aliyun.com)open in new window

默认情况下, MySQL 只允许本地登录, 因此远程连接的话需要修改配置

打开 MySQL Command Line

image-20230705182142666

输入密码以登入, 然后

use mysql
select  User,authentication_string,Host from user;

image-20230705182202275

可以看到当前只有一个 root 用户绑定在 localhost 上, 可以直接将此表中 root 对应的 Host 改为 % 来允许远程登录

update user set host='%' where user='root';
# 需要通过FLUSH PRIVILEGES刷新权限表使修改生效
FLUSH PRIVILEGES;

image-20230705182531468

然后就可以远程连接了:

image-20230705185530429


mysql 数据类型

mysql 数据类型 | 菜鸟教程 (runoob.com)open in new window


  • mysql 中定义数据字段的类型对你数据库的优化是非常重要的。
  • mysql 支持多种类型,大致可以分为三类:
    • 数值
    • 日期/时间
    • 字符串(字符)类型。

数值类型

  • mysql 支持所有标准 SQL 数值数据类型。
    • 这些类型包括
      • 严格数值数据类型(INTEGER、SMALLINT、DECIMAL 和 NUMERIC)
      • 近似数值数据类型(FLOAT、REAL 和 DOUBLE PRECISION)。
  • 关键字 INT 是 INTEGER 的同义词,关键字 DEC 是 DECIMAL 的同义词。
  • BIT 数据类型保存位字段值,并且支持 MyISAM、MEMORY、InnoDB 和 BDB 表。
  • 作为 SQL 标准的扩展,mysql 也支持整数类型 TINYINT、MEDIUMINT 和 BIGINT。

  • 下面的表显示了需要的每个整数类型的存储和范围。

image-20221109104146576


  • Navicat 中设计表时,数值类型数据的长度设置与字符类型的长度设置是不一样的

    mysql字段int类型的长度INT(M)_乖乖康少的博客-CSDN博客_mysql int 长度open in new window


    • char类型数据的长度为字符(字母或汉字)的个数
    • varchar类型数据的长度为字符(字母或汉字)的最大个数
    • int类型的长度指的是显示宽度
      • 长度的设定值范围 1~255
        • 设置 0 时自动转为 11
        • 不设置时自动转为默认的 11
        • 在此范围内任意长度值的字段值范围都是
          • -2147483648~2147483647
            • 2311-2³¹-1 ~ 23112³¹-1

              也就是说:int(1)、int(4)、int(11)和 int(110)表示意思是一样的

    • 要查看出不同效果记得在创建类型的时候加 zerofill 这个值(INT(M) ZEROFILL) ,表示用 0 填充,否则看不出效果的

日期和时间类型

  • 表示时间值的日期和时间类型为 DATETIME、DATE、TIMESTAMP、TIME 和 YEAR。
  • 每个时间类型有一个有效值范围和一个"零"值,当指定不合法的 mysql 不能表示的值时使用"零"值。
  • TIMESTAMP 类型有专有的自动更新特性,将在后面描述。

image-20221109104242640


字符串类型

  • 字符串类型指 CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM 和 SET。
  • 该节描述了这些类型如何工作以及如何在查询中使用这些类型。

image-20221109104257710


  • 注意:
    • char(n) 和 varchar(n) 中括号中 n 代表字符的个数,并不代表字节个数,比如 CHAR(30) 就可以存储 30 个字符。
    • CHAR 和 VARCHAR 类型类似,但它们保存和检索的方式不同。它们的最大长度和是否尾部空格被保留等方面也不同。在存储或检索过程中不进行大小写转换。
    • BINARY 和 VARBINARY 类似于 CHAR 和 VARCHAR,不同的是它们包含二进制字符串而不要非二进制字符串。也就是说,它们包含字节字符串而不是字符字符串。这说明它们没有字符集,并且排序和比较基于列值字节的数值值。
    • BLOB 是一个二进制大对象,可以容纳可变数量的数据。
      • 有 4 种 BLOB 类型:TINYBLOB、BLOB、MEDIUMBLOB 和 LONGBLOB。
        • 它们区别在于可容纳存储范围不同。
      • 有 4 种 TEXT 类型:TINYTEXT、TEXT、MEDIUMTEXT 和 LONGTEXT。
        • 对应的这 4 种 BLOB 类型,可存储的最大长度不同,可根据实际情况选择。

重置自增量

mysql重置自增字段的起始值 - 简书 (jianshu.com)open in new window

面试官:mysql如何重置自增id_wx6010cbc8d50ca的技术博客_51CTO博客open in new window

mysql / MariaDB 重置自增 ID (AUTO_INCREMENT)教程 - 完美保留表数据的终极解决方案 - 卡拉云 (kalacloud.com)open in new window


密码

修改密码

[MySQL修改密码的3种方式 (biancheng.net)](http://c.biancheng.net/view/7152.html#:~:text=步骤 1)

# 修改 root@localhost 密码为 new_password
ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';

# 上述指令只允许本地登录, 如果需要远程连接 mysql 的话还需要
ALTER USER 'root'@'%' IDENTIFIED BY 'new_password';

重置密码

忘记mysql数据库的root密码时如何重置密码 (aliyun.com)open in new window


如果忘记了 mysql 的密码可以修改配置文件登录时跳过密码然后再在数据库中修改密码

Linux

修改 /etc/mysql/my.cnf 文件

也有可能在 /etc/my.cnf, 以实际目录为准

[mysqld] 字段下新增如下内容并保存

skip-grant-tables

然后重启并进入 mysql

# 重启 mysql
service mysql restart
# 进入 mysql
mysql
# 刷新权限并重置 root 密码
FLUSH PRIVILEGES;
ALTER USER 'root'@'localhost' IDENTIFIED BY '[新密码]';

注释或删除前面加在 /etc/my.cnf 中的 skip-grant-tables 并重启 mysql 即可

systemctl restart mysql

报错收集


mysql Failed! Error: SET PASSWORD has no significance for user ‘root’@’localhost’ as the authentication method used doesn’t store authentication data in the mysql server. Please consider using ALTER USER

mysql Failed! Error: SET PASSWORD has no significance for user 'root'@'localhost' as the authentication method used doesn't store authentication data in the mysql server. Please consider using ALTER USER - Linux - nixCraft Linux/Unix Forumopen in new window


# 将 root 密码更改为 SetRootPasswordHere
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'SetRootPasswordHere';
exit
# 重新配置 mysql 安全项
sudo mysql_secure_installation
# 使用上面修改的密码(如SetRootPasswordHere) 登入然后修改配置项即可

ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

解决ERROR 1819 (HY000): Your password does not satisfy the current policy requirements - 慕尘 - 博客园 (cnblogs.com)open in new window


SHOW VARIABLES LIKE 'validate_password%';
set global validate_password_policy=0

简单来说就是更改密码策略为低, 不建议在公网上使用



ERROR 1396 (HY000): Operation ALTER USER failed for 'root'@'%'

linux mysql把root@localhost修改成root@% 的详细步骤谢谢_百度知道 (baidu.com)open in new window


在远程访问 docker 中的 mysql 的需求的实现中, 需要修改 root@% 的密码, 不过之前设置数据库的用户名是 root@localhost, 当使用

alter user 'root'@'%' identified with mysql_native_password by '[密码]';

时报错 ERROR 1396 (HY000): Operation ALTER USER failed for 'root'@'%'

use mysql;
select user,host from user;

可以看到当前只有 root@localhost 所以要加一个 root@%

grant all on *.* to 'root'@'%' identified by '[密码]' with grant option;