zoukankan      html  css  js  c++  java
  • 通过LVM备份mysql数据库脚本

    1. #!/bin/bash
    2. #********************************************************************
    3. #encoding -*-utf8-*-
    4. #Author: zhangshang
    5. #URL: http://blog.vservices.top/myblog
    6. #Description: To backup mysql databases
    7. #QQ Numbers: 765030447
    8. #********************************************************************
    9. ARGV=`getopt -o d:b:l:v:h -l dbpath:,backpath:,dblvm:,dbvg:,help,binlog: -n test.sh -- "$@"`
    10. eval set --"$ARGV"
    11. while true
    12. do
    13. case "$1" in
    14. -d|--dbpath)
    15. dbpath="$2"
    16. shift
    17. ;;
    18. -b|--backpath)
    19. backpath="$2"
    20. shift
    21. ;;
    22. -l|--dblvm)
    23. dblvm="$2"
    24. shift
    25. ;;
    26. -v|--dbvg)
    27. dbvg="$2"
    28. shift
    29. ;;
    30. --binlog)
    31. binlog="$2"
    32. shift
    33. ;;
    34. -h|--help)
    35. echo "
    36. This tool can helps you to backup your databases which located on the LVM
    37. -d|--dbpath : The path of databases;
    38. -b|--backpath : The backup directory
    39. -l|--dblvm : The lvm name of which your databases's locate
    40. -v|--dbvg : Filling out your vg's name which your database located
    41. --binlog : Tar a packege of binlog
    42. -h|--help : It helps you to use this tool!
    43. "
    44. exit 0
    45. # shift
    46. ;;
    47. --)
    48. shift
    49. break
    50. ;;
    51. *)
    52. echo "Internal error!" ;
    53. echo "
    54. This tool can helps you to backup your databases which located on the LVM
    55. -d|--dbpath : The path of databases;
    56. -b|--backpath : The backup directory
    57. -l|--dblvm : The lvm name of which your databases's locate
    58. -v|--dbvg : Filling out your vg's name which your database located
    59. --binlog : Tar a packege of binlog
    60. -h|--help : It helps you to use this tool!
    61. "
    62. exit 0
    63. ;;
    64. esac
    65. shift
    66. done
    67. #Mysql's configuration
    68. dbport='3306'
    69. dbpasswd='123123'
    70. #dbsock='/var/lib/mysql.sock'
    71. dbuser='root'
    72. #db_run_cmd="mysql -u$dbuser -p$dbpasswd -S $dbsock -e "
    73. db_run_cmd="mysql -u$dbuser -p$dbpasswd -P $dbport -e"
    74. current_data=`date +%F`
    75. #Test the given options's values
    76. function test_argments(){
    77. [ -z $1 ]
    78. }
    79. test_argments $dbpath && dbpath='/var/lib/mysql'
    80. test_argments $backpath && backpath='/backup'
    81. test_argments $dblvm && dblvm='dblvm'
    82. test_argments $dbvg && dbvg='dbvg'
    83. #Test the dbpath
    84. function test_dbpath(){
    85. local i=''
    86. local count=0
    87. for i in `ls -l $dbpath | grep '^d' | awk '{print $9}'`
    88. do
    89. [ "$i" == 'mysql' ] && let count+=1
    90. [ "$i" == 'performance_schema' ] && let count+=1
    91. done
    92. [ "$count" -lt 2 ] && echo 'There not a dbpath!' && exit 1
    93. }
    94. test_dbpath
    95. #Create a snapshot
    96. function mk_snapshot(){
    97. eval $db_run_cmd '"FLUSH TABLES WITH READ LOCK;"'
    98. [ $? -ne 0 ] && { echo 'Lock tables failed!' ; exit 1; }
    99. eval $db_run_cmd '"show binary logs" | tail -n 1 > /$backpath/binlog_position'
    100. lvcreate -n sql_data_snapshot -L 2G -s -p r /dev/$dbvg/$dblvm &>/dev/null
    101. [ $? -ne 0 ] && echo -e "33[31msql_data_snapshot already exists! It's meaning that previous copy wasn't completed33[0m" && exit 1
    102. eval $db_run_cmd '"flush logs;"'
    103. eval $db_run_cmd '"unlock tables;"'
    104. }
    105. #Backup the dbdate
    106. function bk_db(){
    107. mkdir -p $backpath &>/dev/null
    108. mkdir -p /snapshot_tmp &>/dev/null
    109. mount -o nouuid,norecovery /dev/$dbvg/$dblvm /snapshot_tmp/ &>/dev/null
    110. [ $? -ne 0 ] && echo 'mount error!' && exit 1
    111. /usr/bin/cp -ra /snapshot_tmp /backup/mariadb_backup.$current_data
    112. [ $? -ne 0 ] && echo "33[31mCopying failed! Please check the harddisk-room. Cleaning the copy-data!33[0m" && rm -rf /backup/mariadb_backup.$current_data && state=1
    113. umount /snapshot_tmp
    114. [ $? -ne 0 ] && echo 'Umount error !'
    115. cd / && rm -rf /snapshot_tmp
    116. }
    117. #Remove the snapshot
    118. function rm_snapshot(){
    119. [ -n "$state" ] && echo -e "33[31mThe databases's snapshot has't been remove! Don't forget to use this command 33[0m33[32m\`lvremove -y /dev/$dbvg/sql_data_snapshot \`33[0m33[31m to remove it! 33[0m" && exit 1
    120. lvremove -y /dev/$dbvg/sql_data_snapshot 1>/dev/null
    121. }
    122. #Copy the position-file to backup path
    123. function cp_positon_file(){
    124. /usr/bin/cp $backpath/binlog_position $backpath/mariadb_backup.$current_data/
    125. }
    126. #Backup the binlog
    127. function tar_binlog(){
    128. cd $binlog
    129. echo -e "33[31mAs you need ,you can modify the regex!33[0m"
    130. ls | grep '.*bin.[[:digit:]]{6}$' | xargs tar cvzf $backpath/mariadb_backup.$current_data/binlog.$current_data.tar.gz 1>/dev/null
    131. [ $? -ne 0 ] && echo '33[31mCopying failed! Please check the harddisk-room. Cleaning the copy-binlog-data!33[0m' && rm -rf $backpath/mariadb_backup.$current_data/binlog.$current_data.tar.gz && exit 1
    132. }
    133. #Begin to starting backup
    134. mk_snapshot
    135. bk_db
    136. rm_snapshot
    137. cp_positon_file
    138. if [ -n "$binlog" ]
    139. then
    140. tar_binlog
    141. fi
  • 相关阅读:
    原生sql实现restful接口调用
    Yii框架实现restful 接口调用,增删改查
    http状态码
    封装一个使用cURL以POST方式请求https协议的公众方法
    YII框架实现 RBAC
    nginx开启fileinfo扩展
    微信登录
    Linux系统基础优化及常用命令
    Vim编辑器
    linux基本命令
  • 原文地址:https://www.cnblogs.com/momenglin/p/8483293.html
Copyright © 2011-2022 走看看