mysql 遍历所有的库并根据表和sql语句备份
建库、用户语句
- create database test_hb;
- create user ' test_hb'@'%' identified by '123456';
- grant all privileges on test_hb.* to ' test_hb'@'%';
- grant all privileges on test_hb.* to test_hb@localhost identified by '123456';
- flush privileges;
备份脚本
- #!/bin/sh
- # $Id: mysql_backup
- # define restricted path
- PATH="/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/mysql3306/bin"
- # adirname - return absolute dirname of given file
- adirname() { odir=`pwd`; cd `dirname $1`; pwd; cd "${odir}"; }
- # ---------
- # constants
- # ---------
- MYNAM=`basename "$0"`
- MYDIR=`adirname "$0"`
- MYTMP="${MYDIR}/tmp"
- MYLCK="${MYTMP}/${MYNAM}.lock"
- MYPRG="/usr/local/mysql3306/bin/mysql -uroot -p123456 -P 3306 -h 127.0.0.1 --local-infile=1 -Bse" # mysql client
- MYDMP="/usr/local/mysql3306/bin/mysqldump -uroot -p123456 -P 3306 -h 127.0.0.1 -Q -R -v --opt" # mysqldump
- ROTATE=`date +%d`
- MYBAK="/home/backup/mysql/${ROTATE}" # destination dir
- DT=""
- # ---------
- # functions
- # ---------
- message() { echo "$@"; } # message - output message on stdout
- error() { echo "$@" >&2; } # error - output message on stderr
- die() { error "$@"; exit 1; } # die - output message on stderr and exit
- usage() {
- error "Usage: ${MYNAM} <options>"
- error ""
- error "Available options:"
- error ""
- error " -h This help screen"
- error ""
- error " -q suppress non-error messages"
- error " -d db1,db2,... To dump several databases."
- error " -t File name with datetime"
- error " -p path Dump to the directory"
- die
- }
- # parse command line options
- while getopts d:p:hqt opt; do
- case "${opt}" in
- q)
- V='-q'
- ;;
- t)
- DT=".`date +%Y%m%d%H%M`"
- ;;
- p)
- DP=${OPTARG}
- ;;
- d)
- DBS=(${OPTARG//,/ })
- ;;
- h)
- usage
- ;;
- *)
- usage
- ;;
- esac
- done
- [ -n "${DP}" ] && MYBAK="${DP}"
- if [ ! -d ${MYTMP} ] ; then
- mkdir -p ${MYTMP}
- fi
- if [ ! -d ${MYBAK} ] ; then
- mkdir -p ${MYBAK}
- fi
- # ----
- # main
- # ----
- # perform some locking (as good as it gets in a shell)
- [ -s "${MYLCK}" ] && kill -0 `cat "${MYLCK}"` 2>/dev/null &&
- die "${MYNAM}: already running!"
- echo "$$" > "${MYLCK}"
- # get list of databases
- mydbs=""
- if [ "x$DBS" == "x" ] ; then
- mydbs=`${MYPRG} "SHOW DATABASES"`
- [ -z "${mydbs}" ] && die "${MYNAM}: unable to get list of databases."
- else
- S=0
- E=${#DBS[@]}
- while [ ${S} -lt ${E} ]
- do
- mydb=`${MYPRG} "SHOW DATABASES like \"${DBS[${S}]}\""`
- if [ -z "${mydb}" ] ; then
- DBS[${S}]=""
- else
- mydbs=${mydbs}" "${mydb}
- fi
- S=`expr ${S} + 1`
- done
- fi
- # process databases
- for db in ${mydbs}; do
- # skip special database(s)
- [ "$db" == "information_schema" ] && continue
- [ "$db" == "test" ] && continue
- [ "$db" == "car_source" ] && continue
- # verbose?
- [ "$V" == "-q" ] || echo "Processing database ${db}..."
- [ "$V" == "-q" ] || echo
- # make dir
- mkdir -p "${MYBAK}/${db}"
- ${MYDMP} "${db}" 2>"${MYBAK}/${db}/${db}${DT}.log" | gzip > "${MYBAK}/${db}/${db}${DT}.sql.gz"
- # get list of tables
- mytbs=`${MYPRG} "SHOW TABLES FROM \\\`${db}\\\`"`
- [ -z "${mytbs}" ] && message "${MYNAM}: unable to get list of tables for ${db}."
- # process tables
- for tb in ${mytbs}; do
- # MYTIME=`date +%Y%m%d%H%M`
- [ "$V" == "-q" ] || echo "Processing ${db}.${tb}..."
- [ "$V" == "-q" ] || echo "- Dumping..."
- ${MYDMP} "${db}" "${tb}" 2>"${MYBAK}/${db}/${db}.${tb}${DT}.log" | gzip > "${MYBAK}/${db}/${db}.${tb}${DT}.sql.gz"
- [ "$V" == "-q" ] || echo "- Checking..."
- ${MYPRG} "CHECK TABLE \`${db}\`.\`${tb}\`" | egrep "[^:alnum:\._-]error[^:alnum:\._-]" |
- grep -v "doesn't support check"
- [ "$V" == "-q" ] || echo "- Analyzing..."
- ${MYPRG} "ANALYZE LOCAL TABLE \`${db}\`.\`${tb}\`" > /dev/null
- [ "$V" == "-q" ] || echo "- Optimizing..."
- ${MYPRG} "OPTIMIZE LOCAL TABLE \`${db}\`.\`${tb}\`" > /dev/null
- [ "$V" == "-q" ] || echo
- done
- # verbose?
- [ "$V" == "-q" ] || echo
- done
- # cleanup
- touch -t `/bin/date --date "3 days ago" "+%Y%m%d%H%M"` /dev/shm/${MYNAM}.start
- find /home/backup/mysql/ ! -newer /dev/shm/${MYNAM}.start -type f -exec rm {} \;
- find /home/backup/mysql/ -type d -empty -print0 | xargs -0 -n 100 rm -rf &> /dev/null
- 还原数据库时,到备份目录找到最新的备份。dataname.sql.gz 结尾
- zcat dataname.sql.gz|mysql -uroot -p123456 dataname
mysql 遍历所有的库并根据表和sql语句备份的更多相关文章
- mysql从一个表中拷贝数据到另一个表中sql语句
这一段在找新的工作,今天面试时,要做一套题,其中遇到这么一句话,从一个表中拷贝所有的数据到另一个表中的sql是什么? 原来我很少用到,也没注意过这个问题,面试后我上网查查,回来自己亲手写了写,测试了下 ...
- MySQL创建民族表的SQL语句
MySQL创建民族表的SQL语句 CREATE TABLE `nation` ( `id` ) unsigned NOT NULL AUTO_INCREMENT, `nation` ) NOT NUL ...
- MySql update inner join!MySql跨表更新 多表update sql语句?如何将select出来的部分数据update到另一个表里面?
项目中,评论数,关注数等数据,是实时更新的.+1,-1 这种. 有的时候,可能统计不准确. 需要写一个统计工具,更新校准下. 用Java写SQL和函数,代码很清晰,方便扩展,但是太慢了. 为了简单起见 ...
- MySQL数据库-表操作-SQL语句(一)
1. 数据库操作与存储引擎 1.1 数据库和数据库对象 数据库对象:存储,管理和使用数据的不同结构形式,如:表.视图.存储过程.函数.触发器.事件等. 数据库:存储数据库对象的容器. 数据库分两种 ...
- phpmyadmin查看创建表的SQL语句
本人菜鸟 发现创建表的SQL语句还不会 直接phpmyadmin解决的 查看见表的语句除了直接到处SQL格式文件 打开查看外 就是执行语句查询 语句:show create table 表名 貌似大 ...
- 创建数据库和表的SQL语句
创建数据库的SQL语句: 1 create database stuDB 2 on primary -- 默认就属于primary文件组,可省略 3 ( 4 /*--数据文件的具体描述--*/ 5 n ...
- 创建数据库和表的SQL语句【转】
创建数据库和表的SQL语句 转至http://www.cnblogs.com/philanthr/archive/2011/08/09/2132398.html 创建数据库的SQL语句: 1 crea ...
- oracle 修改表的sql语句
oracle 修改表的sql语句 1增加一个列:ALTER TABLE 表名 ADD(列名 数据类型);如:ALTER TABLE emp ADD(license varchar2(256)) ...
- (转载)根据数据字典表定义的表结构,生成创建表的SQL语句
<来源网址:http://www.delphifans.com/infoview/Article_221.html>根据数据字典表定义的表结构,生成创建表的SQL语句 //1. 类名:T ...
随机推荐
- Python中第三方模块requests解析
一.简述 Requests HTTP Library 二.模块框架 ''' __version__ _internal_utils adapters api auth certs compat coo ...
- 接口压测初识java GC
1.先用Spring Boot 搭建 web 服务,构建api 服务 @RequestMapping("/index") @ResponseBody public String i ...
- Escape HDU - 3605(归类建边)
Escape Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Subm ...
- Configure an PPTP Server on Debian
安装PPTP apt-get update apt-get upgrade apt-get install iptables pptpd vim 设置并修改配置文件vim /etc/pptpd.con ...
- Linux内核进程
公司数据库机器报警进程数高于1500,登进去ps命令看了一下,这么多进程并不认识,就在网上找了一些关于linux进程的资料,如下: idle 进程的pid=0,是由系统自动创建的第一个进程,也是唯一的 ...
- 深度分析Java的枚举类型—-枚举的线程安全性及序列化问题
原文:深度分析Java的枚举类型--枚举的线程安全性及序列化问题 枚举是如何保证线程安全的 要想看源码,首先得有一个类吧,那么枚举类型到底是什么类呢?是enum吗?答案很明显不是,enum就和clas ...
- codeforces #541 F Asya And Kittens(并查集+输出路径)
F. Asya And Kittens Asya loves animals very much. Recently, she purchased nn kittens, enumerated the ...
- [SDOI2011]计算器(BSGS)
洛古题面 对于操作一,用快速幂算即可 代码如下 int quickpow(int a,int b,int k) { int r=1; while(b) { if(b&1) r=(r*a)%k; ...
- 工作笔记:/bin/bash^M: 坏的解释器: 没有那个文件或目录 问题解决
问题原因: 由于windows上换行符为CR LF而在Linux下是 LF 导致出现上述问题 解决方案 1. 在windows下 可以使用nodepad打开该shell文件,然后将shell文件中的格 ...
- docker镜像操作
1.获取镜像 docker pull NAME[:TAG] 如果不显式地指定TAG,则默认会选择latest标签,即下载仓库中最新版本的镜像.//获取最新镜像docker pull ubuntu // ...