zoukankan      html  css  js  c++  java
  • 备份MySQL数据库并上传到阿里云OSS存储

    1. 环境配置

    要将本地文件上传到阿里云oss中, 必须使用阿里云提供的工具 ossutil, 有32位,也有64位的, Linux和Windows都有.具体可以到阿里云官网下载

    官网及文档: https://helpcdn.aliyun.com/document_detail/120075.html?spm=a2c4g.11186623.2.45.637b1c7aEqbumo

    本文以Linux系统为例:

    下载工具:
    wget http://gosspublic.alicdn.com/ossutil/1.6.7/ossutil64
    修改文件执行权限:
    chmod 755 ossutil64
    使用交互式配置生成配置文件:
    ./ossutil64 config

    该命令将创建一个配置文件,在其中存储配置信息。
    请输入配置文件路径(默认为:/home/user/.ossutilconfig,回车将使用默认路径。如果用户设置为其它路径,在使用命令时需要将--config-file选项设置为该路径):
    未输入配置文件路径,将使用默认配置文件:/home/user/.ossutilconfig。
    对于下述配置,回车将跳过相关配置项的设置,配置项的具体含义,请使用"help config"命令查看。
    请输入endpoint:http://oss-cn-hangzhou.aliyuncs.com
    请输入accessKeyID:yourAccessKeyID
    请输入accessKeySecret:yourAccessKeySecret
    请输入stsToken:
    endpoint:填写Bucket所在地域的域名信息,可参考访问域名和数据中心。
    accessKeyID:查看方式请参考创建AccessKey。
    accessKeySecret:查看方式请参考创建AccessKey。
    stsToken:非必配项,若采用STS临时授权方式访问OSS需要配置该项,否则置空即可。stsToken生成方式参考临时访问凭证。
    说明 更详细的配置文件说明可参考 https://helpcdn.aliyun.com/document_detail/120072.html?spm=a2c4g.11186623.2.21.409c448ahCrIHZ#concept-303826 。

    配置完成后,可以用如下命令进行测试:

    ossutil64 cp /etc/fatab oss://aliyunoss-backup/DB_DATA/

    # aliyunoss-backup 为我的oss Bucket名称.DB_DATA为数据库备份目录.

    如果你在第一步输入了 config file path, 执行上传命令的时候必须要加上指定的 config file path, 否则到默认的地方/root/.ossutilconfig是找不到的.如:

    ossutil64 cp /etc/fatab oss://aliyunoss-backup/DB_DATA/ --config-file=/path to config file/filename

    2. 配置示例

    说明, 如下脚本是本人用的备份MySQL数据库并上传到阿里云oss存储.

     1 #!/bin/bash
     2 # mysql_backup.sh: backup mysql databases and keep newest 7 days backup.  
     3 #  
     4 # ${db_user} is mysql username  
     5 # ${db_password} is mysql password  
     6 # ${db_host} is mysql host   
     7 # —————————–  
     8 #/root/mysql_backup.sh
     9 # everyday 3:00 AM execute database backup
    10 # 0 3 * * * /root/mysql_backup_to_oss.sh
    11 #/etc/cron.daily
    12 
    13 # the directory for story your backup file.  #
    14 backup_dir="/opt/backup/mysql/"
    15 
    16 # 要备份的数据库名 #
    17 all_db="mydb1 mydb2 mydb3"
    18 
    19 # 要保留的备份天数 #
    20 backup_day=7
    21 
    22 #数据库备份日志文件存储的路径
    23 logfile="/var/log/mysql_backup.log"
    24 
    25 # Aliyun OSS Bucket Name.
    26 bucket_name=aliyunoss-backup
    27 
    28 # local IP address
    29 local_ip=`hostname -i`
    30 
    31 # date format for backup file (dd-mm-yyyy)  #
    32 time="$(date +"%Y-%m-%d")"
    33 
    34 # mysql, ${mysqldump} and some other bin's path  #
    35 mysql="/usr/bin/mysql"
    36 mysqldump="/usr/bin/mysqldump"
    37 
    38 # the directory for story the newest backup  #
    39 test ! -d ${backup_dir} && mkdir -p ${backup_dir}
    40 
    41 #备份数据库函数#
    42 mysql_backup()
    43 {
    44     # 取所有的数据库名 #
    45     for db in ${all_db}
    46     do
    47         backname=${db}.${time}
    48         dumpfile=${backup_dir}${backname}
    49         
    50         #将备份的时间、数据库名存入日志
    51         echo "------"$(date +'%Y-%m-%d %T')" Beginning database "${db}" backup--------" >>${logfile}
    52         ${mysqldump} --login-path=my3306 ${db} > ${dumpfile}.sql 2>>${logfile} 2>&1
    53         
    54         #开始将压缩数据日志写入log
    55         echo $(date +'%Y-%m-%d %T')" Beginning zip ${dumpfile}.sql" >>${logfile}
    56         
    57         #将备份数据库文件库压成ZIP文件,并删除先前的SQL文件. #
    58         tar -czvf ${backname}.tar.gz ${backname}.sql 2>&1 && rm ${dumpfile}.sql 2>>${logfile} 2>&1 
    59         
    60         #将压缩后的文件名存入日志。
    61         echo "backup file name:"${dumpfile}".tar.gz" >>${logfile}
    62         echo -e "-------"$(date +'%Y-%m-%d %T')" Ending database "${db}" backup-------
    " >>${logfile}    
    63     done
    64 }
    65 
    66 delete_old_backup()
    67 {    
    68     echo "delete backup file:" >>${logfile}
    69     # 删除旧的备份 查找出当前目录下七天前生成的文件,并将之删除
    70     find ${backup_dir} -type f -mtime +${backup_day} | tee delete_list.log | xargs rm -rf
    71     cat delete_list.log >>${logfile}
    72 }
    73 
    74 upload_backups_toAliyunOSS()
    75 {
    76     # upload backfile to Aliyun OSS bucket
    77     for db in ${all_db}
    78     do
    79         backname=${db}.${time}
    80         echo "upload ${backname}.tar.gz to AliyunOSS begin at "$(date +'%Y-%m-%d %T') >>${logfile}
    81         ### Upload to AliyunOSS by storage Monthly ### 
    82         ossutil64 cp ${backname}.tar.gz oss://${bucket_name}/DB_DATA/$(date +'%Y%m')/${local_ip}/ -f
    83         echo "upload ${backname}.tar.gz to AliyunOSS done at "$(date +'%Y-%m-%d %T') >>${logfile}
    84     done
    85 }
    86 
    87 #进入数据库备份文件目录
    88 cd ${backup_dir}
    89 
    90 mysql_backup
    91 delete_old_backup
    92 upload_backups_toAliyunOSS
    93 
    94 echo -e "========== mysql backup && upload_to_AliyunOSS done at "$(date +'%Y-%m-%d %T')" ==========
    
    ">>${logfile}
    95 #cat ${logfile}
    MySQL备份脚本(压缩并上传到阿里云OSS)

    OSS中存储格式:

     备份日志:

    3. MySQL认证登录配置

    在上述脚本中使用到了MySQL认证登录, 使用mysql_config_editor工具提前配置好MySQL的认证登录.

    mysql_config_editor是在MySQL-5.6以后提供的, 这个工具可以认证信息加密存储在.mylogin.cnf中,通常这个文件在Linux用户的家目录,当然password信息是加密的,无需担心泄露问题, 当然也不需要每次登录都输入密码, 更不用讲密码写入脚本或配置文件中, 登录MySQL只需要使用认证信息登录即可. 在一定程度上保障了数据库的安全.

    mysql_config_editor使用方法:

    mysql_config_editor set --login-path=[认证信息名] user=[用户名] --password
    #认证信息名是该条认证信息的名称,后续登录时直接使用认证信息名即可登录,无需再次输入密码。
    #这里需要注意的是密码里面不能含有特殊字符,建议创建一个新的用户来进行备份操作
    mysql --login-path=[认证信息名]
    #直接使用认证信息名来登录

    如:

    mysql_config_editor set --login-path=my3306 --user=root --socket=/opt/mysql/mysql.sock --password

    输入密码后,就建立了认证信息文件my3306, 下次登录MySQL数据库, 就不用输入密码了,使用如下命令即可免密登录mysql:

    mysql --login-path=my3306

    MySQL备份:
    mysqldump --login-path=my3306 py3db > py3db.sql

     

     无需输入MySQL密码, 即可执行命令.

  • 相关阅读:
    内存的分页管理方式解释
    分组统计SQL
    NUMA导致的Oracle性能问题
    SQL Server死锁的解决过程
    PHP创建对象的6种方式
    PHP编程20大效率要点
    php设置随机ip访问
    php使用QueryList轻松采集JavaScript动态渲染页面
    正确理解 PHP 的重载
    PHP 核心特性之匿名函数
  • 原文地址:https://www.cnblogs.com/miaocbin/p/11889763.html
Copyright © 2011-2022 走看看