前言

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. 纯CSS3制作的圆角效果按钮菜单
  2. javascript callback函数的理解与使用
  3. 三年级计算机课教案文档,小学三年级信息技术第十三课文件和文件夹教学设计...
  4. 健康的身体是一切的保证 - 保护偶的颈椎!
  5. android项目中导入opencv库,将第二个JNI库包含到我的Android项目(OpenCV)后...
  6. ubuntu下不同版本python安装pip及pip的使用
  7. 成功解决eric6 Create Dialog Code XXX.py exists but does not contain any classes
  8. 卷积神经网络中不同类型的卷积方式介绍
  9. codeforces 932E Team Work 高等数学求导、dp
  10. artdialog5 bug
  11. 贷后模块之催收行为综合评分卡
  12. 所谓的开发是java还是PLC_SCL是否将成为PLC的主流编程语言?
  13. java %2c_java2c工具(修复)
  14. g ++在linux下编译rapidxml 使用与过程中出现的问题解决
  15. 写给零基础入坑蓝桥杯的同学
  16. Windows如何设置右键快捷键
  17. python心得总结知识点和收获,千锋Python培训学员心得 在总结中收获提升
  18. 怎么修改PDF内容,PDF文件如何修改文字
  19. qlearningα越大或越小_高频电子线路习题及答案
  20. Python选择练习题(19~36)

热门文章

  1. The Football Season(拓展欧几里得思维题)
  2. php里href作用,浅谈每课一名言的作用a href=/friend/list.php(教师中心专稿)/a
  3. 如何为iPhone无线充电?
  4. Python 淘宝联盟自动登录
  5. PHP Session的过期机制
  6. 电脑定时关机怎么设置
  7. Python六大基本数据类型
  8. prusai3打印机使用教程_【打印虎原创】RepRap_Prusa_i3_3D打印机校准图解教程系列之二...
  9. 调用kernel32.dll读写参数
  10. Ubuntu下FTP安装