MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。
虽然被Oracle收编后路就越走越偏了,但优势依然还在,所以还能用。
一、Windows下安装
1、准备安装包
官网下载地址:https://dev.mysql.com/downloads/mysql/5.7.html
阿里云镜像站:https://mirrors.aliyun.com/mysql/?spm=a2c6h.13651104.0.0.2e535dc85gACEQ
这⾥下载的是 mysql-5.7.37-winx64.zip
安装包,解压在C盘C:\Program Files
目录。
2、初始化数据库
# 用管理员运行打开cmd
C:\Program Files\mysql-5.7.37-winx64>cd C:\Program Files\mysql-5.7.37-winx64\bin
C:\Program Files\mysql-5.7.37-winx64\bin>mysqld --initialize --console
记录下最后的内容,这是随机生成的密码(d%aI&Q#wl2Id),下面登录数据库需要用到。
3、将Mysql安装为Windows的服务
C:\Program Files\mysql-5.7.37-winx64\bin>mysqld -install
Service successfully installed.
# 启动MySQL服务
C:\Program Files\mysql-5.7.37-winx64\bin>net start mysql
MySQL 服务正在启动 .
MySQL 服务已经启动成功。
4、登录数据库与修改密码
# 首次登录使用前面随机生成的密码
mysql -u root -p
# 修改密码
alter user 'root'@'localhost' identified by '新密码';
Query OK, 0 rows affected (0.00 sec)
mysql> commit;
Query OK, 0 rows affected (0.00 sec)
mysql> quit;
Bye
5、启动和关闭命令
# 启动
net start MySQL
# 关闭
net stop MySQL
二、Linux下安装
1、准备安装包
官网下载地址:https://dev.mysql.com/downloads/mysql/5.7.html
清华大学镜像站:https://mirrors.tuna.tsinghua.edu.cn/mysql/downloads/
这⾥下载的是 mysql-5.7.37-linux-glibc2.12-x86_64.tar.gz
安装包,并将其直接放在了root
⽬录下。
2、卸载系统自带的MariaDB(如果有)
如果系统之前⾃带 Mariadb
,可以先卸载之。
# ⾸先查询已安装的 Mariadb 安装包
[root@localhost ~]# rpm -qa|grep mariadb
mariadb-libs-5.5.68-1.el7.x86_64
# 如果有多个包,要一个一个将它们全部卸载
[root@localhost ~]# yum -y remove mariadb-libs.x86_64
[root@localhost ~]# rpm -qa|grep mariadb
# 再次运行这次没有任何输出,说明卸载完毕
3、解压MYSQL安装包
将上⾯准备好的 MySQL
安装包解压到 /usr/local/
⽬录,并重命名为 mysql
[root@localhost ~]# tar -zxvf /root/mysql-5.7.37-linux-glibc2.12-x86_64.tar.gz -C /usr/local/
[root@localhost ~]# cd /usr/local/
[root@localhost local]# mv mysql-5.7.37-linux-glibc2.12-x86_64 mysql
4、创建MYSQL用户和用户组
。
# 创建MySQL用户组和用户
[root@localhost ~]# groupadd mysql
[root@localhost ~]# useradd -g mysql mysql
# 顺便新建 data ⽬录,后续备⽤
[root@localhost ~]# mkdir /usr/local/mysql/data
5、修改MYSQL目录的归属用户
[root@localhost ~]# chown -R mysql. /usr/local/mysql
6、准备MYSQL的配置文件
在 /etc
⽬录下新建 my.cnf
⽂件
[root@localhost ~]# vi /etc/my.cnf
# 以下写入配置
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8
socket=/var/lib/mysql/mysql.sock
[mysqld]
skip-name-resolve
#设置3306端口
port = 3306
socket=/var/lib/mysql/mysql.sock
# 设置mysql的安装目录
basedir=/usr/local/mysql
# 设置mysql数据库的数据的存放目录
datadir=/usr/local/mysql/data
# 允许最大连接数
max_connections=200
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
lower_case_table_names=1
max_allowed_packet=16M
同时创建 /var/lib/mysql
⽬录,并修改权限:
[root@localhost ~]# mkdir /var/lib/mysql
[root@localhost ~]# chmod 777 /var/lib/mysql
7、正式开始安装MYSQL
[root@localhost ~]# cd /usr/local/mysql
[root@localhost ~]# ./bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
记住上⾯打印出来的 root
的密码,后⾯⾸次登陆需要使⽤。
8、复制启动脚本到资源目录
[root@localhost mysql]# cp ./support-files/mysql.server /etc/init.d/mysqld
并修改 /etc/init.d/mysqld
,修改其 basedir
和 datadir
为实际对应⽬录:
[root@localhost mysql]# vi /etc/init.d/mysqld
# 修改以下内容:
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
9、设置MYSQL系统服务并开启自启
# ⾸先增加 mysqld 服务控制脚本执⾏权限
[root@localhost mysql]# chmod +x /etc/init.d/mysqld
# 同时将 mysqld 服务加⼊到系统服务
[root@localhost mysql]# chkconfig --add mysqld
# 最后检查 mysqld 服务是否已经⽣效即可
[root@localhost mysql]# chkconfig --list mysqld
这样就表明 mysqld 服务已经⽣效了,在2、3、4、5运行级别随系统启动而自动启动,以后可以直接使⽤ systemctl
命令控制 mysql 的启停。
10、启动Mysqld
# centOS6
[root@localhost mysql]# service mysqld start
# centOS7
[root@localhost mysql]# systemctl start mysqld.service
# 查看3306端口是否被监听
[root@localhost mysql]# netstat -atunlp
11、将 MYSQL 的 BIN 目录加入 PATH 环境变量
此举是⽅便以后在任意⽬录上都可以使⽤ mysql 提供的命令
[root@localhost mysql]# vi /etc/profile
# 在末尾处追加以下信息
# MySQL
export PATH=$PATH:/usr/local/mysql/bin
# 使环境变量⽣效
[root@localhost mysql]# source /etc/profile
12、首次登陆MYSQL,修改账号密码
以 root
账户登录 mysql
,使⽤上面安装完成提示的密码进⾏登⼊
mysql -u root -p
mysql> alter user user() identified by "新密码";
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
13、设置远程主机登录
mysql> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
# '%'代表所有ip都能远程访问
mysql> update user set user.Host='%' where user.User='root';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
# 如果指定IP远程访问指定账户密码
GRANT ALL PRIVILEGES ON *.* TO '指定账号' @ '指定IP' IDENTIFIED BY '指定密码';
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql> quit
Bye
14、开放防火墙端口
# 查看防火墙状态
[root@localhost mysql]# systemctl status firewalld
# 开放3306端口
[root@localhost mysql]# firewall-cmd --zone=public --add-port=3306/tcp --permanent
success
# --permanent 永久生效,没有此参数重启后失效(这里的3306还可改成端口)
# 重新载入防火墙服务
[root@localhost mysql]# firewall-cmd --reload
# 查看已经开放的端口
[root@localhost mysql]# firewall-cmd --list-ports
三、Ubuntu下安装
以下都在root用户下进行。
一、查看有没有安装Mysql
dpkg -l | grep mysql
二、安装MySQL
# 更新系统软件库
apt-get update
# 查找合适的mysql版本
apt-cache search mysql-server
# 安装MySQL
apt install mysql-server -y
# 检查是否安装成功
apt install net-tools
netstat -tap | grep mysql
# 看到有 mysql 的socket处于 LISTEN 状态则表示安装成功
三、数据库初始化
先匿名登录mysql,直接在root账号下执行
mysql
mysql8.0 引入了新特性caching_sha2_password
;这种密码加密方式客户端不支持;客户端支持的是mysql_native_password
这种加密方式。
# 查看mysql 数据库中user表的 plugin字段:
mysql> select host,user,plugin from user;
+-----------+------------------+-----------------------+
| host | user | plugin |
+-----------+------------------+-----------------------+
| localhost | debian-sys-maint | caching_sha2_password |
| localhost | mysql.infoschema | caching_sha2_password |
| localhost | mysql.session | caching_sha2_password |
| localhost | mysql.sys | caching_sha2_password |
| localhost | root | caching_sha2_password |
+-----------+------------------+-----------------------+
mysql> updates user set plugin='mysql_native_password' where user='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 'updates user set plugin='mysql_native_password' where user='root'' at line 1
mysql> update user set plugin='mysql_native_password' where user='root';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password by '新密码';
# 数据库初始化
[root@ytlib /]# mysql_secure_installation
# 几个重要设置项
## 要安装验证密码插件吗?
secure enough. Would you like to setup VALIDATE PASSWORD component?
Press y|Y for Yes, any other key for No: y
## 选择密码强度
Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 2
## 删除匿名用户
Remove anonymous users? (Press y|Y for Yes, any other key for No) : y
## 取消禁止root管理员从远程登录
Disallow root login remotely? (Press y|Y for Yes, any other key for No) : n
## 删除test数据库并取消对它的访问权限
Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y
## 刷新授权表,让初始化后的设定立即生效
Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y
四、配置mysql允许远程访问
# 编辑mysqld.cnf配置文件
vim /etc/mysql/mysql.conf.d/mysqld.cnf
注释掉bind-address = 127.0.0.1
# 重新登录MySQL
mysql -u root -p
# MySQL授权远程访问
## MySQL8.0之前
mysql> grant all on *.* to root@'%' identified by '你的密码' with grant option;
## MySQL8.0之后
mysql>create user root@'%' identified by '你的密码';
mysql>grant all privileges on *.* to root@'%' with grant option;
# 刷新权限并退出
mysql> flush privileges;
mysql> quit;
# 重启MySQL
service mysql restart