@TOC
1.MySQL企业应用的版本分析:star::star::star::star::star:
官网: https://downloads.mysql.com/archives/community/
序号 | 大版本应用 | 小版本应用 |
---|---|---|
01 | MySQL 5.6 | 5.6.36 5.6.38 5.6.40 5.6.46 (GA 6-12月) 2021 01月 常规/扩展服务全部停止 |
02 | MySQL 5.7 (应用更加广泛) | 5.7.20 5.7.22 5.7.24 5.7.26 ..... 5.7.40 (GA最新双数版本) 2023 10月 常规/扩展服务全部停止 |
03 | MySQL 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
评论