前言

mysql进行升级,或者数据库扩容,等等具有多种方式,其中有些方式会涉及到数据库备份和恢复;数据库备份有冷备、热备、温备,这篇不记录这些,主要记录实际工作中一次使用mysqldump备份后,数据库升级,然后恢复数据库,并且数据不丢失操作。后续有时间还会再记录在实际工作中实现一次平滑的数据库升级操作。

生产环境条件真的很有限,不允许使用第三方工具,还要走很多申请单以及开放白名单等等操作,所以只能采用朴素且有效的方案去实行;

自己回家顺手搭的,就是为了总结记录一下
KylinV10离线安装mysql8.0.32

方案一:

直接到/var/lib/data下打包,丢到新版mysql服务同样位置替换,然后根据新老版本的特性去修改/etc/my.cnf配置,做到兼容;这样的物理操作,虽然是完全备份但是暴力且做到配置兼容需要花时间去尝试与纠错;我个人不太建议。

方案二:

  • 使用mysql自带的mysqldump进行数据库备份,然后物理操作视图、函数、存储过程等等,恢复时,直接source 导入执行;
  • 是想整理出sh脚本,有需要时,修改相关配置,就可以一键备份或者一键恢复的;

上传完后,需要给.sh授权,不然它们还是普通的文件

#cd到这个2个脚本的文件下执行授权:
chmod u+x *.sh

在window打开后,你在sh文件里的一些回车、换行、空格等等,可能会被linux理解为命令,执行shell脚本时出现‘$’\r: 未找到命令’错误

最终版根据不同人的情况去修改吧

mysql_backup.sh

#Linux查看mysql数据库所在目录
#show global variables like '%datadir%';
#备份路径
BACKUP=********
#当前时间
DATETIME=$(date +%Y-%m-%d)
echo "===备份开始==="
#数据库名称
DATABASE=******
#数据库地址
HOST=***.***.***.***
#数据库用户名
DB_USER=***
#数据库密码,带上双引号
DB_PW="***"
#创建备份目录
mkdir -p ${BACKUP}/$DATETIME
#授权
chmod -R 777 ${BACKUP}/$DATETIME
echo "备份文件存放于${BACKUP}/$DATABASE.sql"
#开始备份(完全备份一个库到一个脚本)
#mysqldump -h ${HOST}   -u${DB_USER} -p${DB_PW}  ${DATABASE} >${BACKUP}/$DATETIME/$DATABASE.sql
#完全备份多个库到一个脚本
#mysqldump -h ${HOST}   -u${DB_USER} -p${DB_PW}  --databases ${DATABASE_1} ${DATABASE_2} ${DATABASE_3}... >${BACKUP}/$DATETIME/$DATABASE_1_DATABASE_2_DATABASE_3.sql
#完全备份MySQL服务器中所有的库到一个脚本
mysqldump -u${DB_USER} -p${DB_PW} --force -A >${BACKUP}/$DATETIME/all.sql
#################  主机A,压缩成tar.gz包,并发送到另一台服务器  ###################################################
#echo "===导出成功,开始传输==="
#压缩成tar.gz包
#cd $BACKUP
#tar -zcvf $DATETIME.tar.gz $DATETIME
#备份到服务器B,使用scp从主机A发送到主机B
#scp $DATETIME.tar.gz root@ip:/home/backups/mysqlBackup
echo "===数据库备份到服务器成功==="

mysql_resume.sh

#检查mysql服务状态
#mysql_status=$(service mysqld status | grep -o 'SUCCESS')
#if [[ $mysql_status != "SUCCESS" ]];then
#$(service mysqld restart)
#fi
#systemctl stop mysqld
#恢复路径
BACKUP=*****
#授权
chmod -R 777 ${BACKUP}
#当前时间
DATETIME=$(date +%Y-%m-%d)
cd $BACKUP
echo "===恢复开始==="
#数据库名称
DATABASE=*****
#数据库地址
HOST=***.***.***.***
#数据库用户名
DB_USER=***
#数据库密码,带上双引号
DB_PW="***"
echo "恢复文件存放于${BACKUP}"
#开始恢复(一个个数据库导入,注意手动修改,因为备份脚本导出sql名称)
mysql -u${DB_USER} -p${DB_PW} < ${BACKUP}/$DATETIME/$DATABASE.sql
#####
echo "===数据库恢复到服务器成功==="

注意项:

  • 在使用source命令导入views、function、procedure时,要注意它们之间的 执行顺序以及外键和其他约束,不然会报xxx不存在;
  • 因为是mysql8.0.32,所以创建自定义函数时,
    报错:
    you *might* want to use the less safe log_bin_trust_function_creators variable

解决:
方法一:
如果未使用主从复制,则设置为信任即可,重启MySQL后失效。
set global log_bin_trust_function_creators=1;
在my.cnf配置文件中加上log_bin_trust_function_creators=1,永久生效。

方法二:
明确指明函数的类型,明确告知MySQL服务器这个函数不会修改数据。
super是全局级别的权限,所以必须是:.
grant super on *.* to 'user****'@'***.your_IP.***';

在创建function的语句中添加函数类型。 声明函数类型的参数有:DETERMINISTIC、NO SQL、READS SQL
DATA、MODIFIES SQL DATA和CONTAINS SQL。其中只有 DETERMINISTIC, NO SQL 和 READS
SQL DATA 被支持。这样一来相当于明确的告知MySQL服务器这个函数不会修改数据,所以它是安全的。

sh脚本文件使用mysqldump备份与恢复,恢复views、function、procedure时踩坑与解决相关推荐

  1. android aar保存图片文件异常_我去!合并AAR时踩坑了!

    点击上方"刘望舒",马上关注,早上8:42推送 真爱,请置顶或星标 作者: leeon7 https://www.jianshu.com/p/8f7e32015836 背景 在输出 ...

  2. .sh脚本文件shebang行引发的syntax error:“(“ unexpected

    在运行.sh脚本文件的时候提示如下错误: ./cp_ecnt_kernel.sh: 23: Syntax error: "(" unexpected 23 function cp_ ...

  3. [ROS] sh脚本文件,source : not found问题

    新建一个脚本文件,在首行写上 #!/bin/bash 然后换行,写上想要source的bash文件,例如: source /opt/ros/kinetic/setup.bash 然后报错: xxx.s ...

  4. linux下双击执行.sh脚本文件

    1.当写好一个.sh脚本文件后,给他赋予执行权限后,双击的时候,默认是以文本编辑器打开的,无法运行该脚本文件. 2.打开终端. 3.输入如下命令,需要联网: sudo apt install dcon ...

  5. ubuntu编写.sh脚本文件

    编写.sh脚本文件 一.bash方式运行 1.第一行是 #! /bin/bash 2.变量使用 变量定义格式为:变量名=值     a=1     b=2 引用变量时需要加上$符号 数学计算要使用[] ...

  6. mac下如何运行sh脚本文件

    一.编辑一个 .sh 脚本文件 假设我的脚本文件名为 nice.sh 以下讲解如何运行 nice.sh 二.给shell脚本赋权限 有三种方法 # 方法一 chmod a+x nice.sh# 方法二 ...

  7. 如何运行.sh脚本文件

    最近在学习shell脚本文件时碰到了一个很尴尬的事情,就是脚本会写了,可是该怎么运行呢,于是我就翻阅了手册,查了一些资料 linux下面用命令执行.sh文件有两种方法: 一.直接./加上文件名.sh, ...

  8. Linux nohup运行.sh脚本文件

    记录一下,在Linux 终端运行.sh文件,以前只在终端nohup过.py文件. nohup python -u Job.py >/dev/null 2>error.log 2>&a ...

  9. SAP 电商云 Spartacus UI CI e2e-cypress.sh 脚本文件分析

    (1) yarn install (2) 进到 storefrontapp-e2e-cypress 目录再次 yarn install (3) yarn build:libs 脚本命令: cypres ...

最新文章

  1. cfa三级真题和mock_两年高分过CFA三级的女学霸:复习秘诀刷爆了朋友圈!
  2. Axure RP 第一部分
  3. poj 1469 二分图最大匹配
  4. C#的static,interface,virtual,abstract,override的区别用法
  5. vue制作弹框,并且禁止滚动
  6. Linux网络配置:设置IP地址、网关DNS、主机名
  7. FCN全卷积网络随笔
  8. 从html导出带样式的excel,Jquery导出带样式的Excel
  9. 3ds max删除了对象后,还是将原来所有对象输出的原因
  10. 前端小demo——全选和全不选
  11. java程序员面试技术_java程序员面试应该具备的一些基本技能
  12. 小米卢伟冰回应“低价误国”言论:华为是中国企业“低价”战略的榜样
  13. mysql主从复制简单实现
  14. pom文件无法加载ojdbc14-10.2.0.4.0.jar
  15. 微信小程序实现腾讯地图定位功能修改地址功能
  16. 什么是云桌面?企业为什么要关心云桌面?
  17. java用户登录注册
  18. Cadence 的 Orcad Capture CIS 使用鼠标右键的Show Footprint无法查看元件封装图的问题的解决方法
  19. SqlServer2005中数据库角色成员身份
  20. 为什么点开桌面计算机那这么慢,电脑桌面刷新反应很慢怎么办?电脑桌面刷新很慢解决方法...

热门文章

  1. MOS管的特征频率ft
  2. 机器学习方法之神经网络(NN)
  3. aspcms首页content内容html代码过滤,ASPCMS内容调用去掉html标签
  4. 扩展名 文件类型 打开方式 ..
  5. 电脑升级后开不了机?驱动人生一键解决
  6. 网格员实操计算机基础知识,计算机基础——操作题.pdf
  7. 测试部来了个腾讯出来的卷王,还是个00后,老油条表示真干不过,但是...
  8. 美元倾销才是股市泡沫化根源
  9. Unity C# 子线程Action发送到主线程执行
  10. 计算机运行慢是什么原因是什么,电脑运行慢是什么原因,怎么处理