MySQL安装与配置

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 ,修改其 basedirdatadir 为实际对应⽬录:

[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