lrx182125 发表于 2018-8-26 13:53:44

shell学习之自动备份mysql数据库

  首先登陆mysql:
  mysql -u root -p 注意:不是系统root的密码,mysql安装好后默认root密码为空
  >set password for 'root'@'localhost' = password('*****'); --修改root用户的本地密码

  >grant all on zabbix.* to backup@'localhost'>  退出数据库,我们编辑/etc/my.cnf,在模块下添加用户名和密码如下:
  host=localhost
  user=backup
  password='123456'
  准备工作做好后来写脚本:
  ------------------------mysql_backup.sh--------------------------------------
  #!/bin/bash
  #auto backup mysql db --说明信息
  #from net video 2017--说明信息
  #define backup path--第一步做好参数定义准备工作,有利于后面代码的简洁
  BAK_DIR=/data/backup/`date +%Y%m%d`
  MYSQLDB=zabbix
  MYSQLCMD=/usr/bin/mysqldump
  #以上的参数第一个是指定备份路径,第二个是备份的数据库名,第三个是备份的执行程序
  #Juge the exec user author
  if [ $UID -ne 0 ];then
  echo "Must to be use root for exec shell."
  exit
  fi
  #以上的语句主要是用于判断是否用root用户执行
  #Juge if backup exists
  if [ ! -d $BAK_DIR ];then
  mkdir -p $BAK_DIR
  echo -e "\033[32mThe $BAK_DIR Creat Successfully!\033[0m"
  else
  echo "This $BAK_DIR is exists..."
  fi
  #以上的语句是判断备份的目录是否存在,如果不存在则创建并提示创建成功
  #Mysql backup command
  $MYSQLCMD --defaults-extra-file=/etc/my.cnf -d $MYSQLDB >$BAK_DIR/$MYSQLDB.sql
  #这条语句就是执行备份的,--defaults-extra-file应用文件中的mysql用户和密码,-d参数,只导出表结构
  #Juge Success or Failed
  if [ $? -eq 0 ];then
  echo -e "\033[32mThe Mysql Backup $MYSQLDB Successfully!\033[0m"
  else
  echo -e "\033[32mThe Mysql Backup $MYSQLDB Failed,Please check.\033[0m"
  fi
  #以上的语句只是一个提示备份成功与否的信息if [ $? -eq 0 ]判断以上的代码是否执行有误
  在执行脚本前先用命令检测脚本:sh -n auto_mysql_backup.sh
  为了测试效果,我们先来查看一下备份目录下是否有该文件,可以看到没有出现20170405这样的目录

  sh auto_mysql_backup.sh 执行脚本

  可以看到提示说创建20170405的目录成功并备份成,我们去目录下看看呢?

  以上可以看到备份zabbix数据库成功。
  备注:在以上的脚本中我们可以修改MYSQLDB为一个手动输入的参数,这样使得我们的脚本更智能
  crontab -e
  00 * * * /bin/bash /data/sh/auto_mysql_backup.sh >>/tmp/mysql_back.log
  将该脚本写入crontab中每天都去执行,在以后的文章中再写一个增量备份的,更智能化。

  在数据库中授权MYDB数据库给backup用户 grant all on MYDB.* to backup@'localhost'>  对以上文档稍作修改如下:
  -------------------------auto_mysql_backup02.sh---------------------------------------
  #!/bin/bash
  #auto backup database
  #from net video 2017
  BAK_DIR=/data/backup/`date +%Y%m%d`
  MYSQLDB=$1
  MYSQLCMD=/usr/bin/mysqldump
  if [ $UID -ne 0 ];then
  echo "Must to be use root for exec shell."
  exit
  fi
  #增加的代码如下
  if [ -z "$1" ];then
  echo -e "\033[32mUsage:\nPlease Enter DataBase that you will backup \n-------------------------------\n\nUsage: { $0 mysql } \033[0m"
  exit
  fi
  if [ ! -d $BAK_DIR ];then
  mkdir -p $BAK_DIR
  echo -e "\033[32mThe $BAK_DIR Creat Successfully!\033[0m"
  else
  echo "This $BAK_DIR is exists..."
  fi
  #Mysql BACKUP COMMAND
  $MYSQLCMD --defaults-extra-file=/etc/my.cnf -d $MYSQLDB >$BAK_DIR/$MYSQLDB.sql
  if [ $? -eq 0 ];then
  echo -e "\033[32mThe Mysql Backup $MYSQLDB Successfully!\033[0m"
  else
  echo -e "\033[32mThe Mysql Backup $MYSQLDB Failed,Please check.\033[0m"
  fi
  ---------------------------------------------------------------------------------------------------
  sh auto_mysql_backup02.sh MYDB --这样就可以备份指定的数据库了,只要授权给了backup用户,这里的授权用户我们也可以做成输入参数$2来处理。

kdxcne 发表于 2018-8-26 21:47:51

谢谢分享
页: [1]
查看完整版本: shell学习之自动备份mysql数据库