mysql官网: https://www.mysql.com/
选择版本(Product Version)和 操作系统(Operating System)
请大家注意,因为MySQL版本不同,安装界面可能会不同,当初我装MySQL5.5时,没有包括MySQL Workbench的安装!
注意:这里可以选择安装位置
Install Directory(安装目录)和 Data Directory (数据库数据目录)
下载所需插件
注:Port:3306 是MySQL的端口号,请大家记住,最好不要更改。此端口是业内MySQL的默认端口号,相当于大家的共识。
相似的端口号还有http协议:80 ,apache-tomcat:8080
这里的密码请一定记住:用于MySQL数据库的登录!
下图中的页面MySQL是使用者设备中MySQL服务的名字,名字下方的可选框是确认“是否在开机时启动MySQL服务,可根据自身情况选择。
注:安装结束后,可以:右击我的电脑–>管理–>服务找到此时设置的MySQL服务用来启动或停止
我们未来使用MySQL语句时,基本上是在MySQL的图形管理工具中或在编程的IDE中使用,但是初学时我们还是需要在cmd命令行中配置相关MySQL变量,能让Windows命令行操作MySQL数据库。
右击我的电脑–>属性–>高级系统设置–>高级–>环境变量,在打开的窗口中选择系统变量下的新建按钮创建环境变量。
变量名:MYSQL_HOME
变量值:C:\Program Files\MySQL\MySQL Server 8.0
变量值中的路径是MySQL安装路径
如果没有正确配置环境变量,会出现以下情况
正确配置环境变量
我们配置好了MySQL,现在需要在命令行中验证一下
开始–>cmd–>右键–>以管理员身份运行(注意要管理员身份)
输入net start mysql
启动MySQL服务器 (mysql是我们安装时设置的服务器名)因为我当初安装时选择了启动服务器,所以此时MySQL服务已启动。
输入 net stop mysql
停止MySQL服务器
使用shell命令 MySQL -uroot -p
输入密码后再 select user,host from mysql.user;
一、MySQL 连接本地数据库,用户名为“root”,密码“123”(注意:“-p”和“123” 之间不能有空格)
C:\>mysql -h localhost -u root -p123 -D数据库名
二、MySQL 连接远程数据库(192.168.0.201),端口“3306”,用户名为“root”,密码“123”
C:\>mysql -h 192.168.0.201 -P 3306 -u root -p123 -D数据库名
工作后才发现,其实Linux系统下的MySQL安装才是最重要的,大部分服务器都是存放在服务器Linux系统上,Windows系统下的MySQL基本上还是学习测试为主,所以有了这部分的叙述!
MySQL下载网页
需要注意下载的版本,我下载的是MySQL8以上,如果是MySQL5版本,可能命令会有些不一样!
我是 CentOS7 系统,选择 **Red Hat Enterprise Linux 7 /Oracle Linux 7 **
点击 **No thanks,just start my download. **即可
之后将安装包 上传到Linux服务器需要的目录下!
复制 No thanks,just start my download. 的链接URL!使用下面的命令下载
wget URL
#举例:
wget https://dev.mysql.com/get/mysql80-community-release-el7-7.noarch.rpm
可以看到安装包已经下载…
Linux版本的MySQL,命令行会出现很多意料之外的问题,如果遇到了,可以参考我的 6.3 遇到问题 部分!!!
yum -y install mysql80-community-release-el7-7.noarch.rpm
#使用命令
yum -y install mysql-community-server
此时可能会出现密钥过期情况:The GPG keys listed for the “MySQL 5.7 Community Server”
repository are already installedbut they are not correct for this package.
Check that the correct key URLs are configured for this repository.
原因:官⽅ MySQL 存储库的 GPG 密钥已过期,⽆法安装或更新 MySQL 包。
解决⽅案:重新导⼊新的秘钥
rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-年份
例如:
rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022
systemctl start mysqld.service
systemctl status mysqld.service
这一步非常重要,因为还没有重新设置密码,这个密码很重要,在重新设置mysql密码之前,这个密码需要记住,避免不必要的麻烦!>
grep password /var/log/mysqld.log #查看初始密码
# 我这里的密码是:5QSF8dmqhw+
# 登录数据库
mysql -uroot -p
# 可以这样
mysql -uroot -ppassword # -uroot 是-u用户 (这里是root用户) -ppassword 是 -p密码 (我这里可以 -p1234)
ALTER USER 'root'@'localhost' IDENTIFIED BY 'root';
set global validate_password.policy=LOW; #修改默认密码的复杂度
set global validate_password.length=4; #修改默认密码⻓度
show varialables like 'validate_password%'; #查看mysql默认密码复杂度
systemctl start firewalld.service #确保防⽕墙已开启
firewall-cmd --zone=public --add-port=3306/tcp --permanent #开放3306端⼝
firewall-cmd --reload #重新载⼊
# 防⽕墙其他命令
yum install firewalld # 安装firewalld
firewall-cmd --zone=public --remove-port=3306/tcp --permanent #关闭3306端⼝(–permanent永久生效,没有此参数重启后失效)
firewall-cmd --zone=public --list-ports #查看防⽕墙所有开放的端⼝
firewall-cmd --state #查看防⽕墙状态
netstat -lnpt #查看监听的端⼝
netstat -lnpt |grep 5672 #检查端⼝被哪个进程占⽤
ps 6832 #查看进程的详细信息
firewall-cmd --reload #重启防⽕墙
firewall-cmd --list-ports #查看开放的端口
systemctl enable firewalld #开机启动防⽕墙
systemctl disable firewalld #禁⽌防⽕墙开机启动
systemctl start firewalld #开启防⽕墙
systemctl stop firewalld #关闭防⽕墙
登录MySQL,然后输⼊status
,查看mysql字符集信息:
vi /etc/my.cnf
进入文件编辑:
#在[client]段增加下⾯代码
default-character-set=utf8
#在[mysqld]段增加下⾯的代码
#default-storage-engine=INNODB #置默认存储引擎为InnoDB,此处可不必添加
lower_case_table_names=1 #不区分⼤⼩写
character-set-server=utf8
collation-server=utf8_general_ci
systemctl restart mysql.service #重启MySQL
如果上述步骤你都没什么问题,那说明你很幸运,如果没有请看下面慢慢来!!!
#翻译:您的密码太过于简单.
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
#翻译:在执行该语句之前,你必须通过 alter user 来修改密码
ERROR 1820 (HY000): You must reset your password using ALTER USE statement before executing this statement.
show varialables like 'validate_password%'; #查看mysql默认密码复杂度
set global validate_password.policy=LOW; #修改默认密码的复杂度
set global validate_password.length=4; #修改默认密码⻓度
#说明
#设置为ON的时候能将密码设置成当前用户名
validate_password.check_user_name
#用于验证密码强度的字典文件路径,默认为空
validate_password.dictionary_file
#密码最小长度,参数默认为8,密码长度必须大于或等于8,mysql有最小值限制,最小值是4
validate_password.length
#密码至少包含小写字母的个数和大写字母的个数
validate_password.mixed_case_count
#密码必须包含的数字个数
validate_password.number_count
#密码强度检验等级,可以使用0、1、2或相应的符号值
#0/LOW:只检查长度;1/MEDIUM:检查长度、数字、大小写、特殊字符; 2/STRONG:检查长度、数字、大小写、特殊字符、字典文件。
validate_password.policy
#密码必须包含的特殊字符个数
validate_password.special_char_count
#重新设置一下密码
mysql> alter user '用户名'@'localhost' identified by '1234'; //改密码方式一
mysql> alter user USER() identified by '1234'; //改密码方式二
# 设置成功会显示:
Query OK, 0 rows affected(0.01 sec)
当然密码长度也可以设置更长…
cat /var/log/mysqld.log | grep ERROR
查看问题解决我这里是配置文件报错,重新配置了一下,就可以了
systemctl restart mysqld.service #重启服务
systemctl status mysqld.service # 查看mysql状态
mysql> select user();
+--------+
| user() |
+--------+
| root@ |
+--------+
1 row in set (0.01 sec)
vim /etc/my.cnf
skip-grant-tables #在[mysqld]下面添加这一行,忽略权限表
systemctl restart mysql.service #重启MySQL
create user 'root'@'localhost' identified by 'rootroot';#localhost表示本地,mysql登入的时候,不用指定ip登入
此步骤可能会报以下错误,没报错的跳过(直接到权限那一步),用一下方法解决:
mysql> alter root user() identified by 'root';
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 use near 'root user() identified by 'root'' at line 1
mysql> create user 'root'@'localhost' identified by 'root';
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
mysql> create user 'root'@'localhost' identified by 'rootroot';
ERROR 1396 (HY000): Operation CREATE USER failed for 'root'@'localhost'
输入:flush privileges;
此时再次重新创建用户:create user 'root'@'localhost' identified by 'rootroot';
再次报错,这步没报错的也是直接跳到赋予权限那一步,报错的以下操作:
mysql> drop user 'root'@'localhost';
Query OK, 0 rows affected (0.00 sec)
再次重新创建用户:create user 'root'@'localhost' identified by 'rootroot';
结果没有再报错,root用户创建成功。
mysql> grant all privileges on *.* to 'root'@'localhost' with grant option;
Query OK, 0 rows affected (0.01 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)
mysql> exit
Bye
[root@centos01 ~]# mysql -uroot -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.31 MySQL Community Server - GPLCopyright (c) 2000, 2022, Oracle and/or its affiliates.Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql>
vim /etc/my.cnf
删除配置文件中的:skip-grant-tables
[root@centos01 ~]# systemctl restart mysqld.service
[root@centos01 ~]# systemctl status mysqld.service
● mysqld.service - MySQL ServerLoaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)Active: active (running) since 五 2022-12-23 17:19:34 CST; 6s agoDocs: man:mysqld(8)http://dev.mysql.com/doc/refman/en/using-systemd.htmlProcess: 13355 ExecStartPre=/usr/bin/mysqld_pre_systemd (code=exited, status=0/SUCCESS)Main PID: 13383 (mysqld)Status: "Server is operational"Tasks: 39CGroup: /system.slice/mysqld.service└─13383 /usr/sbin/mysqld12月 23 17:19:33 centos01 systemd[1]: Starting MySQL Server...
12月 23 17:19:34 centos01 systemd[1]: Started MySQL Server.
[root@centos01 ~]# mysql -uroot -p #可以登入的话,表示前面的操作没问题
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.31 MySQL Community Server - GPLCopyright (c) 2000, 2022, Oracle and/or its affiliates.Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql> exit
Bye
[root@centos01 ~]#
我密码输入正确,ip地址输入也是正确,但是数据库连接依旧报错。
这个异常是数据库只允许localhost或127.0.0.1访问,不允许远程访问导致的。
mysql -uroot -p
use mysql;select user,host from user;
可以看到查看范围,仅限localhost!
update user set host='%' where user='root';
flush privileges;
因为Linux上访问MySQL,基本上是用作服务器访问,不同的数据库要设置不同的权限,比如涉及到MySQL本身自带的那几个数据库,最好只允许本机访问,防止重要信息泄露给客户端!!!
#如果是NO,证明你根本没有输入密码
ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using password: NO)
#键入了,应该是YES
ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using password: YES)
# 查看mysql状态
#方法一:
service mysqld status
#方法二:
systemctl status mysqld.service
grep password /var/log/mysqld.log #查看初始密码
# 登录数据库
mysql -uroot -p
vim /etc/my.cnf
skip-grant-tables #在[mysqld]下面添加这一行,忽略权限表
# 登录数据库
mysql -uroot -p
#如果下面这行语句不行用再下面的
mysql> update mysql.user set authentication_string=password('123456') where User='root';#设置新密码
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '123456'; #设置新密码
skip-grant-tables
删除当提示,Public Key Retrieval is not allowed
错误的时候,我们可以在连接数据库的配置文件中加上
allowPublicKeyRetrieval=true
# 登录MySQL
mysql -h 主机名 -P 端口号 -u 用户名 -p密码
# 或
mysql -uroot -p
Enter password:****
# 查看所有的数据库
show databases;
# 创建自己的数据库
create database 数据库名;
# 使用自己的数据库
use 数据库名;
# 查看某个库的所有表格
show tables; #要求前面有use语句
show tables from 数据库名;
# 创建新的表格
create table 表名称(字段名 数据类型,字段名 数据类型);
# 查看一个表的数据
select * from 数据库表名称;
# 添加一条记录
insert into 表名称 values(值列表);
#添加两条记录到表中
insert into 表名称 values(1,'张三');
insert into 表名称 values(2,'李四');
# 删除表格
drop table 表名称;
# 删除数据库
drop database 数据库名;
# 退出登录
exit
# 或
quit
以上是MySQL最基础配置,MySQL已经可以在Linux上使用了!!!
才配置文件里的那个skip-grant-tables
删除
当提示,Public Key Retrieval is not allowed
错误的时候,我们可以在连接数据库的配置文件中加上
allowPublicKeyRetrieval=true
# 登录MySQL
mysql -h 主机名 -P 端口号 -u 用户名 -p密码
# 或
mysql -uroot -p
Enter password:****
# 查看所有的数据库
show databases;
# 创建自己的数据库
create database 数据库名;
# 使用自己的数据库
use 数据库名;
# 查看某个库的所有表格
show tables; #要求前面有use语句
show tables from 数据库名;
# 创建新的表格
create table 表名称(字段名 数据类型,字段名 数据类型);
# 查看一个表的数据
select * from 数据库表名称;
# 添加一条记录
insert into 表名称 values(值列表);
#添加两条记录到表中
insert into 表名称 values(1,'张三');
insert into 表名称 values(2,'李四');
# 删除表格
drop table 表名称;
# 删除数据库
drop database 数据库名;
# 退出登录
exit
# 或
quit
以上是MySQL最基础配置,MySQL已经可以在Linux上使用了!!!