通过LVM备份mysql数据库脚本
- #!/bin/bash
- #********************************************************************
- #encoding -*-utf8-*-
- #Author: zhangshang
- #URL: http://blog.vservices.top/myblog
- #Description: To backup mysql databases
- #QQ Numbers: 765030447
- #********************************************************************
- ARGV=`getopt -o d:b:l:v:h -l dbpath:,backpath:,dblvm:,dbvg:,help,binlog: -n test.sh -- "$@"`
- eval set --"$ARGV"
- while true
- do
- case "$1" in
- -d|--dbpath)
- dbpath="$2"
- shift
- ;;
- -b|--backpath)
- backpath="$2"
- shift
- ;;
- -l|--dblvm)
- dblvm="$2"
- shift
- ;;
- -v|--dbvg)
- dbvg="$2"
- shift
- ;;
- --binlog)
- binlog="$2"
- shift
- ;;
- -h|--help)
- echo "
- This tool can helps you to backup your databases which located on the LVM
- -d|--dbpath : The path of databases;
- -b|--backpath : The backup directory
- -l|--dblvm : The lvm name of which your databases's locate
- -v|--dbvg : Filling out your vg's name which your database located
- --binlog : Tar a packege of binlog
- -h|--help : It helps you to use this tool!
- "
- exit 0
- # shift
- ;;
- --)
- shift
- break
- ;;
- *)
- echo "Internal error!" ;
- echo "
- This tool can helps you to backup your databases which located on the LVM
- -d|--dbpath : The path of databases;
- -b|--backpath : The backup directory
- -l|--dblvm : The lvm name of which your databases's locate
- -v|--dbvg : Filling out your vg's name which your database located
- --binlog : Tar a packege of binlog
- -h|--help : It helps you to use this tool!
- "
- exit 0
- ;;
- esac
- shift
- done
- #Mysql's configuration
- dbport='3306'
- dbpasswd='123123'
- #dbsock='/var/lib/mysql.sock'
- dbuser='root'
- #db_run_cmd="mysql -u$dbuser -p$dbpasswd -S $dbsock -e "
- db_run_cmd="mysql -u$dbuser -p$dbpasswd -P $dbport -e"
- current_data=`date +%F`
- #Test the given options's values
- function test_argments(){
- [ -z $1 ]
- }
- test_argments $dbpath && dbpath='/var/lib/mysql'
- test_argments $backpath && backpath='/backup'
- test_argments $dblvm && dblvm='dblvm'
- test_argments $dbvg && dbvg='dbvg'
- #Test the dbpath
- function test_dbpath(){
- local i=''
- local count=0
- for i in `ls -l $dbpath | grep '^d' | awk '{print $9}'`
- do
- [ "$i" == 'mysql' ] && let count+=1
- [ "$i" == 'performance_schema' ] && let count+=1
- done
- [ "$count" -lt 2 ] && echo 'There not a dbpath!' && exit 1
- }
- test_dbpath
- #Create a snapshot
- function mk_snapshot(){
- eval $db_run_cmd '"FLUSH TABLES WITH READ LOCK;"'
- [ $? -ne 0 ] && { echo 'Lock tables failed!' ; exit 1; }
- eval $db_run_cmd '"show binary logs" | tail -n 1 > /$backpath/binlog_position'
- lvcreate -n sql_data_snapshot -L 2G -s -p r /dev/$dbvg/$dblvm &>/dev/null
- [ $? -ne 0 ] && echo -e "\033[31msql_data_snapshot already exists! It's meaning that previous copy wasn't completed\033[0m" && exit 1
- eval $db_run_cmd '"flush logs;"'
- eval $db_run_cmd '"unlock tables;"'
- }
- #Backup the dbdate
- function bk_db(){
- mkdir -p $backpath &>/dev/null
- mkdir -p /snapshot_tmp &>/dev/null
- mount -o nouuid,norecovery /dev/$dbvg/$dblvm /snapshot_tmp/ &>/dev/null
- [ $? -ne 0 ] && echo 'mount error!' && exit 1
- /usr/bin/cp -ra /snapshot_tmp /backup/mariadb_backup.$current_data
- [ $? -ne 0 ] && echo "\033[31mCopying failed! Please check the harddisk-room. Cleaning the copy-data!\033[0m" && rm -rf /backup/mariadb_backup.$current_data && state=1
- umount /snapshot_tmp
- [ $? -ne 0 ] && echo 'Umount error !'
- cd / && rm -rf /snapshot_tmp
- }
- #Remove the snapshot
- function rm_snapshot(){
- [ -n "$state" ] && echo -e "\033[31mThe databases's snapshot has't been remove! Don't forget to use this command \033[0m\033[32m\`lvremove -y /dev/$dbvg/sql_data_snapshot \`\033[0m\033[31m to remove it! \033[0m" && exit 1
- lvremove -y /dev/$dbvg/sql_data_snapshot 1>/dev/null
- }
- #Copy the position-file to backup path
- function cp_positon_file(){
- /usr/bin/cp $backpath/binlog_position $backpath/mariadb_backup.$current_data/
- }
- #Backup the binlog
- function tar_binlog(){
- cd $binlog
- echo -e "\033[31mAs you need ,you can modify the regex!\033[0m"
- ls | grep '.*bin\.[[:digit:]]\{6\}$' | xargs tar cvzf $backpath/mariadb_backup.$current_data/binlog.$current_data.tar.gz 1>/dev/null
- [ $? -ne 0 ] && echo '\033[31mCopying failed! Please check the harddisk-room. Cleaning the copy-binlog-data!\033[0m' && rm -rf $backpath/mariadb_backup.$current_data/binlog.$current_data.tar.gz && exit 1
- }
- #Begin to starting backup
- mk_snapshot
- bk_db
- rm_snapshot
- cp_positon_file
- if [ -n "$binlog" ]
- then
- tar_binlog
- fi
通过LVM备份mysql数据库脚本的更多相关文章
- Linux自动备份MySQL数据库脚本代码
下面这段Linux的Shell脚本用于每日自动备份MySQL数据库,可通过Linux的crontab每天定时执行 在脚本中可设置需要备份的数据库表清单,并且会将备份文件通过gzip压缩.需要注意的是, ...
- Linux- 自动备份MySQL数据库脚本
数据安全很重要,所以日常中需要对数据库进行备份.
- 自动备份Mysql数据库脚本
[root@bogon ~]# cat auto_backup_mysql.sh #!/bin/bash #auto backup mysql db #by authors wugk #define ...
- 备份MySQL数据库
备份MySQL数据库脚本: #!/bin/bash # description: MySQL buckup shell script # author: lmj # web site: http:// ...
- 一个备份MySQL数据库的简单Shell脚本(转)
Shell脚本是我们写不同类型命令的一种脚本,这些命令在这一个文件中就可以执行.我们也可以逐一敲入命令手动执行.如果我们要使用shell脚本就必须在一开始把这些命令写到一个文本文件中,以后就可以随意反 ...
- [转]一个备份MySQL数据库的简单Shell脚本
本文翻译自 iSystemAdmin 的 <A Simple Shell Script to Backup MySQL Database> Shell脚本是我们写不同类型命令的一种脚本,这 ...
- Linux下定时备份MySQL数据库的Shell脚本
Linux下定时备份MySQL数据库的Shell脚本 对任何一个已经上线的网站站点来说,数据备份都是必须的.无论版本更新还是服务器迁移,备份数据的重要性不言而喻.人工备份数据的方式不单耗费大量时间 ...
- Linux下备份MySQL数据库的Shell脚本
数据库每天都想备份,手动备份太麻烦而又容易忘记,所以写了一个自动备份MySQL数据库的脚本,加入定时计划中,每天自运运行. 创建Shell脚本代码如下,命名为mysql_dump.sh #!/bin/ ...
- 使用shell脚本定时执行备份mysql数据库
使用shell脚本定时执行备份mysql数据库 #!/bin/bash ############### common file ################ #本机备份文件存放目录 MYSQLBA ...
随机推荐
- 洛谷 题解 P1220 【关路灯 】
搜索 传参 inline void DFS(int now,int l,int r,int cnt,int sum,int k) /* now为当前点 l为左端点 r为右端点 cnt为当前耗电量 su ...
- #论文阅读# Universial language model fine-tuing for text classification
论文链接:https://aclweb.org/anthology/P18-1031 对文章内容的总结 文章研究了一些在general corous上pretrain LM,然后把得到的model t ...
- redis通用命令
1.keys pattern 含义:查找所有符合给定模式(pattern)的key keys * 遍历所有key keys he[h-l]* 遍历以he开头,第三个字符为h-l之间的所有key key ...
- Python实现二叉树的非递归中序遍历
思路: 1. 使用一个栈保存结点(列表实现): 2. 如果结点存在,入栈,然后将当前指针指向左子树,直到为空: 3. 当前结点不存在,则出栈栈顶元素,并把当前指针指向栈顶元素的右子树: 4. 栈不为空 ...
- JAVA开发者大会:拍拍贷MQ系统原理与应用
--喜欢记得关注我哟[shoshana]-- 前记: 5月12号参加了JAVA开发者大会,就<拍拍贷消息系统原理及应用> 作者:李乘胜老师 关于PMQ的分享整理一下笔记以及笔记的思考 和复 ...
- python pyyaml 使用教程(代码案例)
test.py 内容 # 运行前,请先安装pyyaml模块 # pip3 install -i https://pypi.douban.com/simple/ pyyaml==5.1.1 import ...
- Java手写简单Linkedlist一(包括增加,插入,查找,toString,remove功能)
@Java300 学习总结 一.自定义节点 LinkList底层为双向链表.特点为查询效率低,但增删效率高,线程不安全. 链表数据储存在节点,且每个节点有指向上个和下个节点的指针. 创建ggLinke ...
- spark调优篇-Spark ON Yarn 内存管理(汇总)
本文旨在解析 spark on Yarn 的内存管理,使得 spark 调优思路更加清晰 内存相关参数 spark 是基于内存的计算,spark 调优大部分是针对内存的,了解 spark 内存参数有也 ...
- xshell和xftp过期解决办法
去官网 xshell:https://www.netsarang.com/download/down_form.html?code=522 xftp:https://www.netsarang.com ...
- 并不对劲的CF1194E:Count The Rectangles
题意 有\(n\)(\(n\leq 5000\))个平行于x轴或平行于y轴的线段.求这些线段围成了多少个长方形.由多个长方形拼成的也算. 题解 考虑暴力的做法:先分别计算每条横着的线与哪些竖着的线有交 ...