在安装之前需要查看服务器上是否已经安装了mysql或者mariadb, 如果需要同时安装mariadb 和mariadb需要修改端口
rpm -qa |grep mysql //查询是否有mysql
whereis mysql //查询是否有mysql相关文件
rpm -qa | grep mariadb //查询是否有mariadb
如果发现已经安装mysql或者mariadb,需要先卸载原有的应用,
以使用下面命令将其删除 rpm -e --nodeps 文件名
rpm -e --nodeps mariadb //卸载mariadb
rpm -e --nodeps mysql //卸载mysql
下载地址: MySQL :: Download MySQL Community Server
选择对应的安装包进行下载,并将安装包放到服务器上
下载时默认是最新版本的安装包, 如果需要下载其他版本可以点击Archiver 查看其他版本安装包
上传安装包后需要解压mysql安装包 (我这里是将安装包解压到 /usr/local 目录下)
tar -zxvf mysql-8.0.31-linux-glibc2.12-i686.tar.xz -C /usr/local/mysql-8.0.31-linux-glibc2.12-i686
因为解压的默认文件名称很长这里选择修改文件夹名称(如果将文件名称改为mysql可以省略一些配置)
cd /usr/local //进入mysql文件所在目录
mv mysql-8.0.31-linux-glibc2.12-i686 mysql-8 //修改文件名
创建一个属组,添加mysql用户,紧接着修改属组及属组用户和文件夹权限(在mysql上级目录执行,这里是/usr/local目录下)
groupadd mysql //创建属组
useradd -r -g mysql mysql //创建用户
chown -R mysql:mysql mysql-8 //修改属组及属组用户(mysql-8为刚刚修改的文件名)
chmod -R 775 mysql-8 //修改文件夹权限(mysql-8为刚刚修改的文件名)
进入mysql安装目录创建data目录存储数据
cd /usr/local/mysql-8 //进入解压的mysql目录下
mkdir data //创建data文件夹
进入bin目录执行初始化安装(记得更换相应的目录)
我这里更改了数据库lower-case-table-names配置,可以根据需要去留这个配置
(注:在mysql8中这个配置只能在初始化数据库时更改, 安装后在更改很麻烦,直接改配置是不可以的,如果是mysql5.7则没有这个限制)
这是一个全局参数,参数文件里面的命令行模式设置是--lower-case-table-names=1 默认值是0
默认是不打开的,值的类型是Integer,默认值为0,最小值1,最大值2.
0:表名字是存储给定的大小并且是区分大小写的。
1:表名字存储在磁盘是小写的,但是比较的时候不区分大小写。
2:存储的时候是按照给定的大小写存储的,比较的时候是按照小写的方式比较。
注意:这里有两个安装路径,datadir是设置mysql数据库的数据存放目录(刚刚创建的目录),basedir是设置mysql的安装目录 (在 my.cnf 配置文件中有配置)
cd bin //进入bin目录
//执行下面的命令初始化数据库
./mysqld --initialize-insecure --user=mysql
--lower-case-table-names=1
--datadir=/usr/local/mysql-8/data
--basedir=/usr/local/mysql-8
安装完成之后,最下方出现临时密码,记事本记录出现的临时密码,因为等会第一次进入需要它来登录mysql
修改指定的环境变量路径(如果之前mysql文件名改的名字是mysql,那这一步就可以省略了,按默认的就可以了。)
vi /usr/local/mysql-8/support-files/mysql.server //修改文件
将下面配置中的目录修改为自己的路径 按 i 进行修改,改完后按Esc键 输入 :wq 保存文件
然后拷贝这份启动文件到系统环境下,当然建立软连接也可以,我这里使用软连接的方式
ln -s /usr/local/mysql-8/support-files/mysql.server /etc/init.d/mysql
然后查看连接是否成功
ll /etc/init.d/mysql
再添加bin目录的软连接
ln -s /usr/local/mysql-8/bin/mysql /usr/local/bin/mysql
检查是否创建查成功
ll /usr/local/bin/mysql
vi /etc/my.cnf
修改其中相关的配置: 按 i 进行修改,改完后按Esc键 输入 :wq 保存文件
注: 注意修改 安装目录和数据目录
如果安装版本为mysql8 初始化时没有添加lower_case_table_names=1配置则需要删掉或者注释掉这个配置 mysql5.7则不影响
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8
[mysqld]
# 作用是禁止域名解析:在mysql的授权表中就不能使用主机名了,只能使用IP
skip-name-resolve
# 设置3306端口
port = 3306
#设置远程访问ip
bind-address=0.0.0.0
# 设置mysql的安装目录(修改成自己的目录)
basedir=/usr/local/mysql-8
# 设置mysql数据库的数据的存放目录(修改成自己的目录)
datadir=/usr/local/mysql-8/data
# 允许最大连接数
max_connections=200
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
#设置查询操作等不区分大小写,(如果初始化时没有加这个配置则需要去掉或者#注释掉,否则无法启动)
lower_case_table_names=1
设置文件权限
chmod -R 775 /etc/my.cnf
启动相关命令:
service mysql start //启动mysql服务
service mysql stop //停止mysql服务
service mysql restart //重启mysql服务
如果需要可以 设置开机自启
chkconfig --add mysql
查看是否开启
chkconfig --list
首次登录mysql,并把密码修改 使用刚才记录的临时密码登录进去
mysql -uroot -p
修改root账户的密码为123456(自定义)出现Query OK 则证明成功修改
注: mysql8与mysql5.7修改方式不同(以下写出两个版本的方式)
ALTER USER USER() IDENTIFIED BY '123456'; //mysql8
set password for root@localhost = password('123456') //mysql5.7
如果没有开放3306端口的话是连不上的 开放3306端口
firewall-cmd --zone=public --add-port=3306/tcp --permanent
开放端口需要重启防火墙
firewall-cmd --reload
配置远程连接用户(可以不配置,使用root用户连接)
CREATE USER '用户名'@'host' IDENTIFIED BY '密码';
//mysql8需要先执行上面的命令后执行下面的命令,mysql5.7则不需要
grant all privileges on *.* to '用户名'@'%' identified by '密码'
注意: 其中%是指任意ip,自己自定义一个远程可以访问的账户,账号和密码可以和本地root同名。
查看mysql用户
select host,user,password_expired,password_last_changed,password_lifetime FROM mysql.user
当远程连接出现ERROR 1396 (HY000): Operation ALTER USER failed for ‘root‘@‘%‘错误时
说明MySQL 没有开放远程登录的权限
解决办法 :
1、远程链接服务器,在服务器内mysql系统目录下的/bin文件下执行mysql -u root -p;输入密码登入mysql;
2、在mysql中执行use mysql 命令,进入系统数据库
3、在mysql数据库中执行 select host from user where user = 'root';如果返回结果如下图:
该结果表示是由于当前的root用户限制在当前的内网ip内访问的,需要修改他的访问域。
4、在mysql数据库中执行 update user set host = '%' where user = 'root';
5、执行完成后通过命令 service mysql restart 来重启mysql数据库。
ps:(如果上面还未生效,请执行:flush privileges; 这个命令是刷新MySQL的权限相关表)