zoukankan      html  css  js  c++  java
  • [数据库/MySQL]数据库备份与升级:MySQL Percona(RPM) 5.7.24-27 升级到 5.7.31-34

    1 RPM包方式升级

    [亲测有效]

    • 1、数据库备份

    备份以防止升级失败

    备份数据库的2个主要方法:
    1)用MySQL自带的备份工具:mysqldump
    2)直接拷贝数据库文件

    [情况1]备份全库

    [本地主机]#shell command# mysqldump -uroot -p --all-databases > /var/lib/mysql-files/mysqlbak-202010210922.sql
    or
    [远程主机]#shell command# mysqldump -uroot -p -h23.56.89.76 --all-databases > /var/lib/mysql-files/mysqlbak-202010210922.sql
    

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

    [情况2]备份N个库
    (备份databasename1 / databasename2 / databasename3数据库)

    #shell command#mysqldump -uroot -p -h23.56.89.76 --databases databasename1 databasename2 databasename3 > mysql-backup-dbs-202010210922.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 > mysql-backup-tables-202010210922.sql;
    

    【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 不生成删除表的语句
    
    • 2、设置参数,使数据库关闭时会清空缓存,避免版本间缓存格式差异
    mysql -u root -p --execute="SET GLOBAL innodb_fast_shutdown=0"
    
    • 3、停掉数据库服务
    [centos7] systemctl stop mysqld 
    [centos6/7] service mysql stop
    
    • 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/

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

    cd /root/Percona-Server-shared-57-5.7.31-34/
    
    rpm -Uvh *.rpm
    

    其中: i表示安装,U表示升级,v表示显示安装过程,h表示显示进度

    【备注】
    有些rpm包前后有依赖,故建议:

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

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

    • 最后,升级 clientserver

    • 5、启动MySQL服务
    [centos7] systemctl start mysqld 
    [centos6/7] service mysql start
    
    • 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
    

    2 tar.gz方式升级

    [未实测,待验证]

    • 1、停mysql服务 service mysql stop

    • 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/
    
    • 3、启动mysql服务
    service mysql start
    

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

    `sql_mode=NO_AUTO_CREATE_USER`
    

    3 问题延申

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

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

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

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

    [方式1] < 管道流

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

    [方式2] source 导入数据库

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

    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 statusG
    
    从服务器的配置
    + 在从服务器中创建与主服务器中相同的数据库
    + 找到从服务器中的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 内容参考文献如下:

  • 相关阅读:
    jQuery中$.get、$.post、$.getJSON和$.ajax的用法
    easyui笔记
    查询用户表中都存在那些表
    在tomcat下端口号设置后面 添加 URIEncoding=UTF-8可以使传递中文的不乱码
    jquery 实现ajax 上传文件的功能(使用插件 ajaxfileupload)
    oracle 分页(rownum的理解) 以及 树节点的查询
    Server.Transfer,Response.Redirect用法点睛
    Excel 生成sql语句
    exjs3.2的gridPanel的表头总宽度与列的总宽度不一致的解决方案
    Nopi .net下面的Excel第三方dll
  • 原文地址:https://www.cnblogs.com/johnnyzen/p/13850047.html
Copyright © 2011-2022 走看看