shell脚本实现Mysql分库分表备份

这篇具有很好参考价值的文章主要介绍了shell脚本实现Mysql分库分表备份。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一.数据库的分库分表?

12张图把分库分表讲的明明白白!阿里面试:我们为什么要分库分表https://mp.weixin.qq.com/s?__biz=MzU0OTE4MzYzMw==&mid=2247547792&idx=2&sn=91a10823ceab0cb9db26e22783343deb&chksm=fbb1b26eccc63b784879f90540c8ab1731e635b30e5f4fd41de67f87a4fe055473039206f09d&scene=27

shell脚本实现Mysql分库分表备份,运维小实战,mysql,数据库

shell脚本实现Mysql分库分表备份,运维小实战,mysql,数据库

二.为什么需要分库分表?

shell脚本实现Mysql分库分表备份,运维小实战,mysql,数据库

 三.如何分库分表?

shell脚本实现Mysql分库分表备份,运维小实战,mysql,数据库

shell脚本实现Mysql分库分表备份,运维小实战,mysql,数据库

shell脚本实现Mysql分库分表备份,运维小实战,mysql,数据库

shell脚本实现Mysql分库分表备份,运维小实战,mysql,数据库

四.配置分库分表的准备工作 

4.1.创建三个数据库:compay,jiaowu,goods

#创建“company”数据库
MariaDB [(none)]> create database company character set utf8;
Query OK, 1 row affected (0.001 sec)
MariaDB [(none)]> use company
Database changed

#在‘company’中创建“emp”表
MariaDB [company]> CREATE TABLE `emp`  (
    ->   `empno` int(4) NOT NULL,
    ->   `ename` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
    ->   `job` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
    ->   `mgr` int(4) NULL DEFAULT NULL,
    ->   `hiredate` date NOT NULL,
    ->   `sai` int(255) NOT NULL,
    ->   `comm` int(255) NULL DEFAULT NULL,
    ->   `deptno` int(2) NOT NULL,
    ->   PRIMARY KEY (`empno`) USING BTREE
    -> );
Query OK, 0 rows affected (0.015 sec)

#在‘emp’中插入数据
INSERT INTO `emp` VALUES (1001, '甘宁', '文员', 1013, '2000-12-17', 8000, NULL, 20);
INSERT INTO `emp` VALUES (1002, '黛绮丝', '销售员', 1006, '2001-02-20', 16000, 3000, 30);
INSERT INTO `emp` VALUES (1003, '殷天正', '销售员', 1006, '2001-02-22', 12500, 5000, 30);
INSERT INTO `emp` VALUES (1004, '刘备', '经理', 1009, '2001-04-02', 29750, NULL, 20);
INSERT INTO `emp` VALUES (1005, '谢逊', '销售员', 1006, '2001-09-28', 12500, 14000, 30);
INSERT INTO `emp` VALUES (1006, '关羽', '经理', 1009, '2001-05-01', 28500, NULL, 30);
INSERT INTO `emp` VALUES (1007, '张飞', '经理', 1009, '2001-09-01', 24500, NULL, 10);
INSERT INTO `emp` VALUES (1008, '诸葛亮', '分析师', 1004, '2007-04-19', 30000, NULL, 20);
INSERT INTO `emp` VALUES (1009, '曾阿牛', '董事长', NULL, '2001-11-17', 50000, NULL, 10);
INSERT INTO `emp` VALUES (1010, '韦一笑', '销售员', 1006, '2001-09-08', 15000, 0, 30);
INSERT INTO `emp` VALUES (1011, '周泰', '文员', 1006, '2007-05-23', 11000, NULL, 20);
INSERT INTO `emp` VALUES (1012, '程普', '文员', 1006, '2001-12-03', 9500, NULL, 30);
INSERT INTO `emp` VALUES (1013, '庞统', '分析师', 1004, '2001-12-03', 30000, NULL, 20);
INSERT INTO `emp` VALUES (1014, '黄盖', '文员', 1007, '2002-01-23', 13000, NULL, 10);
INSERT INTO `emp` VALUES (1015, '张三', '保洁员', 1001, '2013-05-01', 80000, 50000, 50);

#在‘company’数据库中建立‘dept’表
MariaDB [company]> CREATE TABLE `dept` (
    -> `deptno`  int NOT NULL ,
    -> `dname`  char(9) NOT NULL ,
    -> `loc`  char(6) NOT NULL 
    -> );
Query OK, 0 rows affected (0.055 sec)

#在‘dept’中插入数据
MariaDB [company]> INSERT INTO `dept` VALUES (10, '教研部', '北京');
Query OK, 1 row affected (0.003 sec)

MariaDB [company]> INSERT INTO `dept` VALUES (20, '学工部', '上海');
Query OK, 1 row affected (0.001 sec)

MariaDB [company]> INSERT INTO `dept` VALUES (30, '销售部', '广州');
Query OK, 1 row affected (0.003 sec)

MariaDB [company]> INSERT INTO `dept` VALUES (40, '财务部', '武汉');
Query OK, 1 row affected (0.002 sec)


#上传jiaowu数据库及表
MariaDB [jiaowu]> source /root/jiaowu.sql

#上传goods数据库及表
MariaDB [jiaowu]> source /root/goods.sql

4.2.查看数据库及表

shell脚本实现Mysql分库分表备份,运维小实战,mysql,数据库

 

-e 后面跟上要执行的SQL语句

-N 参数是不显示表头  

五.分库分表备份

mysqldump命令备份数据的原理:就是把数据从MySQL库里以逻辑的sql语句形式直接输出或者生成备份的文件的过程。

-B: 用于备份多个数据库

grep的主要作用是根据关键字检索内容,egrep是grep的拓展,egrep包含grep所有的功能

-v 取反(显示不包含关键词的行)

在bash中,$( )` `(反引号)都是用来作命令替换的

一般情况下,$var与${var}是没有区别的,但是用${ }会比较精确的界定变量名称的范围

5.1.分库备份

#编写脚本
#!/bin/bash
BAK_DIR=/db
[ -d ${BAK_DIR} ] || mkdir ${BAK_DIR} -pv
for name in $(mysql -N -e "show databases" | egrep -v "information_schema|mysql|performance_schema")
do
	mysqldump -B $name > ${BAK_DIR}/${name}_$(date +%F).sql
done
#执行脚本
[root@server ~]# bash creat_db.sh

shell脚本实现Mysql分库分表备份,运维小实战,mysql,数据库 

5.2.分表备份

[root@server ~]# cat create_table.sh
#!/bin/bash
BAK_DIR=/db
[ -d ${BAK_DIR} ] || mkdir ${BAK_DIR} -pv
for name in $(mysql -N -e "show tables from jiaowu")
do
	mysqldump jiaowu $name > ${BAK_DIR}/jiaowu_${name}_$(date +%F).sql
done

shell脚本实现Mysql分库分表备份,运维小实战,mysql,数据库文章来源地址https://www.toymoban.com/news/detail-836327.html

5.3.分库分表备份

[root@server ~]# cat create_db_tb.sh
#!/bin/bash
for name in $(mysql -N -e "show databases" | egrep -v "information_schema|mysql|performance_schema")
do
	BAK_DIR=/db
	[ -d ${BAK_DIR}/$name ] || mkdir -pv ${BAK_DIR}/$name
	mysqldump -B $name > ${BAK_DIR}/${name}/${name}_$(date +%F).sql
	for table in $(mysql -N -e "show tables from $name")
	do 
		mysqldump $name $table > ${BAK_DIR}/${name}/${name}_${table}_$(date +%F).sql
	done
done

shell脚本实现Mysql分库分表备份,运维小实战,mysql,数据库

到了这里,关于shell脚本实现Mysql分库分表备份的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Shell脚本实现分库分表操作

    目录 一,分库备份 二,分库操作 三,分库分表备份 四,备份还原    

    2024年02月14日
    浏览(37)
  • MySQL 实现分库和分表的备份 2023.7.29

     

    2024年02月15日
    浏览(50)
  • shell脚本:数据库的分库分表

     

    2024年02月15日
    浏览(41)
  • mysql运维------分库分表

    随着互联网以及移动互联网的发展,应用系统的数据量也是成指数式增长,若采用单数据库进行数据存储,存在以下性能瓶颈: IO瓶颈 :热点数据太多,数据库缓存不足,产生大量磁盘IO,效率较低。请求数据太多,带宽不够,网络IO瓶颈。 CPU瓶颈 :排序、分组、连接查询、

    2023年04月11日
    浏览(43)
  • MySQL数据库分库分表备份

    分库备份 创建脚本并编写 [root@localhost scripts]# vim bak_db_v1.sh #!/bin/bash 备份的路径 bak_path=/backup/db 账号密码 mysql_cmd=\\\'-uroot -pRedHat@123\\\' 需要排除的数据库 exclude_db=\\\'information_schema|mysql|performance_schema|sys\\\' 检验备份路径是否存在,不存在则创建 [ -d ${bak_path} ] || mkdir -p ${bak_path} 提取需要

    2024年02月14日
    浏览(42)
  • MySQL运维3-分库分表策略

    单库瓶颈:如果在项目中使用的都是单MySQL服务器,则会随着互联网及移动互联网的发展,应用系统的数据量也是成指数式增长,若采用单数据库进行存储,存在一下性能瓶颈: IO瓶颈:热点数据太多,数据库缓存不足,产生大量磁盘IO,效率低下,请求数据太多,带宽不够,

    2024年02月05日
    浏览(39)
  • MySQL运维6-Mycat分库分表之垂直分库

    场景:在业务系统中,涉及一下表结构,但是由于用户与订单每天都会产生大量的数据,单台服务器的数据存储以及处理能力是有限的,可以对数据库表进行拆分,原有数据库如下 说明1:整个业务系统中的表,大致分为四个,商品信息类的表,订单相关的表,用户相关表及

    2024年02月04日
    浏览(44)
  • MySQL运维13-Mycat分库分表之按月分片

    使用场景为按照自然月来分片,每个自然月为一个分片,但是一年有12个月,是不是要有12个数据节点才行呢?并不是。例如我现在只有三个分片数据库,这样就可以1月在第一个数据分片中,2月在第二个数据分片中,3月在第三个数据分片中,当来到4月的时候,就会重新开始

    2024年02月04日
    浏览(46)
  • 15天学习MySQL计划(运维篇)分库分表-监控-第十四天

    1.介绍 1.问题分析 ​ 随着互联网及移动互联网的发展,应用系统的数据量也是成指数式增加,若采用但数据进行数据存储,存在以下性能瓶颈: IO瓶颈:热点数据太多,数据库缓存不足,产生大量磁盘IO,效率较低。请求数据太多,带宽不够,网络IO瓶颈。 CPU瓶颈:排序,分

    2024年02月05日
    浏览(48)
  • MySQL 数据存储和优化------MySQL索引原理和优化 ---- (架构---索引---事务---锁---集群---性能---分库分表---实战---运维)持续更新

    Mysql架构体系全系列文章主目录(进不去说明还没写完) https://blog.csdn.net/grd_java/article/details/123033016 本文只是整个系列笔记的第二章:MySQL索引原理和优化,只解释索引相关概念。 索引可以提高查询效率,影响where查询和order by排序,它可以从多方面进行分类,但是实际创建时

    2024年02月02日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包