在windows10下安装最新mysql 8.0.22

若重装 mysql可以看简捷版https://blog.csdn.net/ahmcwt/article/details/109859805

一.准备工作:

首先

MySQL 8.0 Server需要Microsoft Visual C ++ 2015可再发行组件包才能在Windows平台上运行。用户应在安装服务器之前确保已将软件包安装在系统上。该软件包可从 Microsoft下载中心获得。此外,MySQL调试二进制文件要求安装Visual Studio 2015。点击下载Microsoft Visual C ++ 2015可再发行组件包

MySQL仅适用于Microsoft Windows 64位操作系统。有关支持的Windows平台的信息,请参见 https://www.mysql.com/support/supportedplatforms/database.html。

1.去mysql官网https://dev.mysql.com/downloads/mysql/

下载mysql 8.0.22社区版压缩包https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.22-winx64.zip

点击,然后

点击开始下载,晚上下载速度还行,如果迅雷下载可能会快一些.

下载后,不放心的话,可以验证md5的值是否相同.参考https://dev.mysql.com/doc/refman/8.0/en/verifying-md5-checksum.html关于md5的介绍.

方法:1.到网站http://www.fourmilab.ch/md5/,下载md5工具文件点击下载md5.zip

2.解压缩md5,

并把其中的md5.exe拷贝到与下载的mysql8.0.22压缩文件在同一个目录下.(d5系统默认没显示扩展名.exe,但后面类型有显示有"应用程序").

(便捷进入cmd方式:在md5与mysql-8.0.22文件夹所在地址栏里直接输入cmd然后回车,即可进入cmd窗口.

输入dir命令,显示文件名字,便于后面md5验证时用到.

鼠标拖选mysql-8.0.22-winx64.zip,然后ctrl+c复制,

在cmd命令行窗口中,输入md5 空格 然后ctrl+粘贴文件名(省去一个字一个字地输入,也避免了输错),回车,进行校验.

md5.exe mysql-8.0.22-winx64.zip
A78E5DA2BB87B51B6DF06690977BE199  mysql-8.0.22-winx64.zip

对比验证所产生的校验和(十六进制数字的字符串)与相应软件包正下方的下载页面上显示的校验和相符。

2.解压:

解压缩后,有两层文件夹mysql-8.0.22-winx64,把最里面的那个mysql-8.0.22-winx64剪切,粘贴到c盘或d盘的根目录下.并将其文件夹名mysql-8.0.22-winx64改为mysql

(注意:解压后里面共有5个文件夹,2个文件.没有后期出现的data文件夹,data在初始化之后才会出现,如果在初始化时,存在data文件夹,则容易出错,所以需删去data).

二.安装mysql

windows下有两种安装方式,一种是.msi文件自动安装;另一种是解压缩下载的文件,手动安装.这里采用的是手动方式的.

参考:https://dev.mysql.com/doc/refman/8.0/en/windows-install-archive.html

(一)如果是由低版本升级到高版本mysql:

参考:https://dev.mysql.com/doc/refman/8.0/en/windows-upgrading.html

1.从https://dev.mysql.com/downloads/下载MySQL的最新Windows ZIP存档发行版。

2.如果mysql服务正在运行,停止它.

1)如果是作为服务安装了,用:

 sc stop mysqld_service_name

或者 net stop mysqld_service__name

2)如果没用将mysql服务器作为服务运行,用mysqladmin将其停止.例:

D:\> mysql\bin>"\bin\mysqladmin" -u root -p shutdown

3.解压缩zip文件,建议覆盖现有的mysql安装(如C:\mysql),也可以将其安装到其他目录中,例如:D:\mysql8.

4.重新启动服务器。例如,如果将mysql作为服务运行,则使用:

          SC START mysqld_service_name

NET START mysqld_service_name

否则直接调用 mysqld.

5.mysql8.0.16之前,以管理员身份运行mysql_upgrade来检查sql表,如有必要,并尝试修复、更新。8.0.16及以后的版本则不需这一步。

使用mysql_upgrade的方法:1).确保服务器正在运行.2).命令行执行mysql_upgrade [options 3).停止服务器并且重新启动,以便任何系统表更改长效.

默认情况下,mysql_upgrade以MySQLroot用户身份运行 。如果在root 运行mysql_upgrade时密码已过期 ,则会显示一条消息,提示您密码已过期,并且 mysql_upgrade失败。要更正此问题,请重置root密码以使其失效,然后再次运行mysql_upgrade。首先,以以下方式连接到服务器root

shell> mysql -u root -p

Enter password: **** <- enter root password here

使用ALTER USER以下命令重置密码:

mysql> ALTER USER USER() IDENTIFIED BY 'root-password';

然后退出mysql并再次运行 mysql_upgrade


shell> mysql_upgrade [options]
shell> mysql_upgrade [options]

(二)如果不是升级安装:

(本文要介绍的安装方法)

1.创建配置文件my.ini

在前面准备工作做好下载并解压之后,(确保以具有管理员权限的用户身份登录windows).在mysql目录下,双indows10按下图设置勾选显示"文件扩展名",右键创建文本文件,保存命名为my.ini

my.ini文件内容如下:

[mysqld]
# 设置3306端口
port=3306
# 设置mysql的安装目录
basedir=D:/MySQL
# 设置mysql数据库的数据的存放目录
datadir=D:/MySQL/Data

socket=/tmp/mysql.sock

key_buffer_size=16M

max_allowed_packet=128M

# 允许最大连接数
max_connections=200
# 允许连接失败的次数。
max_connect_errors=10
# 服务端使用的字符集默认为utf8mb4,5.5.3之后可以支持utf8mb4
character-set-server=utf8mb4
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# 默认使用“mysql_native_password”插件认证以兼容之前版本连接,5.6以后已启用 ''sha256_password'插件,但其在以后版本里可能会弃用. 其提示建议:Please use caching_sha2_password instead'
#mysql_native_password
default_authentication_plugin=mysql_native_password
[mysql]
# 设置mysql客户端默认字符集,
# default-character-set=utf8mb4 实践没发现此句有什么用,反而在运行\mysql\bin>mysql_secure_installation时会出现错误提示mysql_secure_installation: [ERROR] unknown variable 'default-character-set=utf8mb4'.,用#注释掉就好了.
[client]
# 设置mysql客户端连接服务端时默认使用的端口
port=3306

Microsoft Windows路径名在选项文件中使用(正斜杠)而不是反斜杠指定。如果确实使用反斜杠,则将它们加倍:

在选项文件中,变量设置不带前导破折号:

[mysql] max_allowed_packet=16M

命令行带mysql --max_allowed_packet=16M

如果愿意,可以将变量名称中的下划线指定为破折号。以下选项组是等效的。两者都将服务器密钥缓冲区的大小设置为512MB:

[mysqld]
key_buffer_size=512M[mysqld]
key-buffer-size=512M

[mysqld]

# set basedir to your installation path

basedir=D:\\mysql

# set datadir to the location of your data directory

datadir=D:\\mydata\\data

管方网站上有这个说法,现在实际在用的时候,感觉好像都行。建议用斜杠/

这都是正确的,,官方建议值用引号括起来.

注意保存时,编码格式选择ANSI,而不是默认的UTF-8

2.数据目录初始化

在前面安装了Visual C ++ 2015可再发行组件包,下载解压mysql压缩包并改名,以及建立配置文件my.ini之后,要进行数据目录初始化操作.

这里,首先要以本机windows管理员的身份进入cmd终端窗口:

找到d盘mysql文件夹,双击打开:

点击"文件"--"打开Windows PowerShel(R)"--"以管理员身份打开Windows PowerShell(A)"

另一进入cmd命令窗口方法是:win+s,如下图,鼠标右击"",选择"以管理员身份运行".(如果win+s之后,没有看到,则手动输入cmd三个字母之后就会出现.用过了下次也会出现)

运行初始化命令:

先删除data文件夹;

mysqld --initialize --console   //带密码初始化.

-I替代--initialize效果一样:mysqld --defaults-file=d:\mysql\my.ini -I --console

(在mysql下自动建立data文件夹并复制一堆文件进去;密码最好拍照记录,防遗.)

也可以不带密码进行初始化:

mysqld --defaults-file=d:\mysql\my.ini --initialize-insecure --console

3.第一次启动mysql服务:

3.1开一cmd窗口(管理员):测试:启动mysq服务:mysqld --console

如果省略该--console选项,则服务器将诊断输出写入数据目录中的错误日志(d:\MySQL\data默认情况下)。错误日志是带有.err扩展名的文件,可以使用该--log-error 选项进行设置。

3.2开另一cmd窗口(管理员):客户端连接mysql服务:mysql -uroot -p   (-u root与-uroot等效,root为用户名)

(如果用于--initialize-insecure初始化数据目录,使用 root不带密码的方式连接到服务器 ,可以用:mysql -u root --skip-password)

3.3修改密码: ALTER USER 'root'@'localhost' IDENTIFIED BY 'root-password';

登录连接mysqld服务器之后,使用ALTER USER语句分配新 root密码,否则在客户端运行命令都会提示:ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.

注:可以在客户端窗口用cmd命令行方式:mysqladmin -u root shutdown -p 停止 服务窗口对应的mysqld服务。

D:\mysql\bin>mysqladmin -u root shutdown -p
Enter password: *****此命令调用MySQL管理实用程序 mysqladmin连接到服务器并告诉它关闭。该命令以MySQLroot用户身份连接,该 用户是MySQL授权系统中的默认管理帐户。注意
MySQL授权系统中的用户完全独立于Microsoft Windows下的任何操作系统用户。

改完密码,还不能算完,还有一步:

4.把mysql注册到windows的后台服务,并启动mysql服务:

mysqld --install mysql --defaults-file=d:\mysql\my.ini

--defaults-file=file_name

只读给定的选项文件。如果文件不存在或无法访问,则发生错误。 file_name如果给出为相对路径名而不是完整路径名,则相对于当前目录解释。

例外:即使这样--defaults-file, mysqld也会 读取 mysqld-auto.cnf

注意

如果使用了命令行,则它必须是命令行上的第一个选项,但如果服务器是使用 --defaults-fileand --install(或 --install-manual)选项启动的,则--install(or --install-manual)必须是第一个选项 。

此步可能存在的问题:

在Windows上,如果服务器使用--defaults-file和 --install选项 启动,则 --install必须先启动(排在前面)。

ok


拓展:

关于选项文件my.ini

选项文件处理顺序

Default options are read from the following files in the given order:
C:\Windows\my.ini C:\Windows\my.cnf C:\my.ini C:\my.cnf D:\mysql\my.ini D:\mysql\my.cnf

MySQL按照以下讨论中描述的顺序查找选项文件,并读取所有存在的文件。如果您要使用的选项文件不存在,请使用刚刚讨论的适当方法来创建它。

注意

有关与NDB Cluster程序一起使用的选项文件的信息,请参见 NDB Cluster的配置”。

在Windows上,MySQL程序以指定的顺序从下表中显示的文件中读取启动选项(首先读取的文件优先,随后读取的文件优先)。

表4.1在Windows系统上读取的选项文件

文件名 目的
%WINDIR%\my.ini, %WINDIR%\my.cnf 全局选项
C:\my.ini, C:\my.cnf 全局选项
BASEDIR\my.ini, BASEDIR\my.cnf 全局选项
defaults-extra-file 用指定的文件 --defaults-extra-file(如果有)
%APPDATA%\MySQL\.mylogin.cnf 登录路径选项(仅客户端)
DATADIR\mysqld-auto.cnf 系统变量使用 SET PERSIST或 SET PERSIST_ONLY保留(仅服务器)

在上表中,%WINDIR%代表Windows目录的位置。这很普遍 C:\WINDOWS。使用以下命令从WINDIR环境变量的值确定其确切位置 :

C:\> echo %WINDIR%

%APPDATA%表示Windows应用程序数据目录的值。使用以下命令从APPDATA环境变量的值确定其确切位置 :

C:\> echo %APPDATA%

BASEDIR表示MySQL基本安装目录。使用MySQL Installer安装MySQL 8.0后,通常 在该位置 代表程序目录(通常在Windows的英语版本中),请参见 “用于Windows的MySQL Installer”。 C:\PROGRAMDIR\MySQL\MySQL 8.0 ServerPROGRAMDIRProgram Files

DATADIR表示MySQL数据目录。用于查找 mysqld-auto.cnf,其默认值是MySQL编译时内置的数据目录位置,但可以通过--datadir 指定为在处理之前mysqld-auto.cnf处理的选项文件或命令行选项来更改。

本文所述mysql安装在d:\mysql,目录结构如下图:

选项文件my.ini的语法 :

在选项文件中指定选项的语法类似于命令行语法(请参见 “在命令行上使用选项”)。但是,在选项文件中,您省略了选项名称中的前两个破折号,并且每行仅指定了一个选项。例如, --quick--host=localhost 在命令行上应被指定为 quickhost=localhost 上在选项文件单独的行。要 在选项文件中指定表单 的选项,请将其写为 。 --loose-opt_nameloose-opt_name

选项文件中的空行将被忽略。非空行可以采用以下任何形式:

  • #comment, ;comment

    注释行以#或 开头;。一个#注释也可以从行的中部开始。

  • [group]

    group是要为其设置选项的程序或组的名称。在组行之后,所有选项设置行都将应用于命名组,直到给出选项文件或另一组行的末尾。选项组名称不区分大小写。

  • opt_name

    这等效 于在命令行上。 --opt_name

  • opt_name=value

    这等效 于在命令行上。在选项文件中,字符周围可以有空格,这在命令行上是不正确的。该值可以选择用单引号或双引号引起来,如果该值包含注释字符,则很有用。 --opt_name=value=#

前导和尾随空格会自动从选项名称和值中删除。

您可以使用转义序列\b, \t\n, \r\\,并 \s在选项值来表示退格,制表符,换行符,回车,回车,和空格字符。在选项文件中,适用以下转义规则:

  • 反斜杠后跟有效的转义序列字符,将转换为该序列表示的字符。例如,\s转换为空格。

  • 后面没有有效转义序列字符的反斜杠保持不变。例如, \S按原样保留。

前面的规则意味着字面反斜杠可以指定为\\,或者\好像后面没有有效的转义序列字符。

选项文件中转义序列的规则与SQL语句中字符串文字中转义序列的规则略有不同。在后一种情况下,如果 “ x”不是有效的转义序列字符,则 变为 “ ”而不是 。请参见 第9.1.1节“字符串文字”。 \xx\x

选项文件值的转义规则与Windows路径名特别相关,Windows路径名 \用作路径名分隔符。Windows路径名称中的分隔符必须像\\ 在其后跟转义序列字符一样编写。可以写为\\\不写。或者,/可以在Windows路径名中使用,并视为\。假设您要C:\Program Files\MySQL\MySQL Server 8.0在选项文件中指定的基本目录 。这可以通过几种方法完成。一些例子:

basedir="C:\Program Files\MySQL\MySQL Server 8.0"
basedir="C:\\Program Files\\MySQL\\MySQL Server 8.0"
basedir="C:/Program Files/MySQL/MySQL Server 8.0"
basedir=C:\\Program\sFiles\\MySQL\\MySQL\sServer\s8.0

如果选项组名称与程序名称相同,则该组中的选项专门适用于该程序。例如,[mysqld][mysql] 组分别适用于mysqld服务器和 mysql客户端程序。

[client]选项组是由MySQL分发提供(但所有的客户端程序读取 通过的mysqld)。要了解使用C API的第三方客户端程序如何使用选项文件,请参见mysql_options()上的C API文档 。

[client]组使您可以指定适用于所有客户端的选项。例如, [client]是用于指定用于连接服务器的密码的适当组。(但是请确保该选项文件只能由您自己访问,以便其他人无法找到您的密码。)请确保不要在该[client]组中放置一个选项,除非您使用的所有客户端程序可以识别该选项。如果尝试运行不了解该选项的程序,则在显示错误消息后退出。

首先列出更多常规选项组,然后列出更多特定组。例如,一个[client]组更为通用,因为它被所有客户端程序读取,而一个[mysqldump]组仅由mysqldump读取 。稍后指定的选项将覆盖先前指定的选项,因此将选项组置于order中[client], [mysqldump]可使 mysqldump特定的选项覆盖 [client]选项。

这是一个典型的全局选项文件:

[client]
port=3306
socket=/tmp/mysql.sock[mysqld]
port=3306
socket=/tmp/mysql.sock
key_buffer_size=16M
max_allowed_packet=128M[mysqldump]
quick

这是一个典型的用户选项文件:

[client]
# The following password is sent to all standard MySQL clients
password="my password"[mysql]
no-auto-rehash
connect_timeout=2

要创建选项组以仅由特定MySQL版本系列的mysqld服务器读取 ,请使用名称为 [mysqld-5.7], [mysqld-8.0]等的组。以下组指示该 sql_mode设置仅应由具有8.0.x版本号的MySQL服务器使用:

[mysqld-8.0]
sql_mode=TRADITIONAL

选项文件包含

可以!include在选项文件中使用指令来包括其他选项文件,并 !includedir在特定目录中搜​​索选项文件。例如,要包含 /home/mydir/myopt.cnf文件,请使用以下指令:

!include /home/mydir/myopt.cnf

要搜索/home/mydir目录并读取在此找到的选项文件,请使用以下指令:

!includedir /home/mydir

MySQL不保证目录中选项文件的读取顺序。

注意

!includedir在Unix操作系统上 使用伪指令查找和包含的任何文件 都必须具有以结尾的文件名 .cnf。在Windows上,此伪指令检查带有.ini或 .cnf扩展名的文件。

像其他选项文件一样,编写包含的选项文件的内容。也就是说,它应包含选项组,每个选项组前面都有 一行,指示选项所适用的程序。 [group]

在处理包含文件时,仅使用当前程序正在寻找的组中的那些选项。其他组将被忽略。假设 my.cnf文件包含以下行:

!include /home/mydir/myopt.cnf

并假设/home/mydir/myopt.cnf 如下所示:

[mysqladmin]
force[mysqld]
key_buffer_size=16M

如果my.cnfmysqld处理 ,则仅使用 [mysqld]in /home/mydir/myopt.cnf。如果该文件由mysqladmin处理,则仅使用该 [mysqladmin]组。如果文件由任何其他程序处理,则不/home/mydir/myopt.cnf使用in选项 。

!includedir除读取命名目录中的所有选项文件外, 该指令的处理方式相似。

如果选项文件包含!include或 !includedir指令,则在处理选项文件时,无论这些指令在文件中的位置如何,都将处理由这些指令命名的文件。

为了使包含指令起作用,不应在引号内指定文件路径,并且文件路径不应包含转义序列。例如,提供的以下语句 my.ini读取选项文件 myopts.ini

!include C:/ProgramData/MySQL/MySQL Server/myopts.ini
!include C:\ProgramData\MySQL\MySQL Server\myopts.ini
!include C:\\ProgramData\\MySQL\\MySQL Server\\myopts.ini

在Windows上,如果是文件的最后一行,请确保在末尾添加换行符。否则,将忽略该行。 !include /path/to/extra.ini

程序选项修饰符

一些选项是“ boolean ”,并控制可以打开或关闭的行为。例如, mysql客户端支持一个--column-names选项,该 选项确定是否在查询结果的开头显示一列列名。默认情况下,启用此选项。但是,在某些情况下,例如在将mysql的输出发送到另一个仅希望看到数据而不是初始标题行的程序中时,您可能希望禁用它。

要禁用列名,可以使用以下任何一种形式指定选项:

--disable-column-names
--skip-column-names
--column-names=0

--disable--skip 前缀和=0后缀都具有相同的作用:他们关闭该选项。

该选项的“启用”形式可以通过以下任何一种方式指定:

--column-names
--enable-column-names
--column-names=1

ONTRUE, OFF,和FALSE也被识别为布尔选项(不区分大小写)。

如果选项以开头--loose,则程序无法识别该选项,则不会退出并显示错误消息,而是仅发出警告:

shell> mysql --loose-no-such-option
mysql: WARNING: unknown option '--loose-no-such-option'

--loose当您在同一台计算机上运行多个MySQL安装版本的程序并在选项文件中列出选项时, 该前缀很有用。可以使用--loose前缀(或 loose在选项文件中)给出程序的所有版本可能无法识别的选项。识别该选项的程序版本会正常处理它,而无法识别该选项的版本会发出警告并忽略它。

--maximum前缀仅适用于 mysqld,并允许限制大型客户端程序可以设置会话系统变量的数量。为此,请使用--maximum带变量名的前缀。例如, --maximum-max_heap_table_size=32M防止任何客户端使堆表大小限制大于32M。

--maximum前缀旨在与具有会话值的系统变量一起使用。如果将其应用于仅具有全局值的系统变量,则会发生错误。例如,使用--maximum-back_log=200,服务器会产生以下错误:

Maximum value of 'back_log' cannot be set

关于初始化:

--initialize,选项用于通过创建数据目录并填充mysql系统模式中的表来初始化MySQL安装.(This option is used to initialize a MySQL installation by creating the data directory and populating the tables in the mysql system schema. )

-I is a synonym for --initialize.言下之意可以用-I替代--initialize,注意必须是大写i,如果是小写i的话,不能完成,并且有错误提示[Server] Can't create test file d:\MySQL\Data\mysqld_tmp_file_case_insensitive_test.lower-test等.

mysqld --initialize --user=mysql

mysqld --initialize-insecure --user=mysql

  • 使用--initialize了 “默认安全”安装(即包括生成随机初始的 root密码)。在这种情况下,密码被标记为已过期,您必须选择一个新密码。

  • 使用--initialize-insecure,不会root生成密码。这是不安全的;假定您打算在将服务器投入生产使用之前及时为帐户分配密码。

mysqld --initialize --console

mysqld --initialize-insecure --console

--console(仅Windows。)使默认错误日志目标为控制台。--console--log-error如果两者都给出,则优先 。

mysqld --defaults-file=d:\mysql\my.ini --initialize --console    //指定选项文件my.ini

mysqld --defaults-file=d:\mysql\my.ini -I --console   //用-I替代--initialize效果一样.

--initialize-insecure中就不能用-I替代--initialize了.否则会不识别--insecure,提示:unknown option '--insecure'.

mysqld --defaults-file=d:\mysql\my.ini --initialize-insecure --console

数据目录初始化期间的服务器操作

注意

服务器执行的数据目录初始化序列不能代替mysql_secure_installation和 mysql_ssl_rsa_setup执行的动作 。请参见 “ mysql_secure_installation-提高MySQL安装安全性”和 “ mysql_ssl_rsa_setup-创建SSL / RSA文件”。

当用--initialize or --initialize-insecure选项调用时 , mysqld在数据目录初始化序列期间执行以下动作:

  1. 服务器检查数据目录是否存在,如下所示:

    • 如果不存在数据目录,则服务器将创建它。

    • 如果数据目录存在但不为空(即它包含文件或子目录),则服务器将在生成错误消息后退出:

      [ERROR] --initialize specified but the data directory exists. Aborting.

      在这种情况下,请删除或重命名数据目录,然后重试。

      如果每个条目的名称都以句点(.)开头,则允许现有数据目录为非空。

  2. 服务器在数据目录中创建 mysql系统架构及其表,包括数据字典表,授权表,时区表和服务器端帮助表。请参见 “ mysql系统模式”。
  3. 服务器创建一个'root'@'localhost' 超级用户帐户和其他保留帐户(请参见 “保留帐户”)。一些保留的帐户已锁定,不能被客户端使用,但 'root'@'localhost'仅供管理使用,您应为其分配密码。

关于服务器启动:

如果mysqld没有启动,请检查错误日志以查看服务器是否在其中写入了任何消息以指示问题的原因。默认情况下,错误日志位于mysql\data目录中。该文件的后缀为.err,也可以通过传入--log-error 选项来指定。或者,您可以尝试使用该--console选项启动服务器 。在这种情况下,服务器可能会在屏幕上显示一些有用的信息以帮助解决问题。在Windows上,如果同时指定--console--log-error两者,则优先。在这种情况下,默认错误日志目标是控制台而不是文件。
命令行格式mysqld --log-error[=file_name]

关于mysqld服务启动可执行的一些选项,可以用mysqld --verbose --help查看 .

关于用户连接:

客户有两个选择。可以使用TCP / IP,或者如果服务器支持命名管道连接,则可以使用命名管道。

如果在shared_memory启用了系统变量的情况下启动服务器,则Windows版MySQL也支持共享内存连接 。客户端可以使用该--protocol=MEMORY选项通过共享内存进行连接 。

MySQL在所有Windows平台上都支持TCP / IP。如果您在named_pipe启用系统变量的情况下启动服务器,则Windows上的MySQL服务器也支持命名管道。必须明确启用此变量,因为使用命名管道时,某些用户在关闭MySQL服务器时会遇到问题。缺省情况下,无论平台如何,都使用TCP / IP,因为在许多Windows配置中,命名管道都比TCP / IP慢。

 关于建立连接的命令选项:      //Connection-Establishment Option Summary  连接建立选项摘要

Option Name Description
--default-auth Authentication plugin to use   //身份验证插件使用
--host Host on which MySQL server is located   //MySQL服务器所在的主机
--password Password to use when connecting to server  //连接服务器时使用的密码
--pipe Connect to server using named pipe (Windows only)   //使用命名管道连接到服务器(仅Windows)
--plugin-dir Directory where plugins are installed   //安装插件的目录
--port TCP/IP port number for connection   //用于连接的TCP / IP端口号
--protocol Transport protocol to use   //使用的传输协议
--shared-memory-base-name Shared-memory name for shared-memory connections (Windows only)   //共享内存连接的共享内存名称(仅Windows)
--socket Unix socket file or Windows named pipe to use   ///Unix套接字文件或Windows命名管道使用
--user MySQL user name to use when connecting to server   //连接服务器时使用的MySQL用户名
mysql --host=localhost

To force TCP/IP transport to be used instead, specify a --protocol option:  //要强制使用TCP / IP传输,请指定一个 --protocol选项:

mysql --host=localhost --protocol=TCP

The following table shows the permissible --protocol option values and indicates the applicable platforms for each value. The values are not case-sensitive.

--protocol Value Transport Protocol Used  //使用的传输协议 Applicable Platforms  //适用平台
TCP TCP/IP transport to local or remote server  //TCP / IP传输到本地或远程服务器 All
SOCKET Unix socket-file transport to local server   //Unix套接字文件传输到本地服务器 Unix and Unix-like systems
PIPE Named-pipe transport to local server  //命名管道传输到本地服务器 Windows
MEMORY Shared-memory transport to local server   //共享内存传输到本地服务器 Windows

另外参阅:“连接传输协议” Section “Connection Transport Protocols”

加密连接的命令选项

客户端程序的选项,这些选项指定是否使用到服务器的加密连接,证书和密钥文件的名称以及与加密连接支持有关的其他参数。有关建议使用的示例以及如何检查连接是否已加密的示例,请参见 “配置MySQL以使用加密的连接”。

注意

这些选项仅对使用经过加密的传输协议的连接有效。即TCP / IP和Unix套接字文件连接。请参见 “连接传输协议”

有关使用MySQL C API中的加密连接的信息,请参阅C API对加密连接的支持。

关于shared_memory

  • shared_memory

    Command-Line Format --shared-memory[={OFF|ON}]
    System Variable shared_memory
    Scope Global
    Dynamic No
    SET_VAR Hint Applies No
    Platform Specific Windows
    Type Boolean
    Default Value OFF

(Windows only.) Whether the server permits shared-memory connections.  //服务器是否允许共享内存连接。

shared_memory_base_name

Command-Line Format --shared-memory-base-name=name
System Variable shared_memory_base_name
Scope Global
Dynamic No
SET_VAR Hint Applies No
Platform Specific Windows
Type String
Default Value MYSQL

(Windows only.) The name of shared memory to use for shared-memory connections. This is useful when running multiple MySQL instances on a single physical machine. The default name is MYSQL. The name is case-sensitive.

This variable applies only if the server is started with the shared_memory system variable enabled to support shared-memory connections.

//用于共享内存连接的共享内存的名称。在单个物理计算机上运行多个MySQL实例时,这很有用。默认名称是MYSQL。名称区分大小写。

仅当服务器在shared_memory启用系统变量以支持共享内存连接的情况下启动时,此变量才适用 。

关于show engines;  //显示有关服务器的存储引擎的状态信息。

mysql> show engines;
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine             | Support | Comment                                                        | Transactions | XA   | Savepoints |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| MEMORY             | YES     | Hash based, stored in memory, useful for temporary tables      | NO           | NO   | NO         |
| MRG_MYISAM         | YES     | Collection of identical MyISAM tables                          | NO           | NO   | NO         |
| CSV                | YES     | CSV storage engine                                             | NO           | NO   | NO         |
| FEDERATED          | NO      | Federated MySQL storage engine                                 | NULL         | NULL | NULL       |
| PERFORMANCE_SCHEMA | YES     | Performance Schema                                             | NO           | NO   | NO         |
| MyISAM             | YES     | MyISAM storage engine                                          | NO           | NO   | NO         |
| InnoDB             | DEFAULT | Supports transactions, row-level locking, and foreign keys     | YES          | YES  | YES        |
| BLACKHOLE          | YES     | /dev/null storage engine (anything you write to it disappears) | NO           | NO   | NO         |
| ARCHIVE            | YES     | Archive storage engine                                         | NO           | NO   | NO         |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
9 rows in set (0.00 sec)

SHOW ENGINES 输出包含以下列:

  • Engine

    存储引擎的名称。

  • Support

    服务器对存储引擎的支持级别,如下表所示。

    含义
    YES 引擎受支持且处于活动状态
    DEFAULT 就像一样YES,这是默认引擎
    NO 不支持引擎
    DISABLED 支持引擎,但已将其禁用

    NO表示服务器在编译时不支持引擎,因此无法在运行时启用。

    的值DISABLED,因为服务器启动与关闭发动机,或者是因为不是所有的选项来启用它要求给予一个选项,无论发生。在后一种情况下,错误日志应包含指示为什么禁用该选项的原因。请参见 第5.4.2节“错误日志”。

    您可能还会看到DISABLED存储引擎,如果服务器经过编译以支持该服务器,但是该服务器是通过一个 选项启动的 。对于存储引擎,意味着服务器是在编译时支持NDB Cluster的,但未使用该选项启动。 --skip-engine_nameNDBDISABLED--ndbcluster

    所有MySQL服务器都支持MyISAM表。无法禁用MyISAM

  • Comment

    存储引擎的简要说明。

  • Transactions

    存储引擎是否支持事务。

  • XA

    存储引擎是否支持XA事务。

  • Savepoints

    存储引擎是否支持保存点。

关于编码字符集utf8mb4:

参阅https://www.cnblogs.com/rainerl/p/10950472.html

//查看数据库的编码格式:

mysql> SHOW VARIABLES Like '%char%';或者:
mysql> SHOW VARIABLES WHERE Variable_name LIKE 'character_set_%' OR Variable_name LIKE 'collation%';

     

关于MySQL中的8个 character_set 变量参看:https://blog.csdn.net/sun8112133/article/details/79921734

如果数据库、表已经创建可以直接修改数据库或表的编码格式:

查看数据表的编码格式

show create table <表名>;

修改数据库的编码格式

mysql>alter database <数据库名> character set utf8mb4;

修改数据表格编码格式

alter table <表名> character set utf8mb4;

修改字段编码格式

alter table <表名> change <字段名> <字段名> <类型> character set utf8mb4;


复习常用命令:

//修改加密方式 mysql> ALTER user 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'admin';

//刷新 mysql> flush privileges;

//修改加密规则 mysql> UPDATE mysql.user SET plugin='mysql_native_password' WHERE user='root';

//建数据create database test1;或者带反引号create database `test1`;注意不是引号.(反引号,就是键盘左上方~`,ESC键下面的那个键上)

//删除数据库drop database test1;

\q退出mysql,

例:

mysql> \q
Bye

//cmd命令查看版本:

C:\mysql\bin> mysql -V
c:\mysql\bin\mysql.exe  Ver 8.0.22 for Win64 on x86_64 (MySQL Community Server - GPL)

//登录后查看版本

select version();

//在DOS命令行窗口登录MySQL,输入如下命令查看MySQL的安装目录和数据存放目录:

mysql> select @@basedir;

mysql> select @@datadir;


windows10 mysql8.0.22忘记密码解决大法,密码搞不定,不管什么原因,不官什么提示,就按下面的方法搞一下,省时高效.

忘记密码:

简要步骤:方案一:

1.服务端:mysqld --console --skip-grant-tables --shared-memory,

2.客户端:mysql -u root -p

密码置空:update mysql.user set authentication_string='' where user="root";

刷新:flush privileges;  密码置空之后,必须,刷新一下就可以设置密码了.

3.服务端重启:ctrl+c,两次,中止之前mysqld.然后运行mysqld --console

4.客户端:mysql -u root -p

设置密码:set password for 'root'@'localhost'='123';

OK

方案二:(此法较稳妥)

1.服务端:mysqld --console --skip-grant-tables --shared-memory,

2.客户端:mysql -u root -p

密码置空:update mysql.user set authentication_string='' where user="root";

刷新:flush privileges;

3.设置密码:ALTER user 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'admin';

加密规则和密码同时改.ALTER user 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'admin';  OK

注意:密码置空之后得flush privileges刷新一下,才能修改密码.不然会提示ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement

回顾:改密码的三个命令方式:1.置空 update mysql.user set authentication_string='' where user='root';   2.alter user 'root'@'localhost' identified by 'admin'     这一句中也可带上with 加密插件名称  3.set password for 'root'@'localhost'='admin'

方案三:

用前面二个方法不成功,出现ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

这种情况主要密码安全格式要求严格所致,一般在.exe安装方式安装mysql后或执行mysql_secure_installation之后,再改密码时出现 .

关于MySQL安全配置mysql_secure_installation参看https://blog.csdn.net/qq_29627051/article/details/105390362

https://www.jb51.net/article/47727.htm

按前面的方法修改密码,至密码置空之后,用alter user user() identified by 'admin';不成功,出现错误提示:ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

根据提示信息,查看一下密码变量情况 :

1.SHOW VARIABLES LIKE 'validate_password%';

2.1重新更改密码级别:

set global validate_password.policy=0;或set global validate_password.policy=low;

注意变量名称不要打错,mysql5.7之前的变量名为validate_password_policy,后面是下划线,8.0.22的是点号.

2.2修改密码长度:set global validate_password.length=4;

3.flush privileges;

4. set password for 'root'@'localhost'='1234';或者ALTER user 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'admin';都可以.

ok

(通过set global validate_password.policy=0;和set global validate_password.length=4;两个命令所修改的变量值0、4,在重启mysql服务之后,还会恢复原值MEDIUM和8.

但修改过的密码是可以用的).




常见问题

密码修改时出现:

这是因为服务用mysqld --console --skip-grant-tables --shared-memory

客户用做过密码置空后没作刷新到磁盘的操作:flush privileges;

所以set password for 'root'@'localhost'='123';不行.

解决办法就是:服务端窗口不关,用户端运行flush privileges;刷新一下,再执行set password for 'root'@'localhost'='123';改密码,

或者服务端窗口关掉重开窗口,或者不关而是以ctrl+c中止mysqld服务,一次ctrl+c可能不行,就再一次ctrl+c,中止mysql服务,然后运行不带skip的方式重启mysql服务:mysqld --console,在用户端再执行密码修改.

update mysql.user set 语句就是用来置空密码比较好.改密码就不要用这个update开头的语句

在服务端密码置空之后,可以执行update mysql.user set authentication_string='123' where user="root";貌似修改成功,但能看得到的,则一定是不成功的,因为正常情况下是加密的.实际验证也是如此.用密码123登录不了.

并且服务端每尝试登录一次时,在服务端会出现一句提示:

[Warning] [MY-013360] [Server] Plugin sha256_password reported: ''sha256_password' is deprecated and will be removed in a future release. Please use caching_sha2_password instead'

mysql报错RuntimeError: cryptography is required for sha256_password or caching_sha2_p

解决办法,涉及加密插件的问题,直接修改插件名及密码并刷新:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'admin';

FLUSH PRIVILEGES;


加密规则和密码同时改方法:

ALTER user 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'admin';  OK

服务端运行mysqld --console --skip-grant-tables --shared-memory时,显示Plugin mysqlx reported: 'All I/O interfaces are disabled, X Protocol won't be accessible'

端口都disabled,但能连上,但不影响密码修改登录等操作.原因是带有--skip-grant-tables --shared-memory这个参数.

D:\>mysqld --console --skip-grant-tables --shared-memory
2020-11-12T22:57:36.424371Z 0 [System] [MY-010116] [Server] D:\mysql\bin\mysqld.exe (mysqld 8.0.22) starting as process 12692
2020-11-12T22:57:36.443671Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2020-11-12T22:57:36.903812Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
2020-11-12T22:57:37.114523Z 0 [Warning] [MY-011311] [Server] Plugin mysqlx reported: 'All I/O interfaces are disabled, X Protocol won't be accessible'
2020-11-12T22:57:37.184229Z 0 [Warning] [MY-010068] [Server] CA certificate ca.pem is self signed.
2020-11-12T22:57:37.186985Z 0 [System] [MY-013602] [Server] Channel mysql_main configured to support TLS. Encrypted connections are now supported for this channel.
2020-11-12T22:57:37.213365Z 0 [System] [MY-010931] [Server] D:\mysql\bin\mysqld.exe: ready for connections. Version: '8.0.22'  socket: ''  port: 0  MySQL Community Server - GPL.
2020-11-13T00:29:41.380805Z 0 [System] [MY-013105] [Server] D:\mysql\bin\mysqld.exe: Normal shutdown.

mysqld –skip-grant-tables实测在mysql8.0中已失效,现使用mysqld --console --skip-grant-tables --shared-memory

如果带--skip句但不带 --shared-memory会出现TCP/IP, --shared-memory, or --named-pipe should be configured on NT OS

则有:D:\>mysqld --console --skip-grant-tables
2020-11-13T00:32:36.846987Z 0 [System] [MY-010116] [Server] D:\mysql\bin\mysqld.exe (mysqld 8.0.22) starting as process 10644
2020-11-13T00:32:36.865672Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2020-11-13T00:32:37.661463Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
2020-11-13T00:32:37.896336Z 0 [Warning] [MY-011311] [Server] Plugin mysqlx reported: 'All I/O interfaces are disabled, X Protocol won't be accessible'
2020-11-13T00:32:37.965989Z 0 [Warning] [MY-010068] [Server] CA certificate ca.pem is self signed.
2020-11-13T00:32:37.968691Z 0 [System] [MY-013602] [Server] Channel mysql_main configured to support TLS. Encrypted connections are now supported for this channel.
2020-11-13T00:32:37.994257Z 0 [System] [MY-010931] [Server] D:\mysql\bin\mysqld.exe: ready for connections. Version: '8.0.22'  socket: ''  port: 0  MySQL Community Server - GPL.
2020-11-13T00:32:37.998367Z 0 [ERROR] [MY-010131] [Server] TCP/IP, --shared-memory, or --named-pipe should be configured on NT OS
2020-11-13T00:32:38.001076Z 0 [ERROR] [MY-010119] [Server] Aborting
2020-11-13T00:32:38.882412Z 0 [ERROR] [MY-013183] [InnoDB] Assertion failure: trx0sys.cc:661:UT_LIST_GET_LEN(trx_sys->mysql_trx_list) == 0 thread 11404
InnoDB: We intentionally generate a memory trap.
InnoDB: Submit a detailed bug report to http://bugs.mysql.com.
InnoDB: If you get repeated assertion failures or crashes, even
InnoDB: immediately after the mysqld startup, there may be
InnoDB: corruption in the InnoDB tablespace. Please refer to
InnoDB: http://dev.mysql.com/doc/refman/8.0/en/forcing-innodb-recovery.html
InnoDB: about forcing recovery.
00:32:38 UTC - mysqld got exception 0x80000003 ;
Most likely, you have hit a bug, but this error can also be caused by malfunctioning hardware.
Thread pointer: 0x0
Attempting backtrace. You can use the following information to find out
where mysqld died. If you see no messages after this, something went
terribly wrong...
7ff63fe0ff62    mysqld.exe!my_sigabrt_handler()[my_thr_init.cc:372]
7ffb29b2caad    ucrtbase.dll!raise()
7ffb29b2dab1    ucrtbase.dll!abort()
7ff6400375a0    mysqld.exe!ut_dbg_assertion_failed()[ut0dbg.cc:98]
7ff63fff9666    mysqld.exe!trx_sys_after_background_threads_shutdown_validate()[trx0sys.cc:661]
7ff63ff41263    mysqld.exe!srv_shutdown_cleanup_and_master_stop()[srv0start.cc:3348]
7ff63ff40917    mysqld.exe!srv_shutdown()[srv0start.cc:3558]
7ff63fef348e    mysqld.exe!innodb_shutdown()[ha_innodb.cc:1345]
7ff63ee6aed7    mysqld.exe!ha_finalize_handlerton()[handler.cc:722]
7ff63ee7b42a    mysqld.exe!plugin_deinitialize()[sql_plugin.cc:1116]
7ff63ee809d2    mysqld.exe!reap_plugins()[sql_plugin.cc:1187]
7ff63ee7f6c8    mysqld.exe!plugin_shutdown()[sql_plugin.cc:2031]
7ff63ee1e003    mysqld.exe!clean_up()[mysqld.cc:2427]
7ff63ee30366    mysqld.exe!unireg_abort()[mysqld.cc:2296]
7ff63ee2efa4    mysqld.exe!setup_conn_event_handler_threads()[mysqld.cc:3120]
7ff63ee321b2    mysqld.exe!win_main()[mysqld.cc:7468]
7ff63ee2bf55    mysqld.exe!mysql_service()[mysqld.cc:7564]
7ff63ee2c59c    mysqld.exe!mysqld_main()[mysqld.cc:7780]
7ff640443d28    mysqld.exe!__scrt_common_main_seh()[exe_common.inl:288]
7ffb2b507c24    KERNEL32.DLL!BaseThreadInitThunk()
7ffb2bf4cea1    ntdll.dll!RtlUserThreadStart()
The manual page at http://dev.mysql.com/doc/mysql/en/crashing.html contains
information that should help you find out what is causing the crash.

D:\>

解决办法是在my.ini文件中[mysqld]下加入shared-memory

而带了就可以:D:\>mysqld --console --skip-grant-tables --shared-memory
2020-11-13T00:34:12.062707Z 0 [System] [MY-010116] [Server] D:\mysql\bin\mysqld.exe (mysqld 8.0.22) starting as process 6508
2020-11-13T00:34:12.082022Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2020-11-13T00:34:12.912690Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
2020-11-13T00:34:13.185694Z 0 [Warning] [MY-011311] [Server] Plugin mysqlx reported: 'All I/O interfaces are disabled, X Protocol won't be accessible'
2020-11-13T00:34:13.256012Z 0 [Warning] [MY-010068] [Server] CA certificate ca.pem is self signed.
2020-11-13T00:34:13.258642Z 0 [System] [MY-013602] [Server] Channel mysql_main configured to support TLS. Encrypted connections are now supported for this channel.
2020-11-13T00:34:13.285092Z 0 [System] [MY-010931] [Server] D:\mysql\bin\mysqld.exe: ready for connections. Version: '8.0.22'  socket: ''  port: 0  MySQL Community Server - GPL.

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to

mysql错误4200系列有很多,可参考:

mysql错误代码对照表https://blog.csdn.net/aidenliu/article/details/5925604

1064也有多种情况,常见的是语法格式错误,比如新建数据库时,最易出错是数据库的名称是用键盘左上角处`~键上的那个反引号`,通常会输入',导致出错.

在建数据时,库名不带任何引号也是可以的(8.0.22上没问题)

修改密码时出现ERROR 1819 (HY000): Your password does not satisfy the current policy requirements


这种情况主要密码安全格式要求严格所致,一般在.exe安装方式安装mysql后或执行mysql_secure_installation之后,再改密码时出现 .

(关于MySQL安全配置mysql_secure_installation参看https://www.jb51.net/article/47727.htm)

1.SHOW VARIABLES LIKE 'validate_password%';

2.1重新更改密码级别:

set global validate_password.policy=0;或set global validate_password.policy=low;

注意变量名称不要打错,mysql5.7之前的变量名为validate_password_policy,后面是下划线,8.0.22的是点号.

2.2修改密码长度:set global validate_password.length=4;

3.flush privileges;

4. set password for 'root'@'localhost'='1234';或者ALTER user 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'admin';都可以.

ok

通过set global validate_password.policy=0;和set global validate_password.length=4;两个命令所修改的变量值0、4,在重启mysql服务之后,还会恢复原值MEDIUM和8.

但修改过的密码是可以用的.(大概是不溯既往吧.)

还可使用 mysql_secure_installation 命令修改root密码

关于MySQL安全配置mysql_secure_installation参看https://www.jb51.net/article/47727.htm

扩展:关于MySQL中的8个 character_set 变量说明https://blog.csdn.net/sun8112133/article/details/79921734  (在运行mysql_secure_installation时,出现提示:mysql_secure_installation: [ERROR] unknown variable 'default-character-set=utf8mb4'.
解决办法:在my.ini文件中,注释掉那句[mysql]default-character-set=utf8mb4即可.似乎用不到该句,

[mysql]
# 设置mysql客户端默认字符集
# default-character-set=utf8mb4  //>mysql_secure_installation提示mysql_secure_installation: [ERROR] unknown variable 'default-character-set=utf8mb4'.

在服务端有一句就行了:# 服务端使用的字符集默认为utf8mb4
[mysqld]

character-set-server=utf8mb4

)

客户端:mysql_secure_installation;

参见:https://blog.csdn.net/weixin_45625174/article/details/106447654:

  • 运行mysql_secure_install需执行几个设置:
  • root用户设置密码
  • 删除匿名账号
  • 删除test库和test库的访问权限
  • 刷新授权表使修改生效

通过设置这几项能够提高MySQL的安全性,建议生成环境中安装完成MySQL一定要执行“mysql_secure_install

实例:

[root@www ~]# mysql_secure_installation
Enter password for user root:                      ----输入MySQLroot密码
The 'validate_password' plugin is installed on the server.
The subsequent steps will run with the existing configuration
of the plugin.
Using existing password for root.Estimated strength of the password: 50
Change the password for root ? ((Press y|Y for Yes, any other key for No) :No-----是否修改root密码,如果输入y会要求修改密码,这设置No不修改密码... skipping.
By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment.Remove anonymous users? (Press y|Y for Yes, any other key for No) :y --是否删除匿名用户,这里建议删除。
Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y  --是否禁止root远程登陆,这里建议禁止。
Success.By default, MySQL comes with a database named 'test' that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y ----是否删除test库,y删除。- Dropping test database...
Success.- Removing privileges on test database...
Success.Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y  --是否重新加载权限表,y重新加载。
Success.All done! 

进入mysql后需要改全局变量,要不然设置密码要符合密码复杂度。

参阅:MySQL 重新安装踩的坑https://blog.csdn.net/shaxixide/article/details/104312878

一、查看、解除占用3306端口的进程

netstat  -aon|findstr 3306

二、记住这个pid号


三、ctrl +shift+esc调出任务管理器

找到该pid对应的任务,"结束任务"

ok


忘记密码,解决办法详细版,如下:

以管理员方式

打开shell窗口

首先开一窗口A运行服务端

mysqld -remove mysql  (删除mysql服务)

taskkill /f /im mysqld.exe   删除mysqld进程

mysqld --console --skip-grant-tables --shared-memory    跳过权限表启动服务(这样不必去修改my.ini)

开一窗口B

1.登录

D:\mysql\bin>mysql -u root -p

查询

use mysql;
select host,user,plugin from user;  这两句等价于select host,user,plugin from mysql.user;
mysql> select host,user,plugin from mysql.user;

2.置密码为空

mysql> UPDATE mysql.user SET authentication_string='' WHERE user='root' and host='localhost';  //置空,两个单引号,之间无空格,看起来象一个双引号.

3.刷新

mysql> flush privileges;

查看密码置空效果:

mysql> select host,user,user password,plugin,authentication_string from mysql.user;

注:8.0.22保存密码的字段为authentication_strin
这里的password看着是一个字段,但select password不会显示,会报错,其对就的是user password.

在这里似乎不能用update的方式来增加密码,试了,电脑好长时间无回馈.

此时空密码状态下,改变密码可用ALTER user 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'admin';

注意 特别提醒注意的一点是,新版的mysql数据库下的user表中已经没有Password字段了 而是将加密后的用户密码存储于authentication_string字段。

4.修改密码

加密规则和密码同时改.ALTER user 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'admin';  OK

(ALTER user 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'admin';这个加密对应插件是用caching_sha2_password)

此时再查看

mysql> select host,user,user password,plugin,authentication_string from mysql.user;

密码admin是经过加密之后内容,看不懂才正常.不是明语文显示.

5.alter user user() identified by "admin";也可以修改密码.

如果修改当前登录身份的密码直接用alter user user() identified by "123";有时也可以.

但是

有时ALTER user user() IDENTIFIED BY 'admin';

会提示出错

:

ERROR 1396 (HY000): Operation ALTER USER failed for 'root'@'skip-grants host'

刷新也无用.

而用ALTER user 'root'@'localhost' IDENTIFIED BY 'admin';或者ALTER user 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'admin';可以.

所以,稳妥点还是多打几个字用有@的比用user()效果好.

特殊例外:用上述方法修改密码出现ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

这种情况主要密码安全格式要求严格所致,一般在.exe安装方式安装mysql后或执行mysql_secure_installation之后,再改密码时出现 .

关于MySQL安全配置mysql_secure_installation参看https://blog.csdn.net/qq_29627051/article/details/105390362

https://www.jb51.net/article/47727.htm

按前面的方法修改密码,至密码置空之后,用alter user user() identified by 'admin';不成功,出现错误提示:ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

根据提示信息,查看一下密码变量情况 :SHOW VARIABLES LIKE 'validate_password%';

           关于密码要求参考:  

密码级别变量validate_password.policy为medium,

重新更改密码级别:

set global validate_password.policy=0;或set global validate_password.policy=low;

注意变量名称不要打错,mysql5.7之前的变量名为validate_password_policy,后面是下划线,8.0.22的是点号.

再次修改密码:

还是出错,再看密码变量值:show variables like 'validate_password%';

密码长度不合格,再修改下长度:set global validate_password.length=4;

再次修改密码:(须flush privileges;刷新之后再修改密码才行.)

(通过set global validate_password.policy=0;和set global validate_password.length=4;两个命令所修改的变量值0、4,在重启mysql服务之后,还会恢复原值MEDIUM和8.

但修改过的密码是可以用的).



RESTART语句

RESTAR

该语句停止并重新启动MySQL服务器。它需要SHUTDOWN特权。

一种用途RESTART是在无法或不方便通过命令行访问服务器主机上的MySQL服务器以重新启动它时。例如, SET PERSIST_ONLY可以在运行时用于对只能在服务器启动时设置的系统变量进行配置更改,但是仍必须重新启动服务器才能使这些更改生效。该 RESTART语句提供了一种从客户端会话中执行此操作的方法,而无需在服务器主机上进行命令行访问。

注意

执行RESTART 语句后,客户端可以期望当前连接丢失。如果启用了自动重新连接,则在服务器重新启动后将重新建立连接。否则,必须手动重新建立连接。

成功的RESTART操作要求mysqld在具有监视过程的环境中运行,该监视过程可用于检测出于重启目的而执行的服务器关闭:

  • 在存在监视进程的情况下, RESTART导致 mysqld终止,以便监视进程可以确定它应该启动一个新的 mysqld实例。

  • 如果没有监视过程,则 RESTART失败并显示错误。

注:8.0之后,下面这个改密码的语法格式不再有效,而换为其他方式了.

The PASSWORD() function. Additionally, PASSWORD() removal means that SET PASSWORD ... = PASSWORD('auth_string') syntax is no longer available.

show databases;

+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+

update mysql.user set authentication_string="123" where user="root";    #表示密码字段

拓展:

注意

尝试连接到主机127.0.0.1 通常会解析为该localhost帐户。但是,如果服务器在skip_name_resolve启用状态下运行,则此操作将失败 。如果您打算这样做,请确保存在一个可以接受连接的帐户。例如,要能够root使用 --host=127.0.0.1或 进行连接 --host=::1,请创建以下帐户:

CREATE USER 'root'@'127.0.0.1' IDENTIFIED BY 'root-password';
CREATE USER 'root'@'::1' IDENTIFIED BY 'root-password';

可以将这些语句放在要使用init_file 系统变量执行的文件中,如 数据目录初始化期间的服务器操作中所述。

安装最新mysql 8.0.22在windows10相关推荐

  1. mysql 8.0.22_最新版MySQL 8.0.22下载安装超详细教程(Windows 64位)

    前言 前几天下载安装了最新版的MySQL 8.0.22,遇到了不少问题,参考了一些方法,最终得以解决.今天将自己的安装过程记录下来,希望对各位有所帮助. 一.MySQL 8.0.22官网下载 点击进入 ...

  2. 用最新MySQL 8.0的源安装MySQL 5.7版本(CentOS 7环境下)

    起因: 从官网下了MySQL最新8.0版本的源,安装了MySQL 8.0.13,但是发现版本太新了跟其他软件不兼容,而且改了半天其他软件配置都没改好(囧rz)...算了,卸载了8.0,还是安回5.7的 ...

  3. ubuntu 安装docker mysql 8.0.28

    ubuntu 安装docker mysql 8.0.28 1. ubuntu 版本信息更新系统 webrx@us:~$ sudo apt update [sudo] webrx 的密码: 命中:1 h ...

  4. 国行 iPhone 12/Pro/Max双卡模式支持5G网络;支付宝推出「晚点付」功能;MySQL 8.0.22 GA|极客头条

    整理 | 郑丽媛 头图 | CSDN 下载自东方 IC 「极客头条」-- 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极客头条」来啦,快来看今天都有哪些值得我们技术人关注的重要新闻吧. 国内 ...

  5. mysql8.2安装教程_mysql 8.0.22压缩包完整安装与配置教程图解(亲测安装有效)

    1.下载zip安装包 点击此处下载MySQL server 8.0.22压缩包 下载后直接解压即可 2.解压,并配置环境变量 2.1 解压zip包到安装目录,我的解压在了D:MySQLmysql-8. ...

  6. mysql8导入 psc 没有数据_新特性解读 | MySQL 8.0.22 任意格式数据导入

    作者:杨涛涛 资深数据库专家,专研 MySQL 十余年.擅长 MySQL.PostgreSQL.MongoDB 等开源数据库相关的备份恢复.SQL 调优.监控运维.高可用架构设计等.目前任职于爱可生, ...

  7. 《MySQL 8.0.22执行器源码分析(4.1)Item_sum类以及聚合》

    Item_sum类用于SQL聚合函数的特殊表达式基类. 这些表达式是在聚合函数(sum.max)等帮助下形成的.item_sum类也是window函数的基类. 聚合函数(Aggregate Funct ...

  8. 《MySQL 8.0.22执行器源码分析(3.2)关于HashJoinIterator》

    在本文章之前,应该了解的概念: 连接的一些概念.NLJ.BNL.HashJoin算法. 目录 关于join连接 probe行保存概念 Hashjoin执行流程(十分重要) HashJoinIterat ...

  9. 在mysql 8.0.22 运行load data local 从本地文本导入数据

    在mysql 8.0.22 运行load data local 从本地文本导入数据时,报错:"ERROR 3948(42000): Loading local data is disable ...

最新文章

  1. mysql 快捷查询数据库各表占用空间,mysql查看索引占用空间,mysql查看数据占用空间
  2. Ubuntu开启防火墙
  3. 学习C++,知识点太多记不住怎么办?
  4. php删除第一个字母,php – 正在上传的文件将第一个字母切断
  5. python一个对象只能被一个变量引用吗_Python中的变量、对象、引用
  6. Destoon数据库配置文件在哪_SpringBoot中yml配置文件说明和一些常用配置项说明
  7. 数据结构——红黑树(red-black tree)
  8. 【sklearn第十四讲】决策树之分类篇
  9. 仿百篮应用市场(已开源)
  10. 阶段5 3.微服务项目【学成在线】_day02 CMS前端开发_20-CMS前端页面查询开发-页面原型-页面内容完善...
  11. MFC粉丝(mfcclub)全自动抢购过程(自动识别输入验证码)
  12. Spyder的安装与汉化
  13. TearDrop代码编程与SOCKET应用实例
  14. windows下bat脚本实现定时删除指定文件夹下的文件和文件夹
  15. 异次元店铺 - 最适合你的个人店铺系统源码(原荔枝发卡)
  16. 柱状图python_鬼灭之刃:鬼杀队九柱实力排行,霞柱是强弱分界线
  17. IT视频教程百度云盘链接分享
  18. 山东大学中外合作计算机专业,山东大学威海分校计算机专业
  19. 网络数据的背后——网络日志的分析指标
  20. LiveData Coroutine Builder的5个诡计

热门文章

  1. uniapp封装require
  2. 解决IE主页增加网址,出现“由于网络连接问题,无法将你的主页更改为…”问题~亲测有效
  3. (产品贴)百度手机卫士竞品分析报告
  4. [转载] $CF290E$ 题解
  5. 基于W801和Helix解码库的MP3播放器(W801单片机学习笔记)热血沸腾,流畅播放
  6. u盘是计算机储存设备吗,U盘存储器是哪种存储类型?
  7. Drawable的详细使用分析
  8. hotspot源码下载
  9. .val()和.value的区别
  10. QT5-实现小球运动碰撞