标签搜索

mysql数据库服务版本升级

lilymaxyz
2025-01-17 / 0 评论 / 4 阅读 / 正在检测是否收录...

@TOC

1.MySQL企业应用的版本分析:star::star::star::star::star:

官网: https://downloads.mysql.com/archives/community/

序号大版本应用小版本应用
01MySQL 5.65.6.36 5.6.38 5.6.40 5.6.46 (GA 6-12月)
2021 01月 常规/扩展服务全部停止
02MySQL 5.7 (应用更加广泛)5.7.20 5.7.22 5.7.24 5.7.26 ..... 5.7.40 (GA最新双数版本)
2023 10月 常规/扩展服务全部停止
03MySQL 8.0 (属于最新版本)8.0.11 8.0.17+ 8.0.18 8.0.26 8.0.32 (GA最新双数版本)

MySQL企业应用的发布版本:

  • C : 表示为社区版本,属于开源免费版本
  • E : 表示为企业版本,属于开源盈利版本

2.数据库服务下载安装

2.1.官网下载

官网: https://downloads.mysql.com/archives/community/

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.2.下载安装Mysql8.0.26:star::star:

2.2.1.系统环境准备

cat /etc/redhat-release 
CentOS Linux release 7.9.2009 (Core)

ip a 
10.0.0.8

vi /etc/hosts 
10.0.0.8 master 
 
systemctl is-active firewalld    -- 防火墙服务关闭
unknown
systemctl is-enabled firewalld
disabled

getenforce   -- selinux关闭
Disabled

rpm -qa|grep mariadb       --卸载与mysql冲突的软件包
yum remove -y mariadb-libs

yum install -y libaio-devel  -- 解决依赖

2.2.2.软件安装部署

tar xf mysql-8.0.26-linux-glibc2.12-x86_64.tar.xz
ln -s mysql-8.0.26-linux-glibc2.12-x86_64 mysql 

#配置环境变量:
vi /etc/profile
export PATH=$PATH:/usr/local/mysql/bin

source /etc/profile
# 可能报错,解决方法
# ln -s /usr/lib64/libtinfo.so.6 /usr/lib64/libtinfo.so.5
mysql -V 

#创建数据库存储目录
mkdir -p /data/3306/data  

#创建数据库服务管理用户
groupadd -r mysql
useradd -r -g mysql -s /sbin/nologin mysql
id mysql 
chown -R mysql.mysql /data/3306/data   

2.2.3.软件初始化过程

mariadb -- mysql -- show databases -- mysql -- use mysql -- show tables -- user 

mysqld --initialize-insecure  --user=mysql  --datadir=/data/3306/data  --basedir=/usr/local/mysql  

--initialize-insecure:不安全初始化
#表示数据库启动后,没有密码信息

--initialize:安全初始化
#表示数据库启动后,会有默认随机密码

初始化失败常见错误:
1)依赖软件没有安装

yum install -y libaio-devel

2)数据库无法应用

  • 初始化参数信息书写有问题
  • 数据目录不是空目录

3)用户是否创建/数据目录是否创建/程序目录路径是否指定准确

2.2.4.编写配置文件

cat > /etc/my.cnf <<EOF
[mysql]
socket=/tmp/mysql.sock
[mysqld]
user=mysql
basedir=/usr/local/mysql
datadir=/data/3306/data
socket=/tmp/mysql.sock
EOF

2.2.5.启动数据库服务

cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
/etc/init.d/mysqld start


netstat -lntup | grep mysql
# 进入数据库
mysql

2.2.6.数据库安装或启动失败排错方法

方式一:查看错误日志文件
ll /data/3306/data/master.err

方式二:没有错误日志文件
查看配置文件信息 

方式三:进程或端口信息冲突

2.2.7.报错信息

[14:17:03 root@Rocky8 bin]# mysql --version
mysql: error while loading shared libraries: libtinfo.so.5: cannot open shared object file: No such file or directory

在这里插入图片描述

2.3.下载安装Mysql5.6.48:star::star:

2.3.1.下载软件程序包

cd /usr/local/
wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.6.48-linux-glibc2.12-x86_64.tar.gz

2.3.2.解压安装软件程序

tar xf mysql-5.6.48-linux-glibc2.12-x86_64.tar.gz
ln -s mysql-5.6.48-linux-glibc2.12-x86_64 mysql56

#配置环境变量:
vi /etc/profile
export PATH=$PATH:/usr/local/mysql56/bin

source /etc/profile

# 可能报错,解决方法
# ln -s /usr/lib64/libncurses.so.6.1 /usr/lib64/libncurses.so.5
mysql -V 

#创建数据库存储目录
mkdir -p /data/3356/data

#创建数据库服务管理用户
groupadd -r mysql
useradd -r -g mysql -s /sbin/nologin mysql
id mysql 
chown -R mysql.mysql /data/3356/data

2.3.3.初始化数据库服务

/usr/local/mysql56/scripts/mysql_install_db --user=mysql  --datadir=/data/3356/data --basedir=/usr/local/mysql56/

2.3.4.编写配置文件

cat >/data/3356/data/my.cnf<<EOF
[mysqld]
server_id=3356
port=3356
user=mysql
basedir=/usr/local/mysql56
datadir=/data/3356/data
socket=/tmp/mysql3356.sock
EOF

2.3.5.启动数据库服务

cp /usr/local/mysql56/support-files/mysql.server /etc/init.d/mysqld
/etc/init.d/mysqld start

或者

cat >/usr/lib/systemd/system/mysqld3356.service<<EOF
[Unit]
Description=MySQL Server
Documentation=mysqld.service
After=network.target
After=syslog.target
 
[Install]
WantedBy=multi-user.target
 
[Service]
User=mysql
Group=mysql
ExecStart=/usr/local/mysql56/bin/mysqld --defaults-file=/etc/my.cnf
LimitNOFILE = 5000
EOF

systemctl daemon-reload
systemctl start mysqld3356

netstat -lntup | grep mysql
mysql
mysql -uroot -S /tmp/mysql3356.sock

2.4.下载安装Mysql5.7.30:star::star:

2.4.1.下载软件程序包

cd /usr/local/
wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.30-linux-glibc2.12-x86_64.tar.gz

2.4.2.解压安装软件程序

tar xf mysql-5.7.30-linux-glibc2.12-x86_64.tar.gz
ln -s mysql-5.7.30-linux-glibc2.12-x86_64 mysql57

#配置环境变量:
vi /etc/profile
export PATH=$PATH:/usr/local/mysql57/bin

source /etc/profile

# 可能报错,解决方法
# ln -s /usr/lib64/libncurses.so.6 /usr/lib64/libncurses.so.5
# ln -s /usr/lib64/libtinfo.so.6 /usr/lib64/libtinfo.so.5
mysql -V 

#创建数据库存储目录
mkdir -p /data/3357/data
#创建数据库服务管理用户
groupadd -r mysql
useradd -r -g mysql -s /sbin/nologin mysql
id mysql 
chown -R mysql.mysql /data/3357/data

2.4.3.初始化数据库服务

/usr/local/mysql57/bin/mysqld --initialize-insecure --user=mysql  --datadir=/data/3357/data  --basedir=/usr/local/mysql57

2.4.4.编写配置文件

cat >/data/3357/data/my.cnf <<EOF
[mysqld]
server_id=3357
port=3357
user=mysql
basedir=/usr/local/mysql57
datadir=/data/3357/data
socket=/tmp/mysql3357.sock
EOF

2.4.5.启动数据库服务

cat >/usr/lib/systemd/system/mysqld3357.service<<EOF
[Unit]
Description=MySQL Server
Documentation=mysqld.service
After=network.target
After=syslog.target
 
[Install]
WantedBy=multi-user.target
 
[Service]
User=mysql
Group=mysql
ExecStart=/usr/local/mysql57/bin/mysqld --defaults-file=/data/3357/data/my.cnf
LimitNOFILE = 5000
EOF

systemctl daemon-reload
systemctl start mysqld3357

netstat -lntup | grep mysql
mysql
mysql -uroot -S /tmp/mysql3357.sock

在这里插入图片描述

2.6.生成测试数据

create database company;

use company;

-- 创建部门表
DROP TABLE IF EXISTS dept; 
CREATE TABLE `dept` (
  `deptno` int(11) PRIMARY KEY NOT NULL COMMENT '部门编号',
  `dname` varchar(14) NOT NULL COMMENT '部门名称',
  `loc` varchar(13) NOT NULL COMMENT '部门所在地'
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='部门表';
 
-- 向部门表插入数据
INSERT INTO dept VALUES (10,'ACCOUNTING','NEW YORK'),
(20,'RESEARCH','DALLAS'),
(30,'SALES','CHICAGO'),
(40,'OPERATIONS','BOSTON');
 
-- 创建员工表
DROP TABLE IF EXISTS emp;
CREATE TABLE `emp` (
  `empno` int(11) PRIMARY KEY NOT NULL COMMENT '员工编号',
  `ename` varchar(10) DEFAULT NULL COMMENT '员工姓名',
  `job` varchar(9) DEFAULT NULL COMMENT '工作岗位',
  `mgr` int(11) DEFAULT NULL COMMENT '直属领导',
  `hiredate` date DEFAULT NULL COMMENT '入职时间',
  `sal` double DEFAULT NULL COMMENT '工资',
  `comm` double DEFAULT NULL COMMENT '奖金',
  `deptno` int(11) DEFAULT NULL COMMENT '所属部门'
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='员工表';

-- 向员工表插入数据
INSERT INTO emp VALUES(7369,'SMITH','CLERK',7902,"1980-12-17",800,NULL,20),
(7499,'ALLEN','SALESMAN',7698,'1981-02-20',1600,300,30),
(7521,'WARD','SALESMAN',7698,'1981-02-22',1250,500,30),
(7566,'JONES','MANAGER',7839,'1981-04-02',2975,NULL,20),
(7654,'MARTIN','SALESMAN',7698,'1981-09-28',1250,1400,30),
(7698,'BLAKE','MANAGER',7839,'1981-05-01',2850,NULL,30),
(7782,'CLARK','MANAGER',7839,'1981-06-09',2450,NULL,10),
(7788,'SCOTT','ANALYST',7566,'1987-07-03',3000,NULL,20),
(7839,'KING','PRESIDENT',NULL,'1981-11-17',5000,NULL,10),
(7844,'TURNER','SALESMAN',7698,'1981-09-08',1500,0,30),
(7876,'ADAMS','CLERK',7788,'1987-07-13',1100,NULL,20),
(7900,'JAMES','CLERK',7698,'1981-12-03',950,NULL,30),
(7902,'FORD','ANALYST',7566,'1981-12-03',3000,NULL,20),
(7934,'MILLER','CLERK',7782,'1981-01-23',1300,NULL,10);
 
 
-- 创建工资等级表
DROP TABLE IF EXISTS salgrade;
CREATE TABLE `salgrade` (
  `grade` int(11) DEFAULT NULL COMMENT '等级',
  `losal` double DEFAULT NULL COMMENT '最低工资',
  `hisal` double DEFAULT NULL COMMENT '最高工资'
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='工资等级表';
 
-- 向工资等级表插入数据
INSERT INTO salgrade VALUES (1,700,1200),(2,1201,1400),(3,1401,2000),(4,2001,3000),(5,3001,9999);

3.数据库版本升级介绍5.6.48 -- 5.7.30 -- 8.0.26

5.6.48 -- 5.7.30 -- 8.0.26

3.1.数据库版本升级方法:

  • Inplace-就地 风险更高 单台数据库服务器 数据不能有损坏 升级过程中不能影响业务
    :one: 在同一台服务器中,需要部署更高版本数据库服务实例
    :two: 低版本数据库中的数据进行备份迁移,迁移到高版本服务中(物理备份方式--停止服务)
    :three: 运行启动高版本数据库服务实例,进行测试
    :four: 停止低版本数据库服务,将业务迁移到新版数据库
  • Mergeing-迁移 安全性更高 多台数据库服务器
    :one: 在不同服务器中,可以部署更高版本数据库服务实例
    :two: 低版本数据库中的数据进行备份迁移,迁移到高版本服务中(逻辑备份方式/主从同步)
    :three: 运行启动高版本数据库服务实例,进行测试
    :four: 停止低版本数据库服务,将业务迁移到新版数据库

3.2.数据库升级规则

数据库服务官方参考资料: https://dev.mysql.com/doc/refman/8.0/en/upgrade-paths.html

在这里插入图片描述

在这里插入图片描述
数据库版本升级规则:

  • :one: 数据库服务版本升级时,只支持在GA(General Availability)版本之间进行升级
  • :two: 数据库服务版本升级时,支持从数据库5.6到5.7再到8.0,跨版本升级,但是需要先将5.6升级到最新小版本,在进行跨版本升级
  • :three: 数据库服务版本升级时,需要提前考虑好版本回退的方案,最好升级前做好数据备份(特别是向8.0版本升级)
  • :four: 数据库服务版本升级时,制定的升级方案和升级步骤,需要尽可能降低数据库服务停机的时间

3.3.数据库版本升级流程:

  • :one: 数据库服务数据备份保存(可以采用热备冷备两种方案,冷备是需要停止业务后备份,热备是无需停止业务备份)
  • :two: 数据库服务最新程序安装(最新版本数据库服务安装过程时,无需停止原有数据库旧版服务)
  • :three: 数据库服务原有程序关闭(网站显示维护页面)
  • :four: 数据库服务最新程序启动(加载原有程序数据实现挂库升级,并采用跳过授权表和跳过网络方式启动
  • :five: 数据库服务升级数据结构(数据库服务升级程序后,还需要升级数据系统结构信息,因此升级时间和数据量无关)
  • :six: 数据库服务可以正常重启(数据库服务升级完毕后,确认数据库服务是可以正常完成重启操作)
  • :seven: 数据库服务功能测试验证(反复核实验证与数据库服务相关的各项功能是否正常)
  • :eight: 数据库服务升级工作完毕(取消网站维护页面,恢复正常网站线上运营业务)

4.数据库服务升级过程实战

4.1.数据库版本升级步骤一:数据库服务器最新程序安装

4.2.企业数据库实战练习一:演示 5.6.48 -> 5.7.30 本地升级

4.2.1.进行数据库服务备份操作

物理备份 逻辑备份-mysqldump  主从同步 

4.2.2.将原有数据信息导入到新版数据库服务

迁移恢复数据

4.2.3.进行前期新版数据库功能测试

web服务器(程序代码)--- 5.7数据库服务(业务数据) -- 浏览器访问测试

4.2.4.停止旧版数据库服务 (网站维护页通知)

systemctl stop mysqld3356.service 

4.2.5.备份原有数据信息 :star::star:

物理备份:cp -a /data/3356/data/  /backup/

4.2.6.实现数据挂库升级 :star::star::star:

cat /data/3356/data/my.cnf 
[mysqld]
server_id=3356
port=3356
user=mysql
basedir=/usr/local/mysql57  # 新版程序加载
datadir=/data/3356/data
socket=/tmp/mysql3356.sock

#配置环境变量:
vi /etc/profile
export PATH=$PATH:/usr/local/mysql57/bin

source /etc/profile

# 安全模式启动新版数据库服务
/usr/local/mysql57/bin/mysqld_safe --defaults-file=/data/3356/data/my.cnf --skip-grant-tables --skip-networking &
# 实现对原有数据库中数据信息的挂库升级操作
/usr/local/mysql57/bin/mysql_upgrade -S /tmp/mysql3356.sock --force

挂库升级:

  • 将数据目录结构调整
  • 将授权表结构调整

在这里插入图片描述

4.2.7.重新正常启动新版数据库服务

pkill mysql
vim /usr/lib/systemd/system/mysqld3356.service
ExecStart=/usr/local/mysql57/bin/mysqld --defaults-file=/data/3356/data/my.cnf

systemctl daemon-reload 
systemctl start mysqld3356.service

4.2.8.测试完毕后,撤销网站维护页面,恢复网站业务

4.3.企业数据库实战练习二:演示 5.7.30 -> 8.0.26 本地升级

4.3.1.进行数据库服务备份操作

物理备份 逻辑备份-mysqldump  主从同步 

4.3.2.将原有数据信息导入到新版数据库服务

迁移恢复数据

4.3.3.进行前期新版数据库功能测试

web服务器(程序代码)--- 5.7数据库服务(业务数据) -- 浏览器访问测试

4.3.4.停止旧版数据库服务 (网站维护页通知)

systemctl stop mysqld3356

4.3.5.备份原有数据信息

物理备份:cp -a /data/3356/data/  /backup/

4.3.6.实现数据挂库升级

cat /data/3356/data/my.cnf 
[mysqld]
server_id=3356
port=3356
user=mysql
basedir=/usr/local/mysql
datadir=/data/3356/data
socket=/tmp/mysql3356.sock

#配置环境变量:
vi /etc/profile
export PATH=$PATH:/usr/local/mysql/bin

source /etc/profile

# 安全模式启动新版数据库服务
mysqld_safe --defaults-file=/data/3356/data/my.cnf --skip-grant-tables --skip-networking &

挂库升级:

  • 将数据目录结构调整
  • 将授权表结构调整

4.3.7.重新正常启动新版数据库服务

pkill mysql
vim /usr/lib/systemd/system/mysqld3356.service
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/data/3356/data/my.cnf

systemctl daemon-reload 
systemctl start mysqld3356.service

4.4.升级失败,进行数据库升级回滚;

4.4.1.停止数据库服务

4.4.2.恢复备份数据目录

cp -a /backup/data  /data/3356/

4.4.3.修改配置文件信息

cat /data/3356/data/my.cnf    -- 升级后配置文件
[mysqld]
server_id=3356
port=3356
user=mysql
basedir=/usr/local/mysql
datadir=/data/3356/data
socket=/tmp/mysql3356.sock


cat /data/3356/data/my.cnf    -- 升级失败回滚配置文件
[mysqld]
server_id=3356
port=3356
user=mysql
basedir=/usr/local/mysql57
datadir=/data/3356/data
socket=/tmp/mysql3356.sock

4.4.4.修改启动文件

vim /usr/lib/systemd/system/mysqld3356.service   -- 升级后调整 
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/data/3356/data/my.cnf

-- 回滚后
ExecStart=/usr/local/mysql/bin/mysqld57 --defaults-file=/data/3356/data/my.cnf

4.4.5.恢复原本数据库服务

systemctl daemon-reload 
systemctl start mysqld3356.service

endl

0

评论

博主关闭了所有页面的评论