多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

Window安装Mysql8

Window安装Mysql8 文章目录下载zip安装包安装前配置解压zip包到安装目录配置环境变量配置初始化的my.ini文件安装mysql初始化数据库安装服务更改密码授权远程数据库远程连接mysql时遇到下列问题数据库报only\_full\_group\_by错误解决方案下载zip安装包MySQL8.0 For Windows zip包下载地址https://dev.mysql.com/downloads/file/?id476233进入页面后可以不登录。后点击底部“No thanks, just start my download.”即可开始下载。安装前配置解压zip包到安装目录E:\software\mysql\mysql-8.0.11-winx64配置环境变量将解压文件夹下的bin路径添加到path变量值中前后以 ; 结尾配置初始化的my.ini文件我们发现解压后的目录并没有my.ini文件没关系可以自行创建。在安装根目录下添加 my.ini新建文本文件将文件类型改为.ini写入基本配置[mysqld] # 设置3306端口 port3306 # 设置mysql的安装目录 切记此处一定要用双斜杠\\单斜杠我这里会出错不过看别人的教程有的是单斜杠。自己尝试吧 basedirE:\\software\\mysql\\mysql-8.0.11-winx64 # 设置mysql数据库的数据的存放目录 datadirE:\\software\\mysql\\mysql-8.0.11-winx64\\Data # 允许最大连接数 max_connections200 # 允许连接失败的次数。这是为了防止有人从该主机试图攻击数据库系统 max_connect_errors10 # 服务端使用的字符集默认为UTF8 character-set-serverutf8 # 创建新表时将使用的默认存储引擎 default-storage-engineINNODB # 默认使用“mysql_native_password”插件认证 default_authentication_pluginmysql_native_password [mysql] # 设置mysql客户端默认字符集 default-character-setutf8 [client] # 设置mysql客户端连接服务端时默认使用的端口port3306 default-character-setutf8注意其中的data目录不需要创建下一步初始化工作中会自动创建。安装mysql初始化数据库在安装时必须以管理员身份运行cmd否则在安装时会报错会导致安装失败的情况在MySQL安装目录的 bin 目录下执行命令mysqld --initialize --console执行完成后会打印 root 用户的初始默认密码比如C:\Windows\System32mysqld --initialize --console 2024-12-19T08:39:49.982918Z 0 [System] [MY-013169] [Server] D:\devSoftwareInstall\mysql-8.0.33-winx64\bin\mysqld.exe (mysqld 8.0.33) initializing of server in progress as process 31880 2024-12-19T08:39:49.995518Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started. 2024-12-19T08:39:50.150977Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended. 2024-12-19T08:39:50.657217Z 6 [Note] [MY-010454] [Server] A temporary password is generated for rootlocalhost: (gIp%1hwyUkA注意执行输出结果里面有一段[Note] [MY-010454] [Server] A temporary password is generated for rootlocalhost: rI5rvf5x5G,E其中rootlocalhost:后面的“rI5rvf5x5G,E”就是初始密码不含首位空格。在没有更改密码前需要记住这个密码后续登录需要用到。要是误操作关快了或者没记住那也没事删掉初始化的 datadir目录再执行一遍初始化命令又会重新生成的。当然也可以使用安全工具强制改密码用什么方法自己随意。参考 https://dev.mysql.com/doc/refman/8.0/en/data-directory-initialization-mysqld.html安装服务在MySQL安装目录的 bin 目录下执行命令mysqld --install [服务名]后面的服务名可以不写默认的名字为 mysql。当然如果你的电脑上需要安装多个MySQL服务就可以用不同的名字区分了比如 mysql5 和 mysql8。安装完成之后就可以通过命令net start mysql启动MySQL的服务了。net start mysql通过命令net stop mysql停止服务。net stop mysql通过命令sc delete MySQL/mysqld -remove卸载 MySQL 服务sc delete MySQL/mysqld -remove更改密码在MySQL安装目录的 bin 目录下执行命令mysql -u root -p这时候会提示输入密码记住了上面第3.1步安装时的密码填入即可登录成功进入MySQL命令模式。在MySQL中执行命令ALTER USER rootlocalhost IDENTIFIED WITH mysql_native_password BY 新密码; ALTER USER rootlocalhost IDENTIFIED WITH mysql_native_password BY you_password;修改密码注意命令尾的一定要有这是mysql的语法到此安装部署就完成了。官方说测试速度MySQL8比5快两倍。可以用 命令查看一下默认安装的数据库show databases; use mysql; show tables; mysql show databases; -------------------- | Database | -------------------- | information_schema | | mysql | | performance_schema | | sys | -------------------- 4 rows in set (0.01 sec) mysql看到默认初始化了mysql数据库其中user表里面存储MySQL用户信息。我们可以看一下默认MySQL用户select user,host,authentication_string from mysql.user; mysql select user,host,authentication_string from mysql.user; ------------------------------------------------------------------------ | user | host | authentication_string | ------------------------------------------------------------------------ | mysql.infoschema | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | | mysql.session | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | | mysql.sys | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | | root | localhost | *27C237A977F4F44D3F551F1A673BE14DFD232961 | ------------------------------------------------------------------------ 4 rows in set (0.00 sec) mysql管理员root的host是localhost代表仅限localhost登录访问。如果要允许开放其他ip登录则需要添加新的host。如果要允许所有ip访问可以直接修改成“%”创建用户CREATE USER xxh% IDENTIFIED WITH mysql_native_password BY xxh123!#; //(需要注意mysql8.0加密方式修改了) //检查用户 select user, host, plugin, authentication_string from user\G;授权远程数据库//授权所有权限 GRANT ALL PRIVILEGES ON *.* TO xxh% //授权基本的查询修改权限按需求设置 GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,ALTER ON *.* TO xxh%; //查看用户权限 show grants for xxh%;示例mysql use mysql; Database changed mysql CREATE USER xxh% IDENTIFIED WITH mysql_native_password BY xxh123!#; #创建用户(注意mysql8.0加密方式修改了) Query OK, 0 rows affected (0.07 sec) mysql查看密码加密方式mysql select user, host, plugin, authentication_string from user; ----------------------------------------------------------------------------------------------- | user | host | plugin | authentication_string | ----------------------------------------------------------------------------------------------- | xxh | % | mysql_native_password | *70FD6FB4F675E08FF785A754755B5EBA6DA62851 | | mysql.infoschema | localhost | mysql_native_password | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | | mysql.session | localhost | mysql_native_password | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | | mysql.sys | localhost | mysql_native_password | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | | root | localhost | mysql_native_password | *27C237A977F4F44D3F551F1A673BE14DFD232961 | ----------------------------------------------------------------------------------------------- 5 rows in set (0.00 sec) mysql另外如果需要新增账户或者本机以外的其他人访问MySQL则还需要设置内置账户的host具体可以参考MySQL创建用户与授权远程连接mysql时遇到下列问题[HY000][1130] null, message from server: Host ‘192.168.245.1’ is not allowed to connect to this MySQL server解决方案GRANT ALL PRIVILEGES ON *.* TO myuser% IDENTIFIED BY mypassword WITH GRANT OPTION; flush privileges; //生效 GRANT ALL PRIVILEGES ON *.* TO root% IDENTIFIED BY wangcheng WITH GRANT OPTION; flush privileges;表示授权某个用户在哪些主机上可以对哪些数据库和表进行哪些操作。• ON.db.table: 数据库和数据表• TO user: 要授权的用户• host: %’表示任何主机数据库报only_full_group_by错误解决方案决方案首先执行一下命令查看是否开启了only_full_group_byselect global.sql_mode结果ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION如果看到有ONLY_FULL_GROUP_BY这个直接删除掉就行了。具体见下方式一在mysq的配置文件下新增配置然后保存重启mysql即可[mysqld] sql_modelSTRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION方式二set global.sql_modeSTRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION;注意 8.0.x的版本不支持NO_AUTO_CREATE_USER去掉即可
返回列表