学习整理在centos7上安装mysql8.0版本教程
查看linux系统版本
cat /etc/centos-release
uname -a
ldd --version
下载mysql数据库
在命令行执行此命令,下载mysql安装包
wget https://cdn.mysql.com//Downloads/MySQL-8.0/mysql-8.0.42-linux-glibc2.17-x86_64.tar.xz
安装环境检查
# 1.查看有没有以rpm安装的mysql 在任意位置执行这个命令都可以
rpm -qa | grep -i mysql
# 执行完如果有返回值 执行下面的命令
rpm -ev 复制上个命令返回的结果
#如果执行rpm -ev 命令报错就加上--nodeps
rpm -ev --nodeps 上个命令返回的结果
举例如果执行rpm -qa | grep -i mysql命令返回mysql-libs-5.5.68-1.el7.x86_64
那么就执行rpm -ev mysql-libs-5.5.68-1.el7.x86_64 如果执行这条命令报错那么就执行
rpm -ev --nodeps mysql-libs-5.5.68-1.el7.x86_64
我的没有返回值所以就没截图举例
2.上面的命令执行完后,接着删除mysql相关目录
# 获取mysql相关目录 任意位置执行这个命令都可以
find / -name mysql
#上面的命令有返回值的话执行 删除所有相关目录,-rf:表示不询问直接删除文件 把所有返回的目录删完
rm -rf 返回的目录
#再执行一次 验证有没有删干净
find / -name mysql
3.删除my.cnf文件
#首先查找my.cnf文件存在哪个目录
find / -name my.cnf
#删除 my.cnf,如果上条命令有返回的目录执行下面的命令,把所有的my.cnf删完,如果没有返回就不用执行了
rm -rf 返回的my.cnf所在的目录
4.查找存不存在mariadb相关的文件
yum list installed | grep mariadb
如果查找出来存在相关的文件 执行 直到把所有的都删完
yum remove xxx(指刚刚查出来的maridb的文件名字)
删完后再执行一次yum list installed | grep mariadb如果没有返回值表示删干净了
如果以前设置了mysql的环境变量需要删除环境变量
#查看并编辑环境变量
#进入vim后按i进行编辑 编辑完后 按esc 再按shift+: 输入wq保存并退出,输入!q表示强制退出不保存
vim /etc/profile
# 删除环境变量后,刷新环境
source /etc/profile
查看是否卸载干净,如果没有返回值表示卸载干净了
rpm -qa|grep -i mysql
解压mysql安装包
tar -xvf mysql-8.0.42-linux-glibc2.17-x86_64.tar.xz
mv mysql-8.0.42-linux-glibc2.17-x86_64/ mysql-8.0.42
创建MySQL需要的目录及授权
在解压目录,将修改名称后的整个文件,移动到软件安装目录,/usr/local/
mv mysql-8.0.42 /usr/local/mysql
然后创建三个新文件夹,根据自己的需求创建对应的文件,我本地是挂载了一个新的数据磁盘,所以就放到磁盘目录了,并没有在系统盘
cd /data/
# 数据存储
sudo mkdir mysqldata
# 日志存储
sudo mkdir mysqllog
# 临时文件
sudo mkdir mysqltmp
新增用户组
groupadd mysql
新增组用户
useradd -g mysql mysql
chown -R mysql:mysql /usr/local/mysql/
chown -R mysql:mysql /data/mysqllog
chown -R mysql:mysql /data/mysqltmp
chown -R mysql:mysql /data/mysqldata
配置mysql环境变量
PATH=$PATH:/usr/local/mysql/bin
export PATH
wq保存配置文件,执行以下命令, 重新加载环境变量。
source /etc/profile
编写MySQL配置文件
[mysqld]
#允许所有 IP 连接(0.0.0.0 表示不限制)
bind-address = 0.0.0.0
#自定义 MySQL 服务端口(默认 3306)
port = 6033
#MySQL 安装目录。
basedir = /usr/local/mysql
#数据文件存储路径
datadir = /data/mysqldata
group_concat_max_len = 4294967295
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
#本地连接使用的 Unix 套接字文件。
socket=/data/mysqldata/mysql.sock
innodb_strict_mode=0
[mysql]
#本地连接使用的 Unix 套接字文件。
socket=/data/mysqldata/mysql.sock
[mysqld_safe]
#错误日志路径(排查故障关键文件)
log-error = /data/mysqllog/error.log
#进程 ID 文件路径。
pid-file = /data/mysqldata/mysql.pid
#pid-file = /opt/mysql-8.0.42/data/mysql.pid
#临时文件目
tmpdir = /data/mysqltmp
#表名存储为小写,比较时不区分大小写。
lower_case_table_names = 1
#表名存储为创建时的大小写,但比较时转换为小
#lower_case_table_names = 2
#默认引擎(推荐 InnoDB)
default-storage-engine=INNODB
#InnoDB 缓冲池大小
innodb_buffer_pool_size = 5G
# 服务端默认字符集
character-set-server = utf8mb4
# 默认排序规则
collation-server = utf8mb4_unicode_ci
# 每个新连接初始化时执行的SQL
init_connect = 'SET NAMES utf8mb4'
#允许的最大数据包大小(避免大数据插入/导出失败)
max_allowed_packet=500M
#使用传统密码认证(兼容旧版客户端)
default-authentication-plugin = mysql_native_password
初始化数据库
一定要在mysql安装目录下的bin目录下执行,路径换成你自己的路径,我的安装路径在
/usr/local/mysql/,所以要在/usr/local/mysql/bin下执行,你们要根据自己的路径去执行。
./mysqld --initialize --user=mysql --datadir=/data/mysqldata --basedir=/usr/local/mysql
报错
./mysqld --initialize --user=mysql --datadir=/data/mysqldata --basedir=/usr/local/mysql
./mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory
查看是否安装了libaio
使用命令yum install -y libaio进行安装
yum -y install libaio
在执行初始化命令,就不报错了
执行完上面的命令,会输出几行日志其中包含了初始化随机生成的密码,如下图红框中,将这个临时密码复制保存起来,一会儿要用到。
如果执行完初始化命令没有输出日志,或者忘了保存临时密码了,可以去日志文件中查看,首先进入到一开始创建的log目录中
初始化msyql服务
必须在mysql的安装目录下执行
cd /usr/local/mysql/
cd support-files/
cp mysql.server /etc/init.d/mysql
chmod +x /etc/init.d/mysql
chkconfig --add mysql
指令作用如下
cp -a ./support-files/mysql.server /etc/init.d/mysql:这条指令用于将MySQL服务器的启动脚本mysql.server从MySQL安装目录下的./support-files文件夹复制到系统的服务管理目录/etc/init.d,以便可以使用系统服务管理工具来控制MySQL服务。
chmod +x /etc/init.d/mysql:这条指令用于给复制到/etc/init.d目录下的mysql脚本文件添加执行权限,确保它能够被系统调用执行启动、停止等操作。
chkconfig --add mysql:这条指令用于将MySQL服务添加到系统服务的管理系统中,chkconfig是Red Hat系列Linux系统(如CentOS、RHEL)中用于管理服务的命令,–add选项表示添加一个新的服务。执行后,MySQL服务将能够通过service命令或systemctl(在使用systemd的系统上)进行启动、停止和重启
查看是否成功,如过出现如图所示输出则表示成功了
chkconfig --list mysql
启动mysql
service mysql start
修改初始化密码
进入mysql安装目录的bin目录,执行
./mysql -uroot -p
输入刚刚让你保存的临时密码,输入后是不显示的,所以只需要输入或者粘贴一次就行,回车登录mysql成功。
接着执行下面的命令,单引号中是你设置的新密码,我设置成qipa250Qipa
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'qipa250Qipa';
这样就修改成功了,可以退出mysql重新登陆试一下。输入exit退出,再次执行登录命令,登录成功
配置Linux 系统服务工具,使MySQL可以用systemctl命令启动
如果之前没有安装过mysql,应该不存在的,我是装好了所以才存在,不论存不存在这个文件,执行下面的命令,不存在这个文件的执行完会打开一个空的文本,存在的会打开这个文本。(vi/vim编辑器的部分命令:i 编辑,esc退出编辑 shift+: 输入wq保存并退出)
vi /etc/systemd/system/mysql.service
不存在这个文本的,将下面的配置粘贴进去,之前存在的可以看看配置有没有区别,或者直接覆盖掉之前的文本。注意路径要换成自己msyql安装的路径,尤其是pid,pid要与前面my.cnf中的配置的路径保持一致否则会出错,一般情况下,pid路径就设置为/run/mysqld/mysql.pid,不改动,其他的路径要保证和自己安装的mysql路径一样。
[Unit]
#描述服务为MySQL服务器
Description=MySQL Server
#指定在网络服务启动后再启动MySQL服务
After=network.target
[Service]
#指定服务运行用户为mysql
User=mysql
#指定服务运行用户组为mysql
Group=mysql
#定义服务类型为simple(默认类型)
Type=simple
#指定PID文件路径 这个不改动
PIDFile=/run/mysqld/mysql.pid
#主启动命令,指定MySQL二进制文件和配置文件路径 你自己的路径
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf
#停止服务时执行的命令 你自己的路径 这个用户与密码是你自己的
ExecStop=/usr/local/mysql/bin/mysqladmin -uroot -pqipa250Qipa shutdown
#设置服务在异常退出时自动重启
Restart=on-failure
#禁用私有临时目录功能
PrivateTmp=false
#设置启动超时时间为300秒
TimeoutStartSec=300
#设置停止超时时间为30秒
TimeoutStopSec=30
#设置服务重启间隔为5秒
RestartSec=5s
[Install]
#指定服务所属运行级别为多用户模式
WantedBy=multi-user.target
重载配置
systemctl daemon-reload
测试是否可以使用systemctl停止
systemctl stop mysql
service mysql stop
启动
systemctl start mysql
service mysql start
查看状态 启动后查看状态为 active(runing)表示启动成功
systemctl status mysql
service mysql status
到此汇总一下启动MySQL的几种方式
汇总一下启动mysql的几个方式,前提是按照步骤一直做到这一步。
1.进入mysql-8.0.42的support-files目录下执行命令./mysql.server start启动,执行./mysql.server stop停止
2.进入mysql-8.0.42的bin目录下执行命令./mysqld_safe & 启动
执行…/support-files/mysql.server stop 停止
3.在任意目录下执行 sudo service mysql start启动,执行sudo service mysql stop停止
4.任意目录下执行 systemctl start mysql启动,执行systemctl stop mysql停止
远程连接配置
启动MySQL服务,登录mysql客户端,依次执行如下命令
mysql> use mysql;
mysql> update user set host='%' where user='root' and host='localhost';
mysql> flush privileges;
执行完毕后,打开navicat,输入自己服务器的地址,mysql的用户名和密码,测试连接成功。