1 数据库升级方式:RPM包方式升级

[亲测有效]

环境
OS: CENTOS 7
DB: MYSQL 5.7.24-27

1.1 数据库备份

备份以防止升级失败

备份数据库的2个主要方法:

1)用MySQL自带的备份工具:mysqldump

2)直接拷贝数据库文件

[情况1]备份N个实例库 (推荐方式)

(备份databasename1 / databasename2 / databasename3数据库)

#shell command#mysqldump -uroot -p -h23.56.89.76 --databases databasename1 databasename2 databasename3 > dbs.mysql.bak.202104111111.sql

[情况2]备份全库(所有实例库)

[本地主机]#shell command# mysqldump -uroot -p --all-databases > '/va/var/lib/mysql-files/mysqlr/lib/mysql-files/dbs.mysql.bak.202104111111.sql
or (SQL文件路径中含特殊字符,如英文括号时,可对SQL文件路径加英文单引号解决)
[远程主机]#shell command# mysqldump -uroot -p -h23.56.89.76 --all-databases > /var/lib/mysql-files/dbs.mysql.bak.202104111111.sql

生成的.sql文件中包含: 创建表(DROP TABLE IF EXISTS Person;CREATE TABLE Person (...)...),插入表记录,加/解锁等SQL语句

[情况3]备份1个库的N张表

(备份CJ_TEST_DB数据库的tb_student表、tb_teacher表)

#shell command#mysqldump -uroot -p -h23.56.89.76 CJ_TEST_DB tb_student tb_teacher > tables.mysql.bak.202104111111.sql

[情况4]复制实例库A内的表及数据到另一实例库B中

mysql -uroot -p --port=3306 -h10.0.8.xx -e 'create database DATAEYE_ZYTM_BAK20210820;'
# 创建空实例库B
mysqldump DATAEYE -uroot -p123456 -h10.0.8.xx | mysql DATAEYE_ZYTM_BAK20210820 -uroot -p123456 -h10.0.8.xx
# 复制实例库A到实例库B

【mysqldump 参数说明】

//mysqldump 语法:
mysqldump [OPTIONS] database [tables ...]
mysqldump [OPTIONS] --all-databases [OPTIONS]
mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...] //常用的OPTIONS:
-uUSERNAME //指定数据库用户名
-hHOST //指定服务器主机,请使用ip地址
-pPASSWORD //指定数据库用户的密码
-P# //指定数据库监听的端口,这里的#需用实际的端口号代替,如-P3307
-A, --all-databases 备份所有数据库,含create database
-B , --databases db_name… 指定备份的数据库,包括 create database语句
-E, --events:备份相关的所有event scheduler
-R, --routines:备份所有存储过程和存储函数
--triggers:备份表相关的触发器,默认启用,用--skip-triggers,不备份触发器
--master-data[=#]: 此选项须启用二进制日志
1:所备份的数据之前加一条记录为CHANGE MASTER TO语句,非注释,不指定#,默认为1
2:记录为注释的CHANGE MASTER TO语句
此选项会自动关闭--lock-tables功能,自动打开--lock-all-tables功能(除非开启--single-transaction)
-F, --flush-logs :备份前滚动日志,锁定表完成后,执行flush logs命令,生成新的二进制日志文件,配合-A时,会导致刷新多次数据库,在同一时刻执行转储和日志刷新,则应同时使用--flush-logs和-x,--master-data或-single-transaction,此时只刷新一次
建议:和-x,--master-data或 --single-transaction一起使用
--compact 去掉注释,适合调试,生产不使用
-d, --no-data 只备份表结构
-t, --no-create-info 只备份数据,不备份create table
-n,--no-create-db 不备份create database,可被-A或-B覆盖
--flush-privileges 备份mysql或相关时需要使用
-f, --force 忽略SQL错误,继续执行
--hex-blob 使用十六进制符号转储二进制列(例如,“abc”变为0x616263),受影响的数据类型包括BINARY, VARBINARY,BLOB,BIT
-q, --quick 不缓存查询,直接输出,加快备份速度 --no-data     只备份表结构,不包含数据,可以简写为 -d
--no-create-info  只备份数据,不备份建表信息,也可以简写为-t
--routines    备份存储过程及函数,可以简写为 -R
--events     备份事件,可以简写为 -E
--triggers     备份触发器
--flush-logs     备份完成后切换日志
--flush-privileges 备份完成后刷新权限
--set-gtid-purged 开启了GTID的库需要设置该参数,值可以是ON, OFF 或 AUTO
--where     指定条件,例如每张表导出1000行的记录或者 导出每张表id<=10的记录等,可以参考历史文章查看示例
--skip-add-drop-table 不生成删除表的语句

1.2 设置参数,使数据库关闭时会清空缓存,避免版本间缓存格式差异

mysql -u root -p --execute="SET GLOBAL innodb_fast_shutdown=0"

1.3 停掉数据库服务

[centos7] systemctl stop mysqld
[centos6/7] service mysql stop

1.4 数据库升级

前置条件: 上传 MySQL Percona 安装包到服务器 /root/Percona-Server-shared-57-5.7.31-34/目录下

MySQL Percona-57版 官方下载地址: https://www.percona.com/downloads/Percona-Server-5.7/LATEST/

MySQL Oracle-57版 官方下载地址: https://dev.mysql.com/downloads/mysql/5.7.html/

(博主本次升级下载的子安装包: server / client / shared)

cd /root/Percona-Server-shared-57-5.7.31-34/

rpm -Uvh *.rpm
或者(亲测 MYSQL Percona 5.7.31-34 升级到 MYSQL Percona 5.7.34-37): rpm -ivh --replacefiles Percona-Server-shared-compat-57-5.7.34-37.1.el7.x86_64.rpm Percona-Server-server-57-5.7.34-37.1.el7.x86_64.rpm Percona-Server-client-57-5.7.34-37.1.el7.x86_64.rpm Percona-Server-shared-57-5.7.34-37.1.el7.x86_64.rpm

其中:

i表示安装,

U表示升级,

v表示显示安装过程,

h表示显示进度,

--replacefiles表示文件冲突时用新文件替换之。

如果要安装的软件包中有一个文件已在安装其它包时被安装,会显示以下信息:

...

file /usr/lib64/mysql/plugin/auth.so from install of Percona-Server-server-57-5.7.34-37.1.el7.x86_64 conflicts with file from package Percona-Server-test-57-5.7.31-34.1.el6.x86_64

file /usr/lib64/mysql/plugin/debug/auth.so from install of Percona-Server-server-57-5.7.34-37.1.el7.x86_64 conflicts with file from package Percona-Server-test-57-5.7.31-34.1.el6.x86_64

...


【备注】

有些rpm包前后有依赖,故建议:

  • 先升级 libs-compat 、libs、embeded-compat、devel

  • 然后,升级 common包(可能会升级失败 用rpm -Uvh common.....*.rpm --force --nodeps 强制升级)

  • 最后,升级 clientserver

1.5 启动MySQL服务

[centos7] systemctl start mysqld
[centos6/7] service mysql start

1.6 检查/确认: 升级情况

[方式1]

mysql_upgrade -uroot -p

[方式2]

[root@test Percona-Server-shared-57-5.7.31-34]# mysql -V
mysql Ver 14.14 Distrib 5.7.31-34, for Linux (x86_64) using 6.0

[方式3]

[root@test Percona-Server-shared-57-5.7.34-37]# mysql -uroot -p123456 -e "select version();"
mysql: [Warning] Using a password on the command line interface can be insecure.
+-----------+
| version() |
+-----------+
| 5.7.34-37 |
+-----------+

2 数据库升级方式:tar.gz方式升级

[未实测,待验证]

2.1 停mysql服务

service mysql stop

2.2 根据具体的安装目录,参考如下的步骤

(conf下面主要是my.cnf文件,有时默认安装的路径在/etc目录下面)

mv mysql/conf mysqlconf

mv mysql/data mysqldata

rm -rf mysql

tar -xzf mysql-5.7.30-linux-glibc2.12-x86_64.tar.gz 

mv mysql-5.7.30-linux-glibc2.12-x86_64 mysql

cp -r mysqlconf mysql/conf

cp -r mysqldata mysql/data

chown -R *:* mysql/

2.3 启动mysql服务

service mysql start

【备注】my.cnf加如下配置: 禁止GRANT创建密码为空的用户

`sql_mode=NO_AUTO_CREATE_USER`

3 延申:数据恢复与还原

CASE1 数据库备份SQL脚本解读(刷库前必读)

SQL脚本创库、创表的方式说明,以了解mysqldump中生成的数据库产生的sql脚本是如何的,这将影响到你会采用何种方式去刷库,并评估刷库的风险

结论:

  • 创库时,不会删除原先存在的库内的表及其数据
  • 创表时,会在指定库内删除掉原先存在的表及其数据集;并重新覆盖为新的数据集

  • 其sql脚本中的创库语句:
CREATE DATABASE /*!32312 IF NOT EXISTS*/ `ga_jrsjy` /*!40100 DEFAULT CHARACTER SET utf8 */;
USE `ETL_TASK_SOURCE_234`;

1)不存在删库语句: DROP DATABASE ...

2)/!32312/*!40100是指: 注解里!后紧跟版本号表示只有当前mysql版本高于这个版本号(3.23.12、4.01.00)时才执行注解里的命令。

3)IF NOT EXISTS:只有在该数据库(Eg:ga_jrsjy)不存在时,才创建该库。即 若该库已经存在,则:不会再重新创建。

即 不会删除原先存在的库内的表及其数据。

  • 其sql脚本中的创表语句:
USE `ETL_TASK_SOURCE_234`;

--
-- Table structure for table `R_CLUSTER`
-- DROP TABLE IF EXISTS `R_CLUSTER`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `R_CLUSTER` (
`ID_CLUSTER` bigint(20) NOT NULL,
`NAME` varchar(255) DEFAULT NULL,
`BASE_PORT` varchar(255) DEFAULT NULL,
`SOCKETS_BUFFER_SIZE` varchar(255) DEFAULT NULL,
`SOCKETS_FLUSH_INTERVAL` varchar(255) DEFAULT NULL,
`SOCKETS_COMPRESSED` char(1) DEFAULT NULL,
`DYNAMIC_CLUSTER` char(1) DEFAULT NULL,
PRIMARY KEY (`ID_CLUSTER`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */; --
-- Dumping data for table `R_CLUSTER`
-- LOCK TABLES `R_CLUSTER` WRITE;
/*!40000 ALTER TABLE `R_CLUSTER` DISABLE KEYS */;
/*!40000 ALTER TABLE `R_CLUSTER` ENABLE KEYS */;
UNLOCK TABLES;

1)存在删表语句: DROP TABLE

2)sql脚本会覆盖式重新建表

CASE2 如何利用备份数据恢复数据库?[数据库还原]

假设误删了某个数据库后,该怎么恢复数据库?

[前置条件]已利用mysqldump等工具预先对被误删/待恢复的数据库做了备份,假定其备份文件为mysql-backup-202010211005.sql文件

(建议: 执行前,判断.sql文件中创建的表结构、插入的数据记录是否是在目标数据库内执行)

刷库方式: Shell命令行(管道流) VS 数据库内导入(source)

[方式1] < 管道流

#shell command# mysql -uroot -p -h127.0.0.1 < mysql-backup-202010211005.sql


[方式2] source 导入数据库

mysql> use databaseName;
mysql> source d:\demo.sql;

刷库时指定刷库粒度(By Shell命令)

  • 仅恢复指定的库(其它库的数据不恢复)
mysql -h主机名 --port=端口 -u用户名 -p'用户对应的数据库密码' --one-database 数据库名 < ./dump.sql
  • 1)【前置条件】--one-database操作 需要提前创建好对应的库。否则,创建恢复失败。
  • 2)即使sql脚本内存在其它数据库实例的表数据,但并不会被一同恢复进去。解决了此问题:一般备份情况是,将N个DB备份到1个sql文件中,怎么从这1份存在N个DB数据集的sql中恢复1个DB?

5 延申:其它

case2 完全备份 / 增量备份

case3 双机热备份 / MySQL主从复制集群的备份

[未实测,仅供思路层参考]
主服务器的配置
+ 找到配置文件my.ini
+ 编辑my.ini文件,定义到mysqld,加入内容
Server-id=1
Log-bin=c:/log-bin.log
Binlog-do-db=dbname
+ 创建dbname数据库
+ 进入mysql操作,为从服务器授权访问数据库的用户名和密码
grant replication slave on . to ‘root’@从服务器IP identified by ‘密码’
+ 重启MySQL服务器,使更改生效
+ 重新进入到MySQL的命令,执行命令检测配置是否生效:
Show master status\G 从服务器的配置
+ 在从服务器中创建与主服务器中相同的数据库
+ 找到从服务器中的my.ini文件,定位到[mysqld],加入以下内容:
Server-id=2
Master-host=主服务器IP
Master-port=3306(主服务器端口号)
Master-user=root(主服务器用户名)
Master-password=密码(主服务器密码)
Master-connect-retry=60(等待尝试重新连接的秒数)
+ 重新启动MySQL服务器,使配置生效
+ 进入到从服务器MySQL操作,执行启动进程
Slave start

部署在两台服务器中的共享存储双机热备软件,负责管理两台服务器的应用程序启停、存储访问并进行故障检测,双机热备集群正常工作时由主服务器对外服务并访问存储设备。
如果主服务器故障,ServHA Cluster会将业务自动切换至备用服务器运行并将存储设备访问权交由备用服务器,实现业务应用的7X24小时不间断运行。
集群拓扑如下图:

#1 共享存储单活双机热备方案

本方案摘自: 双机热备 - ServHA Cluster 软件简介 - 微彩华创

此方案中两台服务器一主一备,业务应用由主服务器运行。
如果主服务器故障,ServHACluster自动将业务应用切换至备用服务器。 此方案优点是:结构简单明晰易维护,适合只有一个业务核心的系统,方案拓扑与故障处理如上图:

#2 共享存储双活双机热备方案

本方案摘自: 双机热备 - ServHA Cluster 软件简介 - 微彩华创

此方案中两台服务器各自运行【不同】的应用,两台服务器互为备份。
如果其中一台服务器故障,ServHA会将故障服务器的应用自动切换至另一台服务器运行,此时健康的服务器同时运行多个应用。 此方案优点是:资源利用率高,服务器不呈闲置状态,适合多个有业务核心的系统,方案拓扑与故障处理如上图:

#3 容灾集群方案

本方案摘自: 镜像群集方案系列介绍 - EterneData

一般群集系统都用于本地服务的高可用性,但对于一些非常关心数据和服务可靠性的客户,其担心本地因为火灾,地震等不可意料的情况造成本地数据和业务都不可恢复情况下,仍然能够提供业务的可用性。
因而希望建立异地一个备份群集系统,当本地群集出现灾难时,异地的备份群集能够替代本地群集的工作,达到容灾效果。
这种需求在发生类似911事件、海啸事件后,很多企业都把这个方案提上日程,避免出现严重灾难时数据和服务出现崩溃的情况。
EterneMirrorCluster软件本身支持这种异地容灾的群集方案,而不需要额外购买其他软件进行配合,其可以在本地建立一个共享磁盘的群集,异地再建立另外一个共享磁盘的群集。
这两个群集的共享磁盘进行镜像保证数据实时一致,当本地群集出现问题时,异地的群集会立即接管企业的核心业务。 具体拓扑图如下:

这个环境中的每台主机都必须安装EterneMirrorCluster软件,共享磁盘之间的数据通过EterneMirrorCluster的镜像功能保证数据实时一致。
当本地群集没有出现问题时,即使其内部某台服务器出现故障,核心业务仍然在本地群集内切换,一旦本地群集出现问题时核心业务才切换到异地。
这里本地群集可以是在同一个房间,也可以在不同房间;
而异地群集(也可以是单独异地备份服务器)可以是隔壁房间,也可以是相隔很远的空间,条件是共享磁盘之间的网络带宽要足够,不要因为网络瓶颈造成本地系统性能的降低或数据没有实时同步。

X 参考与推荐文献

chapter-3 内容参考文献如下:

[数据库/MySQL]数据库备份与升级:MySQL Percona(RPM) 5.7.24-27 升级到 5.7.31-34的更多相关文章

  1. mysql xtrabackup 备份恢复实现,mysql命令备份数据库,打包压缩数据库

    简介 Xtrabackup是由percona提供的mysql数据库备份工具,据官方介绍,这也是世界上惟一一款开源的能够对innodb和xtradb数据库进行热备的工具.特点: (1)备份过程快速.可靠 ...

  2. windows上备份mysql数据库

    方案一:采用mysql自带的工具mysqldump. 脚本文件backup.bat如下: set  "YMD=%date:~,4%%date:~5,2%%date:~8,2%"cd ...

  3. windows mysql 自动备份的几种方法

    转自:http://www.cnblogs.com/liongis/archive/2013/03/12/2956573.html 1.复制date文件夹备份===================== ...

  4. MySQL的备份与还原

    原文:MySQL的备份与还原 MySQL备份和还原,都是利用mysqldump.mysql和source命令来完成的. 1.Win32下MySQL的备份与还原 1.1 备份 开始菜单 | 运行 | c ...

  5. Windows下MYSQL自动备份批处理

    windows下MYSQL自动备份批处理 2011-05-04 09:16:45|  分类: mysql|举报|字号 订阅     按系统时间进行备份 注意mysql安装路径中如果有空格.就要把,.b ...

  6. mysql主从备份+keepalived自动切换

    数据库这一层需要做到避免单点故障可以是主从备份和主主备份,主主备份可能有性能损耗和数据同步的问题.这里记录下主从备份, mysql进行备份之前确保mysql的版本是一样的,我这里用的都是mysql5. ...

  7. mysql数据库-备份与还原-Percona XtraBackup 2.4备份工具使用

    目录 xtrabackup 特点 备份生成的相关文件 xtrabackup 安装 xtrabackup 用法 1 备份 2 预备份 3 还原 4 其他 还原注意事项 xtrabackup实现完全备份及 ...

  8. MySQL数据库升级

    当前不少系统的数据库依旧是MySQL5.6,由于MySQL5.7及MySQL8.0在性能及安全方面有着很大的提升,因此需要升级数据库.本文通过逻辑方式.物理方式原地升级来介绍MySQL5.6 升级至M ...

  9. Xtrabackup原理及使用innobackupex进行MySQL数据库备份恢复

    Xtrabackup是由percona提供的mysql数据库备份工具,据官方介绍,这也是世界上惟一一款开源的能够对innodb和xtradb数据库进行热备的工具. Xtrabackup中主要包含两个工 ...

  10. 利用xtrabackup备份mysql数据库

    利用xtrabackup备份mysql数据库 一.安装1.直接下载二进制文件wget http://www.percona.com/downloads/XtraBackup/XtraBackup-2. ...

随机推荐

  1. Codeforces Round #843 (Div. 2) Problem C

    C. Interesting Sequence time limit per test 1 second memory limit per test 256 megabytes input stand ...

  2. Unity C#代码入门

    Unity C#代码入门 1. 脚本基本结构 1.1 unity生成的模板 using System.Collections; using System.Collections.Generic; us ...

  3. 微信支付 easy wechat 使用

    /*微信小程序的配置信息微信商户信息*/ public function __construct(){ parent::__construct(); $this->OrderModel = ne ...

  4. eclipse项目右键属性java Build Path等丢失

    https://www.cnblogs.com/IDECIDETODOIT/p/3906831.html https://zhidao.baidu.com/question/133415688.htm ...

  5. 拉勾java核心类库--String类

    String类 @author :magiclx 摘要:String类是用final进行修饰的,关于字符串的一个类,其中包含很多个方法 关键词:String,常量池,正则表达式,数组转化 正文: 参考 ...

  6. matlab解析毫米波雷达bin文件数据 得到复数

    来源:TI提供的Mmwave Radar Device ADC Raw Data Capture %%% This script is used to read the binary file pro ...

  7. C++多线程编程之【线程管理】

    1.如何启动线程? 构建std::thread对象即可. 直接传函数名(地址) 创建一个类并创建伪函数. 构建对象(实例化),将对象作为参数传入thread对象实例化. 2.为什么要等待线程? 首先必 ...

  8. Windows10安装UR_RTDE

    ------------恢复内容开始------------ 要使用UR_RTDE必须先配置电脑环境,目前使用的环境是电脑win10,配置环境需要VS2019+boost1_66_0+cmake2.3 ...

  9. SQL Network Interfaces, error: 50 - 发生了 Local Database Runtime 错误。无法创建自动实例

    1. sqllocaldb delete MSSQLLocalDB 2. sqllocaldb create

  10. springboot修改事务隔离级别

    [SpringBoot]事务的隔离级别.Spring的事务传播机制_51CTO博客_springboot事务隔离级别