mysql是比较常用的数据库,8.0中的json类型字段更是非常好用,之前用docker做测试数据库,但是电脑重启遇到docker升级,有时候docker就启动错误了,再有win中的wsl非常占用内存,我电脑16g都不够用,无奈之下觉得还是老老实实的安装mysql。下面就介绍下,怎么在win系统中安装mysql数据库
mysql配置参考自官方文档
- 首先在官网下载压缩包,之后解压缩到你想安装的目录中
- 在解压缩的路径中新建my.ini配置文件,其中指定了根路径与data的文件夹路径,配置文件如下
[mysqld]
# set basedir to your installation path
basedir=F:/mysql-8.0.26-winx64
# set datadir to the location of your data directory
datadir=F:/mysql-8.0.26-winx64/data
或者也可以在命令行中,指定参数
- 之后执行命令,初始化数据库并启动mysql,
bin\mysqld --defaults-file=my.ini --initialize --console
这里需要注意--defaults-file=my.ini
位置一定要紧跟在mysqld后面,注意位置,否则在初始化的时候会报错,可能是一个bug - 或者也可以直接在命令行中指明参数
bin\mysqld --initialize --console --basedir=../mysql-8.0.26-winx64 --datadir=../mysql-8.0.26-winx64/data
在命令中添加
--console
是为了随时看到执行的输出
- 可以在命令行中,看到系统生成的随机密码,不要关闭这个窗口,让mysql服务保持运行,新打开一个cmd窗口,执行
bin\mysql -u root -p
输入密码,系统竟然报密码错误,怎么回事。。。,尝试用 navicat,连接数据库,并输入密码,会提示密码以过期,输入一个新的密码以后,可以登录了。 - 可是这样一旦关闭cmd窗口,mysql服务就关闭了,而且不能开机启动,太不方便了,安装成mysql服务吧,执行
bin\mysqld --install MySQL --defaults-file="my.ini"
就把mysql安装成win服务了,在我的电脑上右键-管理-服务和应用程序,就可以看到添加的名为MySQL 的服务了,在上面右键,改为开机启动。
想要删除服务的话,可以在服务的属性中查看服务名,然后执行
sc delete 服务名
即可;也可以使用mysqld -remove
移除自己的mysqld服务。
2021/9/18 补充
在后来安装mysql的时候,遇到了无法启动的情况,查询后,按照以下步骤,可以成功启动
- 在win中搜索path,打开环境变量,将C:\windows\system32添加进去,这样能保证sc等命令可以运行。执行
sc delete 服务名
,将之前的服务删除 - 将安装路径下的data目录清空,执行
bin\mysqld --defaults-file=my.ini --initialize --console
重新初始化数据库 - 使用
bin\mysqld --console
看是否能启动,如果可以就运行G:/sql/bin/mysqld --install MySQL --defaults-file="G:/sql/my.ini"
虽然不知道什么原因,但是发现这里只有绝对路径,在服务中才能启动 - 因为之前添加了环境变量, 所以,通过
net start 服务名
,就可以成功启动服务了 - 启动服务后直接用
mysql -u root -p
,会登录不成功,但是使用软件登录却可以。在服务器端,不能用navicat软件,因为贵,或者需要破解,公司是不允许的,找到了一款替代的开源数据库管理软件,heidisql - 也可能是因为端口被占用而导致无法启动,执行
netstat -ano|findstr 3306
,按pid关闭进程即可taskkill /f /pid 4644
或者也可以到任务管理器-详细信息中,找到pid关闭 - 配置指定ip可以访问:
GRANT priv_type ON database.table TO user[IDENTIFIED BY [PASSWORD] ‘password’] [,user [IDENTIFIED BY [PASSWORD] ‘password’]…]- priv_type代表允许操作的权限。
- database.table代表数据库名.表名
注意*代表所有,如database.代表该数据库的所有表,.*代表所有数据库的所有表
user由用户名(User)和主机名(Host)构成,中间用@隔开,最好加上单引号,不加也可以执行通过。 - password代表设置的密码
GRANT ALL PRIVILEGES ON . TO ‘root’@‘192.168.199.99’ IDENTIFIED BY ‘password’ WITH GRANT OPTION;
GRANT ALL on . to ‘登陆名’@‘你的ip地址’ identified by ‘你的密码’;
flush privileges;