• 记录数据库备份与检查脚本


    目录

    一.主要内容概述

    1.备份内容

    2.检查内容

    二.脚本

    1.检查脚本

    2.数据备份脚本

    三.备份参数概述

    1.设置导出字符集

    2.GTID特性介绍

    3.其他导出时需要注意的选项

    4.避免表级锁等待


    一.主要内容概述

    1.备份内容

    • 统计表中的数据单元格数目
    • 备份全部数据库数据
    • 只备份数据结构
    • 只备份数据

    2.检查内容

    • 检查数据库服务器的状态
    • 过滤数据库启动时间
    • 过滤数据库列表
    • 查询MYSQL最大并发连接数
    • 查看SELECT指令被执行数
    • 查看UPDATE指令被执行次数
    • 查看DELETE指令被查看的次数
    • 查看INSERT指令被查看的次数
    • 查看COMMIT指令被查看的次数
    • 查看ROLLBACK指令被查看的次数
    • 查看服务器总指令数
    • 查看慢查询数
    • 数据库QPS
    • 数据库TPS

    二.脚本

    1.检查脚本

    1. #!/bin/bash
    2. # 定义数据库相关的变量
    3. MYSQL_USER=root
    4. MYSQL_PASS=mysql_P@s5 # 密码
    5. MYSQL_PORT=3306 # 端口
    6. MYSQL_HOST=localhost # 数据库ip
    7. MYSQL_ADMIN="mysqladmin -u$MYSQL_USER -p$MYSQL_PASS -P$MYSQL_PORT -h$MYSQL_HOST"
    8. MYSQL_COMM="mysql -u$MYSQL_USER -p$MYSQL_PASS -P$MYSQL_PORT -h$MYSQL_HOST -e"
    9. # 定义变量:显示颜色属性
    10. SUCCESS="echo -en \\033[1;32m" # 绿色
    11. FAILURE="echo -en \\033[1;31m" # 红色
    12. WARNING="echo -en \\033[1;33m" # 黄色
    13. NORMAL="echo -en \\033[0;39m" # 黑色
    14. # 检查数据库服务器的状态
    15. $MYSQL_ADMIN ping &> /dev/null
    16. if [ $? -ne 0 ];then
    17. $FAILURE
    18. echo "无法连接数据库服务器"
    19. $NORMAL
    20. exit
    21. else
    22. echo -n "数据库状态:"
    23. $SUCCESS
    24. echo "[OK]"
    25. $NORMAL
    26. fi
    27. mysql_test(){
    28. # 过滤数据库启动时间
    29. RUN_TIME=$($MYSQL_COMM "SHOW GLOBAL STATUS LIKE 'uptime'" | awk '/Uptime/{print $2}')
    30. echo -n "数据库已运行时间(秒):"
    31. $SUCCESS
    32. echo $RUN_TIME
    33. $NORMAL
    34. # 过滤数据库列表
    35. DB_LIST=$($MYSQL_COMM "SHOW DATABASES")
    36. DB_COUNT=$($MYSQL_COMM "SHOW DATABASES" | awk 'NR>=2&&/^[^+]/{db_count++} END{print db_count}')
    37. echo -n "数据库有$DB_COUNT个数据库,分别为:"
    38. $SUCCESS
    39. echo $DB_LIST
    40. $NORMAL
    41. # 查询MYSQL最大并发连接数
    42. MAX_CON=$($MYSQL_COMM "SHOW VARIABLES LIKE 'max_connections'" | awk '/max/{print $2}')
    43. echo -n "MYSQL最大并发连接数:"
    44. $SUCCESS
    45. echo $MAX_CON
    46. $NORMAL
    47. # 查看SELECT指令被执行数
    48. NUM_SELECT=$($MYSQL_COMM "SHOW GLOBAL STATUS LIKE 'com_select'" | awk '/Com_select/{print $2}')
    49. echo -n "SELECT指令被执行数:"
    50. $SUCCESS
    51. echo $NUM_SELECT
    52. $NORMAL
    53. # 查看UPDATE指令被执行次数
    54. NUM_UPDATE=$($MYSQL_COMM "SHOW GLOBAL STATUS LIKE 'com_update'" | awk '/Com_update/{print $2}')
    55. $SUCCESS
    56. echo -n "UPDATE指令被执行次数:"
    57. echo $NUM_UPDATE
    58. $NORMAL
    59. # 查看DELETE指令被查看的次数
    60. NUM_DELETE=$($MYSQL_COMM "SHOW GLOBAL STATUS LIKE 'com_delete'" | awk '/Com_delete/{print $2}')
    61. $SUCCESS
    62. echo -n "DELETE指令被查看的次数:"
    63. echo $NUM_DELETE
    64. $NORMAL
    65. # 查看INSERT指令被查看的次数
    66. NUM_INSERT=$($MYSQL_COMM "SHOW GLOBAL STATUS LIKE 'com_insert'" | awk '/Com_insert/{print $2}')
    67. $SUCCESS
    68. echo -n "INSERT指令被查看的次数:"
    69. echo $NUM_INSERT
    70. $NORMAL
    71. # 查看COMMIT指令被查看的次数
    72. NUM_COMMIT=$($MYSQL_COMM "SHOW GLOBAL STATUS LIKE 'com_commit'" | awk '/Com_commit/{print $2}')
    73. $SUCCESS
    74. echo -n "COMMIT指令被查看的次数:"
    75. echo $NUM_COMMIT
    76. $NORMAL
    77. # 查看ROLLBACK指令被查看的次数
    78. NUM_ROLLBACK=$($MYSQL_COMM "SHOW GLOBAL STATUS LIKE 'com_rollback'" | awk '/Com_rollback/{print $2}')
    79. $SUCCESS
    80. echo -n "ROLLBACK指令被查看的次数:"
    81. echo $NUM_ROLLBACK
    82. $NORMAL
    83. # 查看服务器总指令数
    84. NUM_QUESTION=$($MYSQL_COMM "SHOW GLOBAL STATUS LIKE 'Questions'" | awk '/Questions/{print $2}')
    85. $SUCCESS
    86. echo -n "QUESTION服务器总指令次数:"
    87. echo $NUM_QUESTION
    88. $NORMAL
    89. # 查看慢查询数
    90. NUM_SLOW_QUERY=$($MYSQL_COMM "SHOW GLOBAL STATUS LIKE 'slow_queries'" | awk '/Slow_queries/{print $2}')
    91. $SUCCESS
    92. echo -n "SLOW_QUERY慢查询数:"
    93. echo $NUM_SLOW_QUERY
    94. $NORMAL
    95. # 数据库QPS
    96. echo -n "数据库QPS:"
    97. $SUCCESS
    98. awk 'BEGIN{print '"$NUM_QUESTION/$RUN_TIME"'}'
    99. $NORMAL
    100. # 数据库TPS
    101. echo -n "数据库TPS:"
    102. $SUCCESS
    103. awk 'BEGIN{print '"($NUM_COMMIT+$NUM_ROLLBACK)/$RUN_TIME"'}'
    104. $NORMAL
    105. }
    106. mysql_test 2>/dev/null

    2.数据备份脚本

    1. #!/bin/bash
    2. ## 基本配置变量
    3. USER="root" # 输入用户
    4. PORT=3306 # 端口
    5. PASSWORD="xxx" # 密码
    6. HOST="xxx.xxx.xxx.xxx" # 数据库ip
    7. DB_md=`mysql -u${USER} -p"${PASSWORD}" -h${HOST} -P${PORT} --default-character-set=utf8mb4 -e "show databases"|grep -Ev "^(Database|mysql|performance_schema|information_schema|sys)$"|xargs` # 所有库名
    8. TB="show tables" # 查看表名
    9. back (){
    10. ## 准备数据备份目录
    11. if [ -d /data/sql-back ];then
    12. echo ""
    13. else
    14. mkdir -p /data/sql-back
    15. ALL_LOG=/data/sql-back # 备份目录
    16. fi
    17. if [ -d /data/sql-back/data ];then
    18. echo ""
    19. else
    20. mkdir -p /data/sql-back/data
    21. DATA_LOG=/data/sql-back/data # 备份数据sql目录
    22. fi
    23. if [ -d /data/sql-back/structure ];then
    24. echo ""
    25. else
    26. mkdir -p /data/sql-back/structure
    27. ST_LOG=/data/sql-back/structure # 备份数据sql表结构目录
    28. fi
    29. ## 准备哈希值
    30. if [ -e ${ALL_LOG}/count_sum.txt ];then
    31. touch count_sum.txt
    32. else
    33. rm -rf ${ALL_LOG}/count_sum.txt && touch ${ALL_LOG}/count_sum.txt
    34. fi
    35. # 所有库名
    36. for i in ${DB_md}
    37. do
    38. # 所有表名
    39. for j in `mysql -u$USER -p$PASSWORD -P$PORT -h$HOST -D $i --skip-column-names -e "$TB" `
    40. do
    41. # 统计表中的数据单元格数目
    42. su=`mysql -u$USER -p$PASSWORD -P$PORT -h$HOST -D $i --skip-column-names -e "select count(*) from $j"`
    43. echo -e ${i}:${j}:${su} >> ${ALL_LOG}/count_sum.txt
    44. done
    45. echo -e "\n++++++++++++++++++++++++++++++++" >> ${ALL_LOG}/count_sum.txt
    46. done
    47. # 备份全部数据库数据
    48. echo "备份全部数据库数据"
    49. /usr/local/mysql/bin/mysqldump -u${USER} -p${PASSWORD} --default-character-set=utf8 --single-transaction --master-data=2 --all-databases > /data/sql-back/all.sql
    50. ## 只备份数据结构
    51. echo "只备份数据结构"
    52. for s in ${DB_md}
    53. do
    54. /usr/local/mysql/bin/mysqldump -u${USER} -p${PASSWORD} --default-character-set=utf8 --set-gtid-purged=OFF --hex-blob --no-data --skip-lock-tables --complete-insert --skip-tz-utc --compact --databases ${s} > $ST_LOG/$s.sql
    55. done
    56. ## 只备份数据
    57. echo "只备份数据"
    58. for d in ${DB_md}
    59. do
    60. /usr/local/mysql/bin/mysqldump -u${USER} -p${PASSWORD} --default-character-set=utf8 --set-gtid-purged=OFF --hex-blob --no-create-info --skip-lock-tables --complete-insert --skip-tz-utc --compact --databases ${d} > $DATA_LOG/$d.sql
    61. done
    62. }
    63. back 2> /dev/null

    三.备份参数概述

    1.设置导出字符集

    如果不指定,mysqldump默认使用UTF8字符集进行导出。

    选项名称默认值可选值作用
    -- default-character-setUTF8实例支持的字符集设置导出的字符集

    2.GTID特性介绍

    MySQL 5.6引入了GTID特性,因此5.6版本的mysqldump工具增加了set-gtid-purged选项。

    说明

    • ON:在mysqldump输出中包含SET @@GLOBAL.GTID_PURGED语句。

    • OFF:在mysqldump输出中不包含 SET @@GLOBAL.GTID_PURGED 语句。

    • AUTO:默认值。对于启用了GTID的实例,会输出 SET @@GLOBAL.GTID_PURGED语句;对于没有启动或者不支持GTID的实例,不输出任何GTID相关信息。

    因此对于使用MySQL 5.6及以上版本自带的mysqldump工具导出RDS MySQL 5.5版本实例数据时,需要设置set-gtid-purged为OFF,否则会报以下错误:

    Error: Server has GTIDs disabled.
    或者
    mysqldump: Couldn’t execute ‘SELECT @@GTID_MODE’: Unknown system variable ‘GTID_MODE’ <1193>

    3.其他导出时需要注意的选项

    选项名称默认值可选值作用
    no-dataFALSETRUE|FALSE不导出数据。
    hex-blobFALSETRUE|FALSE以16进制导出Binary、VarBinary、BLOB类型数据。如果跨版本迁移数据,建议增加该选项。
    complete-insertFALSETRUE|FALSE生成一个完整的列值映射关系
    compactFALSETRUE|FALSE启用skip-add-drop-table、skip-add-locks、skip-comments、skip-disable-keys、skip-set-charset 选项。
    skip-tz-utcFALSETRUE|FALSE导出数据时,不使用格林威治时间,而使用当前 mysql 服务器的时区进行导出
    no-create-infoFALSETRUE|FALSE含义是只导出数据,而不添加CREATE TABLE语句
    forceFALSETRUE|FALSE当出现错误时仍然继续备份操作
    databasesFALSETRUE|FALSE完整导出指定的数据库 ; 包括建库语句、表结构、数据
    quick, -qTrueTRUE|FALSE不缓冲查询,直接导出到标准输出。默认为打开状态,使用--skip-quick取消该选项
    master-data=2FALSETRUE|FALSE会将change master 语句写入dump文件中,只不过会被注释掉
    insert-ignoreFALSETRUE|FALSE在插入行时使用INSERT IGNORE语句
    skip-column-nameFALSETRUE|FALSE输出结果无列名
    -DTrueTRUE|FALSE指定库名

    4.避免表级锁等待

    选项名称默认值可选值作用
    lock-tablesTRUETRUE|FALSE导出期间在导出表上设置表级锁。默认开启。可以通过指定 skip-lock-tables选项来关闭。
  • 相关阅读:
    瑞吉外卖 —— 8、菜品展示、购物车、下单
    基于微信小程序的老年人智慧服务平台设计与实现-计算机毕业设计源码+LW文档
    创建Vue3工程
    spring源码 - 理解@Import原理及运用
    GZ035 5G组网与运维赛题第4套
    Vue+elementUI二次封装之颜色选择器
    【React】React18.2.0核心源码解读
    Nacos——Distro一致性协议
    分布式ID生成服务
    2023年电工杯B题半成品论文使用讲解
  • 原文地址:https://blog.csdn.net/kali_yao/article/details/127737412