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


    一.数据库的分库分表?

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

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

     三.如何分库分表?

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

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

    1. #创建“company”数据库
    2. MariaDB [(none)]> create database company character set utf8;
    3. Query OK, 1 row affected (0.001 sec)
    4. MariaDB [(none)]> use company
    5. Database changed
    6. #在‘company’中创建“emp”表
    7. MariaDB [company]> CREATE TABLE `emp` (
    8. -> `empno` int(4) NOT NULL,
    9. -> `ename` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
    10. -> `job` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
    11. -> `mgr` int(4) NULL DEFAULT NULL,
    12. -> `hiredate` date NOT NULL,
    13. -> `sai` int(255) NOT NULL,
    14. -> `comm` int(255) NULL DEFAULT NULL,
    15. -> `deptno` int(2) NOT NULL,
    16. -> PRIMARY KEY (`empno`) USING BTREE
    17. -> );
    18. Query OK, 0 rows affected (0.015 sec)
    19. #在‘emp’中插入数据
    20. INSERT INTO `emp` VALUES (1001, '甘宁', '文员', 1013, '2000-12-17', 8000, NULL, 20);
    21. INSERT INTO `emp` VALUES (1002, '黛绮丝', '销售员', 1006, '2001-02-20', 16000, 3000, 30);
    22. INSERT INTO `emp` VALUES (1003, '殷天正', '销售员', 1006, '2001-02-22', 12500, 5000, 30);
    23. INSERT INTO `emp` VALUES (1004, '刘备', '经理', 1009, '2001-04-02', 29750, NULL, 20);
    24. INSERT INTO `emp` VALUES (1005, '谢逊', '销售员', 1006, '2001-09-28', 12500, 14000, 30);
    25. INSERT INTO `emp` VALUES (1006, '关羽', '经理', 1009, '2001-05-01', 28500, NULL, 30);
    26. INSERT INTO `emp` VALUES (1007, '张飞', '经理', 1009, '2001-09-01', 24500, NULL, 10);
    27. INSERT INTO `emp` VALUES (1008, '诸葛亮', '分析师', 1004, '2007-04-19', 30000, NULL, 20);
    28. INSERT INTO `emp` VALUES (1009, '曾阿牛', '董事长', NULL, '2001-11-17', 50000, NULL, 10);
    29. INSERT INTO `emp` VALUES (1010, '韦一笑', '销售员', 1006, '2001-09-08', 15000, 0, 30);
    30. INSERT INTO `emp` VALUES (1011, '周泰', '文员', 1006, '2007-05-23', 11000, NULL, 20);
    31. INSERT INTO `emp` VALUES (1012, '程普', '文员', 1006, '2001-12-03', 9500, NULL, 30);
    32. INSERT INTO `emp` VALUES (1013, '庞统', '分析师', 1004, '2001-12-03', 30000, NULL, 20);
    33. INSERT INTO `emp` VALUES (1014, '黄盖', '文员', 1007, '2002-01-23', 13000, NULL, 10);
    34. INSERT INTO `emp` VALUES (1015, '张三', '保洁员', 1001, '2013-05-01', 80000, 50000, 50);
    35. #在‘company’数据库中建立‘dept’表
    36. MariaDB [company]> CREATE TABLE `dept` (
    37. -> `deptno` int NOT NULL ,
    38. -> `dname` char(9) NOT NULL ,
    39. -> `loc` char(6) NOT NULL
    40. -> );
    41. Query OK, 0 rows affected (0.055 sec)
    42. #在‘dept’中插入数据
    43. MariaDB [company]> INSERT INTO `dept` VALUES (10, '教研部', '北京');
    44. Query OK, 1 row affected (0.003 sec)
    45. MariaDB [company]> INSERT INTO `dept` VALUES (20, '学工部', '上海');
    46. Query OK, 1 row affected (0.001 sec)
    47. MariaDB [company]> INSERT INTO `dept` VALUES (30, '销售部', '广州');
    48. Query OK, 1 row affected (0.003 sec)
    49. MariaDB [company]> INSERT INTO `dept` VALUES (40, '财务部', '武汉');
    50. Query OK, 1 row affected (0.002 sec)
    51. #上传jiaowu数据库及表
    52. MariaDB [jiaowu]> source /root/jiaowu.sql
    53. #上传goods数据库及表
    54. MariaDB [jiaowu]> source /root/goods.sql

    4.2.查看数据库及表

     

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

    -N 参数是不显示表头  

    五.分库分表备份

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

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

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

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

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

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

    5.1.分库备份

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

     

    5.2.分表备份

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

    5.3.分库分表备份

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

  • 相关阅读:
    论文解读 | [ICCV2021] 用于任意形状文本检测的自适应边界建议网络
    Mysql数据库 2.SQL语言 数据类型与字段约束
    .NET借助虚拟网卡实现一个简单异地组网工具
    SpringBoot 整合 Websocket 通信demo (附浏览器聊天窗口)
    如何应对生活中的不确定性:仁者安仁,知者利仁。
    购买服务器,并安装宝塔
    【数据库】MySQL的事务特性与隔离级别
    vivo 在离线混部探索与实践
    [附源码]计算机毕业设计软考刷题小程序Springboot程序
    全网最详细解读《GIN-HOW POWERFUL ARE GRAPH NEURAL NETWORKS》!!!
  • 原文地址:https://blog.csdn.net/m0_61675916/article/details/136199483