在Windows中安装mysql,有的时候在本地测试项目的时候或者不想用公司的数据库,就需要本地部署127.0.0.1环境,下面记录下来安装过程及可能遇到的问题。
一、官网下载 mysql:https://dev.mysql.com/downloads/mysql/
二、下载完成,将文件解压到你想要安装的盘里。这里我安装到了C盘。之后以管理员身份运行DOS窗口。进入到mysql的bin文件夹
三、重点来了:我们需要准备的就是配置点东西
在mysql-8.0.11-winx64的文件夹下创建一个名为data的空文件夹。
在bin目录里创建一个my.ini的文件,内容为:
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8
[mysqld]
#设置3306端口
port = 3306
# 设置mysql的安装目录
basedir=C:\MyProjects\mysql\mysql-8.0.11-winx64
# 设置mysql数据库的数据的存放目录
datadir=C:\MyProjects\mysql\mysql-8.0.11-winx64\data
# 允许最大连接数
max_connections=200
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
其中basedir的路径是安装mysql的路径,datadir就是刚创建的data目录路径。(路径分割用\)
注意
:my.ini文件保存之后,检查下my.ini是否存在,后缀名是否正确。在刚才的bin目录下输入vim m按下Tab键,正确的话会自动补全(我在这遇到了坑)
四、接下来在dos窗口里面输入:mysqld --initialize-insecure
五、再输入:mysqld -install (如果说已经存在,可以使用 sc delete mysql 或者 mysql -remove 将其删除) 结果会显示Service successfully installed.
六、最后输入:net start mysql #启动mysql服务
当然还会有MySQL 服务无法启动的情况出现。这时查看你的
my.ini
文件中basedir和datadir中路径是不是上面说的那样设置的。如果没问题的话,还是启动不成功,这时我们打开刚才创建的data文件夹,你会发现一个以.err结尾的文件,这记录的详细的错误信息。
七、遇到问题:我这出现Failed to find valid data directory
是mysql初始化的时候找不到对应的数据库存储目录
解决方法:
1、手动删掉自己创建的data文件夹
2、然后再管理员cmd下进入 bin 目录,移除自己的mysqld服务
D:\Program Files\MySQL\bin>mysqld -remove MySQL
会显示Service successfully removed.
在cmd的bin目录执行以下命令,程序会在动MySQL文件夹下创建data文件夹以及对应的文件。
mysqld --initialize-insecure
bin目录下执行,mysqld --install ,安装mysqld服务
在bin目录下运行net start mysql ,成功启动mysql服务。
八、忘记密码
1.停止你正在运行的mysql
方法一:命令行:net stop mysql
方法二:任务管理器 --> 服务 --> mysql右键关闭
2.管理员身份运行cmd,输入
mysqld --shared-memory --skip-grant-tables
注:mysqld --skip-grant-tables这个命令8.0以上已经失效
此时这个窗口就不能动了,以管理员身份运行打开一个新窗口
3.在新窗口cd到当前目录 ,键入
mysql -uroot -p
密码不用输入,直接回车过去,如图:
4.输入 use mysql;
,进入mysql
5.输入置空密码命令
update user set authentication_string='' where user='root';
注:8.0以上版本 ‘password’ 字段已经不管用了,会报错,相关的命令比如:update mysql.user set password='newpassword' where user='root';
一同失效
6.输入设置新密码命令
alter user 'root'@'localhost' identified by '设置的新密码'
7.必填:flush privileges;
这个时候可能报错:The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement;
解决:刷新权限表:flush privileges;
8.Ctrl+Z退出mysql,重新运行,使用新密码登录,完成
mysql -h localhost -u root -p
9.如果使用navicat连接数据库时报错2059,原因是mysql8 之前的版本中加密规则是mysql_native_password,而在mysql8之后,加密规则是caching_sha2_password,我们在这里修改一下加密规则就好了
mysql -h localhost -u root -p //登录
use mysql; //选择数据库
ALTER USER 'root'@'localhost' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER; //更改加密方式
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的密码'; //更新用户密码
FLUSH PRIVILEGES; //刷新权限