一、MySQL数据可分库备份
分析:1、建库 2、备份
在命令行上通过以下命令创建数据库,socket可以省略
mysql -uroot -pcentos -S /var/lib/mysql/mysql.sock -e "create database wu;"
批量创建MySQL数据库的脚本如下:
#!/bin/bash
PATH="/usr/bin:$PATH"
User=root
Passwd=centos
Socket=/var/lib/mysql/mysql.sock
Mycmd="mysql -u$User -p$Passwd -S $Socket"
for dbname in yi yang qian xi;do
$Mycmd -e "create database $dbname;"
done
在命令行通过以下命令备份数据库:
mysqldump -uroot -pcentos -S /var/lib/mysql/mysql.sock yi | gzip > /data/shell/mysql/yi_$(date +%F).sql.gz
#!/bin/bash
PATH="/usr/bin:$PATH"
Dbpath=/data/shell/mysql/back
User=root
Passwd=centos
Socket=/var/lib/mysql/mysql.sock
Mycmd="mysql -u$User -p$Passwd -S $Socket"
Mydump="mysqldump -u$User -p$Passwd -S $Socket"
[ ! -d "$Dbpath" ] && mkdir -pv $Dbpath
for dbname in `$Mycmd -e "show databases;" | sed '1,2d' | egrep -v "mysql|performance_schema"`;do
$Mydump $dbname | gzip >$Dbpath/${dbname}_$(date +%F).sql.gz
done
二、MySQL数据库分库分表备份
要求:请用脚本实现对MySQL数据库的分库加分表备份
准备测试的数据:通过写脚本批量建表并插入数据并批量查看数据:
#!/bin/bash
PATH="/usr/bin:$PATH"
User=root
Passwd=centos
Socket=/var/lib/mysql/mysql.sock
Mycmd="mysql -u$User -p$Passwd -S $Socket"
for dbname in yi yang qian xi ;do
$Mycmd -e "use $dbname;create table test(id int,name varchar(16));insert into test values(1,'testdata');"
echo ===============dbtest========================
$Mycmd -e "use $dbname;select * from ${dbname}.test;"
done
对数据库进行分表备份:
#!/bin/bash
PATH="/usr/bin:$PATH"
Dbpath=/data/shell/mysql/table_back
User=root
Passwd=centos
Socket=/var/lib/mysql/mysql.sock
Mycmd="mysql -u$User -p$Passwd -S $Socket"
Mydump="mysqldump -u$User -p$Passwd -S $Socket"
[ ! -d $Dbpath ] && mkdir -pv $Dbpath
for dbname in `$Mycmd -e "show databases;" | sed 1,2d | egrep -v "mysql|performance_schema"` ;do
#创建对应目录
mkdir $Dbpath/${dbname}_$(date +%F) -p
#内层循环,获取每个库里面的所有表,然后进入循环
for table in `$Mycmd -e "show tables from $dbname;"|sed '1d'`;do
#备份指定的库内的表到指定目录下,并以库表名字命名备份的名字
$Mydump $dbname $table | gzip > $Dbpath/${dbname}_$(date +%F)/${dbname}_${table}.sql.gz
done
done
三、MySQL主从复制异常监控
要求:开发一个守护进程脚本,每30秒监控一次MySQL主从复制是否异常(包括不同步及延迟),如果异常,则发送短信并发送邮件给管理员存档