一、安装mysql
mysql版本介绍
GPL版本为开源,非商用;commercial为商用版
- MySQL Enterprise Edition
企业版,不开源,可商用
- MySQL Community (GPL)
社区版,开源,非商用
二、安装前的注意事项
MySQL对libaio
库有依赖性。如果未在本地安装此库,则数据目录初始化和随后的服务器启动步骤将失败。
在有yum的系统上安装libaio
依赖:
#从yum仓库中查询libaio的信息
yum search libaio
#从yum仓库安装libaio
yum install libaio
在有apt的系统上安装libaio
依赖:
# 查询libaio的信息
apt-cache search libaio
# 通过apt的方式获取并安装libaio
apt-get install libaio1
如果不安装依赖会在初始化mysql的时候出现错误码,如下:
./bin/mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory
有些linux系统的安装镜像中会附带数据库,例如Mariadb这个数据库
如果有Mariadb这个数据库会影响安装mysql数据库
所以我们先检查以下是否安装有 Mariadb :
rpm -qa | grep mariadb
把他们全部卸载掉:
可以先卸载完整包(不带后缀的方式),然后再查询,再卸载其他包
#卸载完整包
yum -y remove mariadb
#查询
rpm -qa | grep mariadb
#卸载其他包
yum -y remove mariadb-libs-x.x.xx-x.exx.x86_64
名字后面的数字代表版本号(例如-5.5.56-2.el7.x86_64),我们可以通过tab键来快速补全名字,不用照着前面查询的内容全部手动输入。
最后最好再查询一遍来确保卸载干净
linux上安装mysql
通过yum源来安装要确保配置好yum仓库,没有设置的,可以看我的文章:CentOS7下更改yum源为国内源
获取方式
对于安装文件的获取:
- 可以通过命令行,从镜像文件仓库下载
- 如果有图形化界面,可以在图形化界面的浏览器中进入官网下载
- 通过文件传输,在windows上下载通过ftp(或sftp)进行文件传输
1. yum源安装
创建mysql用户和组
#创建MySQL组
groupadd mysql
#创建MySQL用户并添加到MySQL组中
useradd -g mysql mysql
如果你想创建的mysql用户不能用来登陆,那么使用下面的命令
useradd -r -g mysql -s /bin/false mysql
-r
表示创建系统用户
-s
表示更改默认登陆的shell 参数/bin/false
表示,更改后的shell为/bin/false
,mysql用户不能用于登陆
获取
通过wget获取rpm文件信息来安装mysql(这里获取的是最新的rpm)
当然可以直接从官网下载下来然后通过ftp(sftp)传到指定的linux系统上
wget -i http://dev.mysql.com/get/mysql80-community-release-el8-1.noarch.rpm
rpm列表可以通过官网查看https://dev.mysql.com/downloads/repo/yum/
括号里的内容为rpm版本,找到你想要的版本,将括号里的名字替换掉http://dev.mysql.com/get/
后面的内容就可以通过wget获取。
mysql产品列表包含所有的产品,可以该页面下载rpm、tar格式的mysql
添加mysql yum库
yum -y install mysql80-community-release-el8-1.noarch.rpm
安装
yum -y install mysql-community-server
开启服务
service mysqld start
查看mysqld服务状态
service mysql status
样例输出
● mysqld.service - MySQL Server
Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
Active: active (running)
Docs: man:mysqld(8)
http://dev.mysql.com/doc/refman/en/using-systemd.html
Process: 25325 ExecStart=/usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid $MYSQLD_OPTS (code=exited, status=0/SUCCESS)
Process: 25276 ExecStartPre=/usr/bin/mysqld_pre_systemd (code=exited, status=0/SUCCESS)
Main PID: 25329 (mysqld)
CGroup: /system.slice/mysqld.service
└─25329 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid
Active: active (running)
表示服务开启成功
查看初始密码
在日志里查看一下mysql初始密码
grep "password" /var/log/mysqld.log
样例输出:
[Note] A temporary password is generated for root@localhost: ju_Dfa*5gx
登陆
使用初始密码登陆
mysql -u root -p
样例输出:
Enter password:
输入初始密码,默认是隐藏显示,直接输入然后回车
样例输出:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.31
Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.
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>
mysql 的配置文件
通过yum安装会创建一个默认的配置文件/etc/my.cnf
默认配置如下:
# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/5.7/en/server-configuration-defaults.html
[mysqld]
#
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
#
# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin
#
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
需要注意的是:
#数据文件的存放位置,存放初始化以后的数据
datadir=/var/lib/mysql
#日志文件的存放位置
log-error=/var/log/mysqld.log
2. 通用二进制文件安装
创建mysql用户和组
#创建MySQL组
groupadd mysql
#创建MySQL用户并添加到MySQL组中
useradd -g mysql mysql
如果你想创建的mysql用户不能用来登陆,那么使用下面的命令
useradd -r -g mysql -s /bin/false mysql
-r
表示创建系统用户
-s
表示更改默认登陆的shell 参数/bin/false
表示,更改后的shell为/bin/false
,mysql用户不能用于登陆
获取
可以直接从官网下载,然后通过ftp(sftp)传到指定的linux系统上
也可以通过wget获取
- tar.xz 格式
wget -i https://dev.mysql.com/get/mysql-8.0.21-linux-glibc2.12-x86_64.tar.xz
- tar格式
wget -i https://dev.mysql.com/get/mysql-8.0.21-linux-glibc2.12-x86_64.tar
解压缩
- tar.xz格式
tar -zxvf mysql-8.0.21-linux-glibc2.12-x86_64.tar.xz
如果不支持xz
格式,用以下命令替换前面的tar命令以解压缩:
xz -dc /path/to/mysql-VERSION-OS.tar.xz | tar x
- tar格式,可直接用tar命令解压(mysql-8.0.21-linux-glibc2.12-x86_64.tar 为上一步wget的压缩包)
解压缩的时候要注意压缩包的位置
最好是把压缩包放在/usr/local/
下,并且在/usr/local/
目录下执行下面的命令
为什么选择/usr/local/
目录下呢?因为通常是把用户自己添加的软件,放在/usr/local/
目录下,便于管理
如果压缩包不是在当前目录中,请使用绝对路径
相对路径:
tar -xvf mysql-8.0.21-linux-glibc2.12-x86_64.tar
绝对路径:
tar -xvf /usr/local/mysql-8.0.21-linux-glibc2.12-x86_64.tar
解压tar包使不要加上-z
选项否则会报错,例如tar -zxvf mysql-8.0.21.tar
gzip: stdin: not in gzip format
tar: Child returned status 1
tar: Error is not recoverable: exiting now
意思就是改压缩包不是gzip格式压缩的。
注:解压默认是解压在当前目录中,如果当前目录不是/usr/local/
,请切换到/usr/local/
目录下
切换的命令:cd /usr/local/
或者指定解压目录
命令如下:
tar -xvf mysql-8.0.21-linux-glibc2.12-x86_64.tar -C /usr/local/
解压后的文件夹名默认和压缩文件同名,名字太长了带版本号,我们习惯把它简写成mysql
修改文件夹的名称
当前目录为/usr/local/
,执行命令:
mv mysql-8.0.21-linux-glibc2.12-x86_64 mysql
我们把改名后的文件夹的所属改为mysql用户
chown -R mysql:mysql /mysql
当前目录不为/usr/local/
,执行命令:
mv /usr/local/mysql-8.0.21-linux-glibc2.12-x86_64 /usr/local/mysql
我们把改名后的文件夹的所属改为mysql用户
chown -R mysql:mysql /usr/local/mysql
解压tar包后我们看到有三个文件
mysql-test-8.0.21-linux-glibc2.12-x86_64.tar.xz
mysql-8.0.21-linux-glibc2.12-x86_64.tar.xz
mysql-router-8.0.21-linux-glibc2.12-x86_64.tar.xz
MySQL Router 是InnoDB Cluster(MySQL shell + Router + master-slave replication)的一部分,轻量级中间件,在应用和后端数据库之间起到透明的路由分发的作用。
我们先用不到,就之解压mysql-8.0.21-linux-glibc2.12-x86_64.tar.xz
就行。
xz -dc /usr/local/mysql-8.0.21-linux-glibc2.12-x86_64.tar.xz | tar x
或者
tar -xvJf mysql-8.0.21-linux-glibc2.12-x86_64.tar.xz
解压以后要考虑的是通过手动构建
还是初始化自动构建
配置文件,也就是通过yum安装后出现的my.cnf
文件
看有的博主写过文章,在初始化的时候会自动生成my.cnf
文件
但是为了保险起见,我通常采用手动构建的方式,直接配置成我想要的配置
上文中提到的通过yum安装生成的my.cnf
文件中的默认设置,我们也需要手动创建一下,分别是:
#数据文件的存放位置,存放初始化以后的数据
datadir=/var/lib/mysql
#日志文件的存放位置
log-error=/var/log/mysqld.log
创建数据存放目录
mkdir /var/lib/mysql
chmod 777 /var/lib/mysql
日志存放目录是存在的,所以我们先不用管
然后就是最关键的my.cnf
文件
#创建my.cnf文件
touch /etc/my.cnf
#编辑
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=/var/lib/mysql
#设置日志目录
log-error=/var/log/mysqld.log
#设置pid文件目录
pid-file=/var/run/mysqld/mysqld.pid
# 允许最⼤连接数
max_connections=200
# 服务端使⽤的字符集默认为8⽐特编码的latin1字符集
character-set-server=utf8
# 创建新表时将使⽤的默认存储引擎
default-storage-engine=INNODB
lower_case_table_names=1
max_allowed_packet=16M
配置文件修改完成后,我想把日志还有数据都放在mysql文件夹下
执行下面的命令,如果不想修改,想使用默认的配置的可以跳过这一步,直接到初始化mysql
#创建一个文件夹用于放数据文件
mkdir /usr/local/mysql/data
#修改my.cnf 文件中数据目录的配置
vi /etc/my.cnf
找到datadir
的配置,修改为datadir=/usr/local/mysql/data
注释掉下面两行,不设置这两项,在初始化的时候默认会在数据的目录下创建
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
初始化mysql
/usr/local/mysql/bin/mysqld --initialize --user=mysql
初始化完成后在输入的最后一行会打印出初始化密码
格式如下:
[Note] A temporary password is generated for root@localhost: ju_Dfa*5gx
root@localhost:
后的就是初始密码,如果忘记了,用命令查看一下
命令如下:
grep "password" /var/log/mysqld.log
或者在/usr/local/data
中后缀为.err
的文件中查找
设置通过mysqld来快捷启动
#将mysql服务启动文件赋值到启动项
cp ./support-files/mysql.server /etc/init.d/mysqld
修改 /etc/init.d/mysqld
vi /etc/init.d/mysqld
在文件中,找到basedir
、datadir
两项,修改成下面的值(如果前面my.cnf
配置的数据目录没修改不要执行该步)
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
添加执行权限
chmod +x /etc/init.d/mysqld
添加到系统服务
这步可以不执行直接通过service来启动服务
将 mysqld 服务加⼊到系统服务:
chkconfig --add mysqld
最后检查 mysqld 服务是否已经⽣效:
chkconfig --list mysqld
添加到系统服务以后,可以通过 systemctl
来管理mysqld
服务
启动服务
service mysqld start
添加到系统变量
vi ~/.bash_profile
在文件末尾追加
export PATH=$PATH:/usr/local/mysql/bin
更新资源
source ~/.bash_profile
登陆
使用初始密码登陆
mysql -u root -p
样例输出:
Enter password:
输入初始密码,默认是隐藏显示,直接输入然后回车
样例输出:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.31
Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.
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>
windows上安装mysql
1. exe文件安装
exe文件安装,大家应该都很熟悉,基本上都是无脑安装。
推荐文章:win10安装mysql教程
2. 二进制文件安装
安装步骤和linux上的类似
获取
直接从官网下载
我们要选择第二个下载,不要选择第一个,第一个是web版
解压缩
把下载好的压缩包用压缩工具解压到你指定的文件夹下
修改文件夹
把解压后的文件夹名字修改成mysql
手动构建配置文件
- 我们先在
mysql文件夹
下创建一个data文件夹
,作为存放数据的目录 - 再创建一个文件
my.ini
,如果mysql文件夹
下有my-default.ini
文件,把my-default.ini
文件的内容复制到刚刚创建的my.ini
文件中 - 修改
my.ini
文件
配置如下
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8
[mysqld]
# 设置3306端口
port = 3306
# 允许最大连接数
max_connections=20
# 允许连接失败的次数。这是为了防止有人从该主机试图攻击数据库系统
max_connect_errors=10
# 服务端使用的字符集默认为8比特编码的latin1字符集
# 手动设置服务端使用的字符集默认为UTF8
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
#默认使用“mysql_native_password”插件认证
default_authentication_plugin=mysql_native_password
[client]
# 设置mysql客户端连接服务端时默认使用的端口
port=3306
default-character-set=utf8
是不是跟在linux下的配置文件my.cnf
很像呢?
添加到系统变量
在桌面上右键点击我的电脑(或者是此电脑),选择属性
选择高级系统设置
选择环境变量
点击Path选中,然后点击编辑(或者直接双击Path )
点击新建,将mysql的bin目录,添加到系统变量中(我这里的目录是D:/mysql/bin)为了保持一直应使用反斜杠D:\mysql\bin
点击 确定
选项 ,返回上一级, 点击 确定
选项 ==很重要,如果点,直接进行初始化会报错,相当于在linux环境下没有执行source==
初始化mysql
首先要切换到/mysql/bin
目录下
两种初始化的方式
- 无密码初始化(不安全 安装)不会生成初始的 root密码
D:\mysql\bin>mysqld --initialize-insecure --console
- 随机初始密码初始化(“ 默认安全 ”安装)生成随机初始的 root密码
D:\mysql\bin> mysqld --initialize --console
无密码初始化后,在登陆的时候直接回车就可以进入mysql
安装
mysqld -install
启动Mysql服务
net start mysql
登陆
mysql -u root -p
样例输出:
Enter password:
- 无密码初始化:
直接回车,即可登陆
- “默认安全”初始化:
输入初始密码,默认是隐藏显示,直接输入然后回车
样例输出:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.31
Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.
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>
mas上安装mysql
mas大佬,可惜小弟家境贫寒,用不起mas,只能将官方文档奉上~
三、彻底卸载mysql
linux上彻底卸载mysql
停止服务
service mysqld stop
yum方式安装的卸载方法
#查询与mysql有关的包
rpm -qa|grep mysql
#通过yum移除安装的与mysql有关的包
yum remove mysql mysql-server mysql-libs mysql-server
#查找当前目录下的所有名字中有mysql字符的文件
find / -name mysql
样例输出:
/var/spool/mail/mysql
/var/lib/mysql
/usr/local/mysql
/usr/local/mysql/include/mysql
/usr/local/mysql/bin/mysql
删除这些文件,例如:
rm -rf /var/lib/mysql
==注:==我们要分清,删除的是文件还是文件夹,因为rm -rf
会删除文件夹下所有文件
所以我们应该先cd
到要删除的目录下ls
,看看有哪些文件,确保不会误删
比如/var/spool/mail/mysql
这个是创建用户的时候,自动给用户创建的mail,可以通过删除用户的方式删除,不要单独删除这个文件,主要删除/var/lib/mysql
和/usr/local/mysql
两个文件夹就可以了
再次查询,看看删没删干净
find / -name mysql
#删除mysql的配置文件
rm /etc/my.cnf
通用二进制的方式安装的卸载方法
卸载的时候基本上就是安装的逆操作
从系统服务中移除mysql
chkconfig --del mysqld
删除mysql文件夹
rm -rf /usr/local/mysql
从系统变量中删除
vi ~/.bash_profile
将export PATH=$PATH:/usr/local/mysql/bin
这一行删除或者注释掉
查询是否删除成功
chkconfig --list mysqld
删除/etc/init.d/mysqld
rm /etc/init.d/mysqld
删除/etc/my.cnf
rm /etc/my.cnf
删除/var/lib/mysql
rm -rf /var/lib/mysql
查询是否还有名字中含有mysql字符的文件
find / -name mysql
windows上彻底卸载mysql
windows上卸载较为简单,因为有图形化管理软件,这里就不细说了,二进制卸载可以参考文章中绿色卸载的部分
四、开启mysql远程访问
全ip都可远程访问
登陆mysql后,更改mysql数据表的数据来开启远程访问
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
更改数据表
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
更新权限:
mysql> flush privileges;
样例输出:
Query OK, 0 rows affected (0.00 sec)
指定ip可远程访问
登陆mysql后,更改mysql数据表的数据来开启远程访问,仅允许172.40.50.164
远程访问
(改地址为博主假设的地址非真实地址)
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
更改数据表
mysql> update user set user.Host='172.40.50.164' where user.User='root';
样例输出:
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
更新权限:
mysql> flush privileges;
样例输出:
Query OK, 0 rows affected (0.00 sec)
所有ip都不可远程访问
默认就是只能本地登陆,禁止远程访问的。
本地登陆mysql之后
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
mysql> select User,authentication_string,Host from user;
+------------------+------------------------------------------------------------------------+-----------+
| User | authentication_string | Host |
+------------------+------------------------------------------------------------------------+-----------+
| mysql.infoschema | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | localhost |
| mysql.session | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | localhost |
| mysql.sys | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | localhost |
| root | $A$005$ [I=yPp [c<Oi"B.2XVHyvaXHdRw52cyvDjy7BJGvwWOj6LNywRKuUBF1 | localhost |
+------------------+------------------------------------------------------------------------+-----------+
4 rows in set (0.00 sec)
Host
那一栏表示允许访问的host
,%
为所有host
都可访问
五、修改mysql密码
初始密码修改
修改初始密码
mysql> alter user 'root'@'localhost' identified by 'newPassword';
更新权限
mysql> flush privileges;
注意
validate_password
默认情况下已安装。通过实施的默认密码策略validate_password
要求密码至少包含一个大写字母,一个小写字母,一位数字和一个特殊字符,并且密码总长度至少为8个字符。
否则会报错误,如下:
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
也可以通过下面的语句来修改初始密码
ALTER USER USER() IDENTIFIED BY 'newPassword';
以上两种修改密码的方式仅支持通过密码登陆的时候
如果把登陆模式改为免密登陆(--skip-grant-tables)就不能修改密码
错误码如下:
ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement
忘记密码修改
Linux
第一种
停止服务
service mysqld stop
修改配置文件
在/etc/my.cnf
文件的末尾追加下面的内容,保存退出
--skip-grant-tables
启动服务
service mysqld start
登陆
mysql -u root -p
直接回车就可以登陆
使用mysql表
mysql> use mysql;
修改密码
这里的newPassword
为密码,你可以自定义为自己想要设置的密码
mysql> update user set authentication_string=password('newPassword') where user='root';
刷新权限
mysql> flush privileges;
退出
mysql> exit
重新登陆
mysql -u root -p
输入密码(密码是刚刚用命令修改后的密码,这里是newPassword)
Enter password:
回车,成功登陆
如果登陆不成功可以用下面的第二种方法
第二种
暴力法
直接删除mysql文件夹下data文件夹中的所有内容(保留data文件夹)
rm -rf /usr/local/mysql/data
重新初始化数据
/usr/local/mysql/bin/mysqld --initialize --user=mysql
重新启动服务
service mysqld start
会重新生成初始密码
在进行密码修改就可以了,不知道怎么用初始密码修改密码和和找不到初始密码的,看我上一个标题初始密码修改
windows
和linux系统下修改差不多
- 停止服务
- 在配置文件的末尾追加
--skip-grant-tables
,无密码登陆,然后通过修改mysql表中的数据来修改密码 - 或者 直接删除mysql文件夹下data文件夹中的所有内容(保留data文件夹),然后重新初始化数据,重新启动服务,密码就会重置
六、注意事项
如果以前使用操作系统本机软件包管理系统(例如Yum或APT)安装了MySQL,则在使用本机二进制文件安装时可能会遇到问题。确保以前的MySQL安装已完全删除(使用程序包管理系统),并且所有其他文件(例如数据文件的旧版本)也已删除。您还应该检查配置文件(例如/etc/my.cnf
或/etc/mysql
目录)并删除它们。