本文主要介绍CentOS下安装MySQL8.0(解压版),面向蓉蓉同志
至于5.6、5.7、8.0不同版本的测评,简单搜集了下
MySQL 5.6 VS 5.7压测报告
MySQL5.7和MySQL8.0性能测试对比
如果确定是没有安装过MySQL,那么就不用管了,如果不确定可以检查一下
rpm -qa | grep mysql
whereis mysql
find / -name mysql
出现的东西该删就删
下载的方式有很多,我介绍两种自己比较常用的
首先打开MySQL官方下载地址
选择操作系统为Linux - Generic,或者Red Hat Enterprise(网上说是可以,反正我一般都是Linux通用版)
在这里我选择的是 Linux - Generic (glibc 2.12) (x86, 64-bit), Compressed TAR Archive,点后面的下载按钮,后进入到下载页面,在“No thanks, just start my download.”链接上右键,复制到文件下载地址
https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.20-linux-glibc2.12-x86_64.tar.xz
进入CentOS,在想要存放压缩包的地方(我是存放在/usr/local目录下)执行
wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.20-linux-glibc2.12-x86_64.tar.xz
随后将自动下载压缩包
如果服务器上下载速度过慢,可以通过本地下载方式下载,并通过各种手段上传到服务器
步骤与上面说的类似,就不bb了
进入到存放压缩包的目录下,我这里是/usr/local
由于我下的是xz后缀的压缩包,所以执行下面指令解压
tar -Jxvf mysql-8.0.20-linux-glibc2.12-x86_64.tar.xz
通俗的来说,tar是第一道压缩,xz是tar基础上的再压缩。
tar指令拓展
Linux tar命令详解 - 菜鸟教程
以下列几个常用的解压命令
tar -xvf ***.tar #解tar压缩包
tar -zxvf ***.tar.gz #解tar.gz压缩包
tar -Jxvf ***.tar.xz #解tar.xz压缩包
闲的蛋疼的话,可以把文件夹转移到其他想要的地方,或者重命名一下
我这里就比较闲,把原来比较长的文件夹名字重命名为mysql
mv mysql-8.0.20-linux-glibc2.12-x86_64 mysql
解压完毕后,输入
vim /etc/my.cnf
打开mysql配置文件,初次打开如下图
然后对配置文件进行一些必要的修改,具体修改完毕后如下
[mysql_safe]
# modify
log-error=/var/log/mysql/mysql-error.log
# modify
pid-file=/var/run/mysql/mysql.pid
#
# include all files form the config directory
#
!includedir /etc/my.cnf.d
[mysqld]
# modify 修改为自己mysql的根目录
basedir=/usr/local/mysql
# modify 修改为自己mysql根目录下的data目录,不存在也不要紧
datadir=/usr/local/mysql/data
socket=/tmp/mysql.sock
# pid-file=/usr/local/mysql/tmp/mysql.pid
symbolic-links=0
# new 设置用户使用mysql
user=mysql
# new 缓存连接数
back_log=200
# new 最大连接数
max_connections=500
# new 使用mysql_native_password插件认证,否则native连不上,会提示需要升级版本
default_authentication_plugin=mysql_native_password
# new 服务端使用的字符集默认为UTF8
character-set-server=utf8mb4
# new 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# new
[mysql]
# new 设置字符编码为utf8mb4
default-character-set=utf8mb4
# new
[client]
# new 其实是废的,需要改端口时才有用
port=3306
# new 设置字符编码为utf8mb4
default-character-set=utf8mb4
坑:开始把 [client] 放在了最上面,结果无法正常启动,调整位置后正常,反正看不懂的问题
除此之外的异常,可以参考
MySql提示:The server quit without updating PID file(…)失败
感觉第七点不靠谱,不要听
拓展:最常用vim指令介绍
打开文件后,按 a、i、o 都可以进入编辑模式
进入编辑模式后,按 esc 退出编辑模式
:q #退出
:w #保存
:wq #保存并退出
:q! #放弃保存并退出
打开终端,在任意目录下执行下面命令
groupadd mysql
useradd -g mysql mysql
继续修改文件夹访问用户及文件夹权限
chown -R mysql:mysql /usr/local/mysql
chmod -R 755 /usr/local/mysql
设置权限很重要,不然后面会造成log日志没有权限不能生成,pid文件没有权限不能生成等等
切换到mysql的bin目录下
cd /usr/local/mysql/bin
执行mysql初始化命令
./mysqld --initialize
此处如果遇到
./mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory
说明没有安装libaio.so.1,安装即可,CentOS下在终端执行
yum install libaio
安装完毕后再次执行初始化命令
初始化完成时将打印出初始密码
注意!在此之前不要手动创建data文件夹,否则会出现data已存在,初始化失败的情况。如果创建了或者已经初始化过但失败了,可以删除data文件夹重新初始化。
记好初始密码
随便哪个目录下,执行
vim /etc/profile
打开环境变量配置文件,在profile中最下方,新建MYSQL_HOME目录,值是mysql文件夹下的bin文件夹的地址
MYSQL_HOME=/usr/local/mysql/bin
一般会有类似
PATH=$PATH:XXXXXXX
的东西,在这个后面添加
:MYSQL_HOME
完整的就是
MYSQL_HOME=/usr/local/mysql/bin
PATH=$PATH:MYSQL_HOME
并执行立即刷新指令,非常重要,不刷新就不生效
source /etc/profile
此时可以不用非得在mysql/bin目录下运行mysql指令了,可以在任何地方使用mysql指令
在终端下执行以下命令,设置开机自动启动mysql服务
ln -s /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
ln -s /usr/local/mysql/bin/mysql /usr/bin/mysql
意思是将mysql.server文件软连接到 /etc/init.d/mysql目录(类似超链接),系统启动时会自动扫描/etc/init.d/mysql中的服务启动一遍
注意:这边的 /etc/init.d/mysql里的mysql,就是服务名称,可以自定义名字。
拓展:还有个systemctl,也是服务管理。以下是简单筛选的优质资料,以供参考
Linux 服务管理两种方式service和systemctl
systemctl 配置mysql 开机启动
因为上面注册的时候服务名称是mysql,如果有自定义根据自定义的来
在终端任意目录执行以下命令
service mysql start #启动mysql
service mysql stop #停止mysql
service mysql restart #重启mysql
登陆,在终端任意目录执行以下命令
mysql -u root -p
MYSQL8安装后初次登陆必须修改密码,进入mysql后执行以下命令
ALTER USER "root"@"localhost" IDENTIFIED BY "你的新密码";
继续执行
use mysql;
update user set host='%' where user ='root';
FLUSH PRIVILEGES; #立即生效,必须
修改完后,执行quit退出mysql即可
如果是阿里云之类的服务器可以登录阿里云控制台查看,默认是开放3306端口的,如果前面my.cnf中设置为其他端口的话,则需要单独开放一下。
下面介绍下在单机上如何开放防火墙端口
在终端任意目录执行以下命令
#检查是否有或者是否开启firewalld
systemctl status firewalld
#设置3306为永久开放
firewall-cmd --add-port=3306/tcp --permanent
#重启生效
firewall-cmd --reload
#查看防火墙开放端口
firewall-cmd --list-port
拓展:防火墙其他相关指令
systemctl status firewalld #检查firewalld系统服务运行状态
systemctl start firewalld #启动firewalld系统服务
systemctl stop firewalld #停止firewalld系统服务
systemctl restart firewalld #重启firewalld系统服务
#当然,这里用service firewalld xxx亦可
#查看firewall-cmd服务状态
firewall-cmd --state
#重启生效
firewall-cmd --reload
#查询端口8080/tcp是否开放
firewall-cmd --query-port=8080/tcp
#设置开放端口8080/tcp
firewall-cmd --permanent --add-port=8080/tcp
#取消开放端口8080/tcp
firewall-cmd --permanent --remove-port=8080/tcp
参数解释
在客户端Navicat中连接数据库进行测试。over
❤️