mysql-8.0.18免安装版安装过程
解压到指定目录,我是D:\Program Files\mysql-8.0.18-winx64
安装会用到的重要命令:后边会有更详细说明
初始化安装:
bin\mysqld --initialize --console //root会有密码,注意执行后的第四行,会显示密码,要记住. bin\mysqld --initialize-insecure --console //root无密码
bin\mysqld --console //启动服务器 启动后不要关掉cmd,否则启动会终止
mysqladmin"-u root shutdown //关闭服务器
mysqld --install-manual //安装成windows 服务,手动启动方式
mysqld --remove //删除服务
sc delete mysql //另一种删除服务方法
net start mysql net stop mysql //启动或停止服务
mysql -u root --skip-password //无密码登录
mysql -u root -p //输入密码登录
使用默认分配的密码(即diK3i1dH=k8b)进行登录
mysql -uroot -pdiK3i1dH=k8b
登录成功后,修改密码为password
alter user root@localhost identified by '新密码';
刷新一下即可
flush privileges;
[mysqld]
# 设置3306端口
port=3306
# 设置mysql的安装目录
basedir=D:\Program Files\mysql-8.0.18-winx64
# 设置mysql数据库的数据的存放目录
datadir=D:\Program Files\mysql-8.0.18-winx64\Database
# 允许最大连接数
max_connections=200
# 允许连接失败的次数。这是为了防止有人从该主机试图攻击数据库系统
max_connect_errors=10
# 服务端使用的字符集默认为UTF8
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# 默认使用“mysql_native_password”插件认证
default_authentication_plugin=mysql_native_password
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8
[client]
# 设置mysql客户端连接服务端时默认使用的端口
port=3306
default-character-set=utf8
6.2.8添加帐户,分配特权和删除帐户
CREATE USER并 DROP USER创建和删除帐户。
//创建用户
CREATE USER 'admin'@'%'
IDENTIFIED BY 'admin';
//分配所有权限
GRANT ALL
ON *.*
TO 'admin'@'%'
WITH GRANT OPTION;
//显示权限
SHOW GRANTS FOR 'admin'@'%';
6.2.8添加帐户,分配特权和删除帐户
要管理MySQL帐户,请使用用于此目的的SQL语句:
帐户管理语句使服务器对基础授权表进行适当的修改,这在第6.2.3节“授权表”中进行了讨论。
注意
不建议 使用,,或 等语句直接修改授权表 INSERT, 风险自负。服务器可以随意忽略由于此类修改而导致格式错误的行。 UPDATEDELETE
对于修改授权表的任何操作,服务器都会检查该表是否具有预期的结构,如果没有,则会产生错误。要将表更新为预期的结构,请执行MySQL升级过程。请参见 第2.11节“升级MySQL”。
创建帐户的另一种方法是使用GUI工具MySQL Workbench。另外,一些第三方程序提供了MySQL帐户管理功能。phpMyAdmin是这样的程序之一。
本节讨论以下主题:
有关此处讨论的对帐单的其他信息,请参见第13.7.1节“帐户管理对帐单”。
创建帐户和授予特权
以下示例显示了如何使用 mysql客户端程序来设置新帐户。这些示例假定MySQL root 帐户具有该CREATE USER 特权以及它授予其他帐户的所有特权。
在命令行上,以MySQL root用户身份连接到服务器 ,并在密码提示符下提供适当的密码:
shell> mysql -u root -p Enter password: (enter root password here)
连接到服务器后,您可以添加新帐户。以下示例使用CREATE USER and GRANT语句设置四个帐户(在此处看到 ,用适当的密码替换): 'password'
CREATE USER 'finley'@'localhost' IDENTIFIED BY 'password'; GRANT ALL ON *.* TO 'finley'@'localhost' WITH GRANT OPTION; CREATE USER 'finley'@'%.example.com' IDENTIFIED BY 'password'; GRANT ALL ON *.* TO 'finley'@'%.example.com' WITH GRANT OPTION; CREATE USER 'admin'@'localhost' IDENTIFIED BY 'password'; GRANT RELOAD,PROCESS ON *.* TO 'admin'@'localhost'; CREATE USER 'dummy'@'localhost';
这些语句创建的帐户具有以下属性:
'finley'@'localhost'如果存在的匿名用户帐户,则 该帐户是必需的 localhost。如果没有该 'finley'@'localhost'帐户,finley则从本地主机进行连接时,该匿名用户帐户将具有优先权 , finley并被视为匿名用户。原因是匿名用户帐户的Host列值比该 'finley'@'%'帐户更具体,因此在user表排序顺序中排在较早的位置。(有关user表排序的信息,请参见第6.2.6节“访问控制,阶段1:连接验证”。)
前面的示例在全局级别授予特权。下一个示例创建三个帐户,并授予他们较低级别的访问权限;即针对特定数据库或数据库中的对象。每个帐户的用户名均为 custom,但主机名部分有所不同:
CREATE USER 'custom'@'localhost' IDENTIFIED BY 'password'; GRANT ALL ON bankaccount.* TO 'custom'@'localhost'; CREATE USER 'custom'@'host47.example.com' IDENTIFIED BY 'password'; GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP ON expenses.* TO 'custom'@'host47.example.com'; CREATE USER 'custom'@'%.example.com' IDENTIFIED BY 'password'; GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP ON customer.addresses TO 'custom'@'%.example.com';
这三个帐户可以如下使用:
检查帐户特权和属性
要查看帐户的特权,请使用 SHOW GRANTS:
mysql> SHOW GRANTS FOR 'admin'@'localhost'; +-----------------------------------------------------+ | Grants for admin@localhost | +-----------------------------------------------------+ | GRANT RELOAD, PROCESS ON *.* TO 'admin'@'localhost' | +-----------------------------------------------------+
要查看帐户的非特权属性,请使用 SHOW CREATE USER:
mysql> SET print_identified_with_as_hex = ON; mysql> SHOW CREATE USER 'admin'@'localhost'\G *************************** 1. row *************************** CREATE USER for admin@localhost: CREATE USER 'admin'@'localhost' IDENTIFIED WITH 'caching_sha2_password' AS 0x24412430303524301D0E17054E2241362B1419313C3E44326F294133734B30792F436E77764270373039612E32445250786D43594F45354532324B6169794F47457852796E32 REQUIRE NONE PASSWORD EXPIRE DEFAULT ACCOUNT UNLOCK PASSWORD HISTORY DEFAULT PASSWORD REUSE INTERVAL DEFAULT PASSWORD REQUIRE CURRENT DEFAULT
启用 print_identified_with_as_hex 系统变量(自MySQL 8.0.17起可用)会导致 SHOW CREATE USER将包含不可打印字符的哈希值显示为十六进制字符串而不是常规字符串文字。
撤销帐户特权
要撤消帐户特权,请使用以下 REVOKE语句。可以在不同级别撤销特权,就像可以在不同级别授予特权一样。
撤销全局特权:
REVOKE ALL ON *.* FROM 'finley'@'%.example.com'; REVOKE RELOAD ON *.* FROM 'admin'@'localhost';
撤消数据库级特权:
REVOKE CREATE,DROP ON expenses.* FROM 'custom'@'host47.example.com';
撤消表级特权:
REVOKE INSERT,UPDATE,DELETE ON customer.addresses FROM 'custom'@'%.example.com';
要检查特权撤销的效果,请使用 SHOW GRANTS:
mysql> SHOW GRANTS FOR 'admin'@'localhost'; +---------------------------------------------+ | Grants for admin@localhost | +---------------------------------------------+ | GRANT PROCESS ON *.* TO 'admin'@'localhost' | +---------------------------------------------+
删除帐户
要删除帐户,请使用以下DROP USER语句。例如,删除一些先前创建的帐户:
DROP USER 'finley'@'localhost'; DROP USER 'finley'@'%.example.com'; DROP USER 'admin'@'localhost'; DROP USER 'dummy'@'localhost';
6.2.14分配帐户密码
连接到MySQL服务器的客户端所需的凭据可以包括密码。本节介绍如何为MySQL帐户分配密码。
MySQL将凭据存储在系统数据库的user表中mysql。分配或修改密码的操作仅允许具有以下CREATE USER特权的用户使用 ,或者具有mysql 数据库INSERT特权(创建新帐户的UPDATE 特权,修改现有帐户的特权)的用户。如果read_only启用了 系统变量,则使用帐户修改语句,例如 CREATE USER或, ALTER USER另外需要CONNECTION_ADMIN或 SUPER特权。
此处的讨论仅汇总了最常见的密码分配语句的语法。有关其他可能性的完整详细信息,请参见第13.7.1.3节“创建用户语法”, 第13.7.1.1节“ ALTER USER语法”和第13.7.1.10节“ SET PASSWORD语法”。
MySQL使用插件执行客户端身份验证;请参见 第6.2.17节“可插入身份验证”。在密码分配语句中,与帐户关联的身份验证插件执行指定的明文密码所需的任何散列。这样,MySQL可以先对密码进行混淆处理,然后再将其存储在mysql.user系统表中。对于此处描述的语句,MySQL自动对指定的密码进行哈希处理。还有用于的语法CREATE USER,ALTER USER它允许按字面值指定散列值。有关详细信息,请参见这些语句的描述。
要在创建新帐户时分配密码,请使用 CREATE USER并包含一个 IDENTIFIED BY子句:
CREATE USER 'jeffrey'@'localhost' IDENTIFIED BY 'password';
CREATE USER还支持用于指定帐户身份验证插件的语法。请参见 第13.7.1.3节“创建用户语法”。
要为现有帐户分配或更改密码,请将该 ALTER USER语句与以下IDENTIFIED BY子句一起使用 :
ALTER USER 'jeffrey'@'localhost' IDENTIFIED BY 'password';
如果您不是以匿名用户身份连接的,则可以更改自己的密码,而无需直接命名自己的帐户:
ALTER USER USER() IDENTIFIED BY 'password';
要从命令行更改帐户密码,请使用 mysqladmin命令:
mysqladmin -u user_name -h host_name password "password"
针对该命令设置密码的帐户是一个用在一排mysql.user匹配系统表user_name中的 User列和客户端主机从中连接在Host 列。
警告
使用mysqladmin设置密码应该被认为是不安全的。在某些系统上,密码对系统状态程序(例如ps)可见,其他用户可能会调用该密码 来显示命令行。MySQL客户端通常在初始化序列期间用零覆盖命令行密码参数。但是,仍然有一个短暂的时间间隔,在此间隔内该值是可见的。同样,在某些系统上,这种覆盖策略无效,并且ps仍然可以看到密码。(SystemV Unix系统以及其他系统可能会遇到此问题。)
如果您使用的是MySQL复制,请注意,当前,复制从设备用作CHANGE MASTER TO语句一部分的密码 长度实际上限制为32个字符;如果密码较长,则多余的字符将被截断。这并不是由于MySQL Server通常施加的任何限制,而是MySQL复制所特有的问题。(有关更多信息,请参见Bug#43439。)
官方帮助文档:关键时候很有用
https://dev.mysql.com/doc/refman/8.0/en/user-names.html
2.10.1初始化数据目录
安装MySQL之后,必须初始化数据目录,包括mysql系统模式中的表:
本节介绍如何为不是自动进行数据目录初始化的MySQL安装方法手动初始化数据目录。有关建议的一些命令,这些命令可以测试服务器是否可访问并且是否正常运行,请参见第2.10.3节“测试服务器”。
注意
在MySQL 8.0中,默认的身份验证插件已从更改 mysql_native_password为 caching_sha2_password,并且 'root'@'localhost'管理帐户caching_sha2_password默认使用。如果您希望该root帐户使用以前的默认身份验证插件(mysql_native_password),请参阅 caching_sha2_password和根管理帐户。
数据目录初始化概述
在此处显示的示例中,服务器旨在在mysql登录帐户的用户ID下运行。如果不存在该帐户,请创建该帐户(请参阅 创建mysql用户和组),或替换您计划用于运行服务器的其他现有登录帐户的名称。
cd /usr/local/mysql
在目录中,您将找到几个文件和子目录,包括bin 包含服务器以及客户端和实用程序的子目录。
mkdir mysql-files
授予目录用户和组所有权给 mysql用户和mysql 组,并设置适当的目录权限:
chown mysql:mysql mysql-files chmod 750 mysql-files
bin/mysqld --initialize --user=mysql
有关命令的重要信息,尤其是有关您可能使用的命令选项的信息,请参阅《 数据目录初始化过程》。有关服务器如何执行初始化的详细信息,请参阅《 数据目录初始化期间的服务器操作》。
通常,仅在首次安装MySQL之后才需要进行数据目录初始化。(要升级到现有安装,请执行升级过程;请参见 第2.11节“升级MySQL”。)但是,初始化数据目录的命令不会覆盖任何现有mysql模式表,因此在任何情况下都可以安全运行。
bin/mysql_ssl_rsa_setup
有关更多信息,请参见 第4.4.3节“ mysql_ssl_rsa_setup-创建SSL / RSA文件”。
数据目录初始化过程
将位置更改为MySQL安装的顶级目录,通常是 /usr/local/mysql(根据需要调整系统的路径名):
cd /usr/local/mysql
要初始化数据目录,请使用 或 选项调用 mysqld,这取决于您是希望服务器为该 帐户生成随机初始密码,还是创建不包含密码的帐户: --initialize--initialize-insecure'root'@'localhost'
有关分配新 'root'@'localhost'密码的说明,请参阅 初始化后根密码分配。
注意
服务器将任何消息(包括任何初始密码)写入其标准错误输出。这可能会重定向到错误日志,因此,如果您没有在屏幕上看到消息,请查看那里。有关错误日志(包括错误日志的位置)的信息,请参见第5.4.2节“错误日志”。
在Windows上,使用--console 选项将消息定向到控制台。
在Unix和类似Unix的系统上,mysql登录目录拥有数据库目录和文件很重要, 这样服务器在以后运行时对其具有读写访问权限。为了确保这一点,请从系统 帐户启动mysqldroot并包括--user如下所示的 选项:
bin/mysqld --initialize --user=mysql bin/mysqld --initialize-insecure --user=mysql
或者,以身份登录时执行mysqldmysql,在这种情况下,您可以--user从命令中省略该 选项。
在Windows上,使用以下命令之一:
bin\mysqld --initialize --console bin\mysqld --initialize-insecure --console
注意
如果缺少所需的系统库,则数据目录初始化可能会失败。例如,您可能会看到如下错误:
bin/mysqld: error while loading shared libraries: libnuma.so.1: cannot open shared object file: No such file or directory
如果发生这种情况,您必须手动或使用系统的程序包管理器安装缺少的库。然后重试数据目录初始化命令。
可能有必要指定其他选项,例如, --basedir或者 --datadir如果 mysqld无法为安装目录或数据目录标识正确的位置。例如(单行输入命令):
bin/mysqld --initialize --user=mysql --basedir=/opt/mysql/mysql --datadir=/opt/mysql/mysql/data
或者,将相关的选项设置放在选项文件中,然后将该文件的名称传递给 mysqld。对于Unix和类Unix系统,假设选项文件名为 /opt/mysql/mysql/etc/my.cnf。将这些行放在文件中:
[mysqld] basedir=/opt/mysql/mysql datadir=/opt/mysql/mysql/data
然后按以下方式调用mysqld(--defaults-file首先在选项中输入一行命令 ):
bin/mysqld --defaults-file=/opt/mysql/mysql/etc/my.cnf --initialize --user=mysql
在Windows上,假设其中C:\my.ini包含以下几行:
[mysqld] basedir=C:\\Program Files\\MySQL\\MySQL Server 8.0 datadir=D:\\MySQLdata
然后按以下方式调用mysqld(--defaults-file首先在选项中输入一行命令 ):
bin\mysqld --defaults-file=C:\my.ini --initialize --console
数据目录初始化期间的服务器操作
注意
服务器执行的数据目录初始化序列不能代替mysql_secure_installation和 mysql_ssl_rsa_setup执行的动作 。请参见 第4.4.2节“ mysql_secure_installation-提高MySQL安装安全性”和 第4.4.3节“ mysql_ssl_rsa_setup-创建SSL / RSA文件”。
当用--initializeor --initialize-insecure选项调用时 , mysqld在数据目录初始化序列期间执行以下动作:
[ERROR] --initialize specified but the data directory exists. Aborting.
在这种情况下,请删除或重命名数据目录,然后重试。
如果每个条目的名称都以句点(.)开头,则允许现有数据目录为非空。
注意
之后的mysqld树立 InnoDB 系统表空间,表空间特性的某些变化需要建立一个全新的 实例。符合条件的更改包括系统表空间中第一个文件的文件名以及撤消日志的数量。如果不想使用默认值,请在运行 mysqld之前 确保MySQL 配置文件中的innodb_data_file_path和 innodb_log_file_size配置参数 设置正确。 。还要确保根据需要指定其他影响InnoDB文件创建和位置的参数,例如 innodb_data_home_dir和 innodb_log_group_home_dir。
如果这些选项在您的配置文件中,但该文件不在默认情况下MySQL读取的位置,则--defaults-extra-file 在运行mysqld时使用该选项指定文件位置 。
关于'root'@'localhost'帐户密码的服务器操作 取决于您如何调用它:
[Warning] A temporary password is generated for root@localhost: iTag*AfrH5ej
[Warning] root@localhost is created with an empty password ! Please consider switching off the --initialize-insecure option.
有关分配新 'root'@'localhost'密码的说明,请参阅 初始化后根密码分配。
当服务器以引导方式运行时,某些功能将不可用,从而限制了文件中允许的语句。这些语句包括与帐户管理(例如CREATE USER或GRANT),复制和全局事务标识符有关的语句。
初始化后的根密码分配
通过使用--initialize或 --initialize-insecure启动服务器来初始化数据目录之后,请正常启动服务器(即,不使用那些选项之一),然后为'root'@'localhost'帐户分配一个新密码:
mysql -u root -p
然后,在密码提示下,输入服务器在初始化序列期间生成的随机密码:
Enter password: (enter the random root password here)
如果您不知道此密码,请查看服务器错误日志。
mysql -u root --skip-password
ALTER USER 'root'@'localhost' IDENTIFIED BY 'root-password';
另请参见第2.10.4节“保护初始MySQL帐户”。
注意
尝试连接到主机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 系统变量执行的文件中,如 数据目录初始化期间的服务器操作中所述。