zoukankan      html  css  js  c++  java
  • mysql远程备份

    相关链接:
    https://blog.csdn.net/LiuHuan_study/article/details/81512831
    https://www.cnblogs.com/ryanzheng/p/8444128.html


    1.跨服务器备份
    原理:服务器A 192.168.100.200
    mysql root 123456

    服务器B 192.168.100.201
    mysql root 123456

    在A服务器上编写脚本 backmysql.sh 用于备份A服务器上MYSQL数据库制定库到B服务器上
    scp.exp 用于ssh免密码登录

    scp.exp

    #!/usr/bin/expect
    
    #FileName:scp.exp
    
    set timeout 60
    
    if { [llength $argv] < 2} {
    
    puts "Usage:"
    
    puts "$argv0 local_file remote_path"
    
    exit 1
    
    }
    
    set local_file [lindex $argv 0]
    
    set remote_path [lindex $argv 1]
    
    set passwd root123
    
    set passwderror 0
    
    spawn scp $local_file $remote_path
    
    expect {
    
    "*assword:*" {
    
    if { $passwderror == 1 } {
    
    puts "passwd is error"
    
    exit 2
    
    }
    
    set timeout 1000
    
    set passwderror 1
    
    send "$passwd
    "
    
    exp_continue
    
    }
    
    "*es/no)?*" {
    
    send "yes
    "
    
    exp_continue
    
    }
    
    timeout {
    
    puts "connect is timeout"
    
    exit 3
    
    }
    
    }
    View Code

    backmysql.sh

    #!/bin/bash
    
    backupdir=/home/backup
    
    mysql_bin_dir=/usr/bin    #mysqldump的路径
    
    databaseName=agm    #备份的数据库名字
    
    bakdatabaseName=backup_agm    #备份的数据库全部表的文件名
    
    mysqluser=root    #正式服务器A的mysql用户名
    
    mysqlpwd=123456    #正式服务器A的mysql密码
    
    targetServerUser=root    #测试服务器B的用户名
    
    targetServerIP=192.168.100.201    #测试服务器B的IP地址
    
    targetpath=/home/backup    #测试服务器B备份路径
    
    time=`date +%Y%m%d`    #当天的日期年月日
    
    #从数据库导出数据库备份文件
    $mysql_bin_dir/mysqldump -u$mysqluser -p$mysqlpwd $databaseName | gzip > $backupdir/$bakdatabaseName$time.sql.gz
    
    #保留3天内的备份文件,时间可通过-mtime 后的 +2 修改
    find $backupdir -name "$bakdatabaseName*.sql.gz" -type f -mtime +2 -exec rm -f {} ; > /dev/null 2>&1
    
    #将备份文件发送到测试服务器B
    /home/backup/scp.exp $backupdir/$bakdatabaseName$time.sql.gz $targetServerUser@$targetServerIP:$targetpath/$bakdatabaseName$time.sql.gz
    View Code

    在B服务器上编写脚本updatemysql.sh用于恢复数据到B服务器mysql上

    updatemysql.sh

    #!/bin/bash
    
    # FileName:updatemysql.sh
    
    # This is a ShellScript For Auto DB Backup and Delete old Backup
    
    backupdir=/home/backup           #测试服务器B数据库备份文件路径
    
    mysql_bin_dir=/usr/bin            #测试服务器B的mysql的安装路径
    
    databaseName=agm               #数据库名字
    
    bakdatabaseName=backup_$databaseName      #备份的数据库的文件名
    
    mysqluser=root                     #测试服务器B的mysql用户名
    
    mysqlpwd=123456                    #测试服务器B的mysql密码
    
    time=` date +%Y%m%d `              #当天的日期:年月日
    
    #先删除前一天的数据库
    $mysql_bin_dir/mysql -u $mysqluser -p$mysqlpwd -e "drop database $databaseName;"
    
    #创建新的数据库
    $mysql_bin_dir/mysql -u $mysqluser -p$mysqlpwd -e "create database $databaseName;"
    
    #将备份的数据库文件导入到mysql中
    gzip -dc $backupdir/$bakdatabaseName$time.sql.gz | $mysql_bin_dir/mysql -u $mysqluser -p$mysqlpwd $databaseName
    
    #保留3天内的备份文件,时间可通过-mtime 后的 +2 修改
    find $backupdir -name "*.sql.gz" -type f -mtime +2 -exec rm -f {} ; > /dev/null 2>&1
    View Code

    安装软件 yum install crontabs
    ssh免密码登录
    mysql 远程登录权限

    backmysql.sh
    backupdir=/home/backup
    mysql_bin_dir=/usr/bin #mysqldump的路径
    databaseName=agm #备份的数据库名字
    bakdatabaseName=backup_agm #备份的数据库全部表的文件名
    mysqluser=root #正式服务器A的mysql用户名
    mysqlpwd=123456 #正式服务器A的mysql密码
    targetServerUser=root #测试服务器B的用户名
    targetServerIP=192.168.100.201 #测试服务器B的IP地址
    targetpath=/home/backup #测试服务器B备份路径
    time=`date +%Y%m%d` #当天的日期年月日
    #从数据库导出数据库备份文件
    $mysql_bin_dir/mysqldump -u$mysqluser -p$mysqlpwd $databaseName | gzip > $backupdir/$bakdatabaseName$time.sql.gz
    #保留3天内的备份文件,时间可通过-mtime 后的 +2 修改
    find $backupdir -name "$bakdatabaseName*.sql.gz" -type f -mtime +2 -exec rm -f {} ; > /dev/null 2>&1
    #将备份文件发送到测试服务器B
    /home/backup/scp.exp $backupdir/$bakdatabaseName$time.sql.gz $targetServerUser@$targetServerIP:$targetpath/$bakdatabaseName$time.sql.gz

    scp.exp
    #!/usr/bin/expect
    #FileName:scp.exp
    set timeout 60
    if { [llength $argv] < 2} {
    puts "Usage:"
    puts "$argv0 local_file remote_path"
    exit 1
    }
    set local_file [lindex $argv 0]
    set remote_path [lindex $argv 1]
    set passwd root123
    set passwderror 0
    spawn scp $local_file $remote_path
    expect {
    "*assword:*" {
    if { $passwderror == 1 } {
    puts "passwd is error"
    exit 2
    }
    set timeout 1000
    set passwderror 1
    send "$passwd "
    exp_continue
    }
    "*es/no)?*" {
    send "yes "
    exp_continue
    }
    timeout {
    puts "connect is timeout"
    exit 3
    }
    }

    updatemysql.sh
    #!/bin/bash
    # FileName:updatemysql.sh
    # This is a ShellScript For Auto DB Backup and Delete old Backup
    backupdir=/home/backup #测试服务器B数据库备份文件路径
    mysql_bin_dir=/usr/bin #测试服务器B的mysql的安装路径
    databaseName=agm #数据库名字
    bakdatabaseName=backup_$databaseName #备份的数据库的文件名
    mysqluser=root #测试服务器B的mysql用户名
    mysqlpwd=123456 #测试服务器B的mysql密码
    time=` date +%Y%m%d ` #当天的日期:年月日
    #先删除前一天的数据库
    $mysql_bin_dir/mysql -u $mysqluser -p$mysqlpwd -e "drop database $databaseName;"
    #创建新的数据库
    $mysql_bin_dir/mysql -u $mysqluser -p$mysqlpwd -e "create database $databaseName;"
    #将备份的数据库文件导入到mysql中
    gzip -dc $backupdir/$bakdatabaseName$time.sql.gz | $mysql_bin_dir/mysql -u $mysqluser -p$mysqlpwd $databaseName
    #保留3天内的备份文件,时间可通过-mtime 后的 +2 修改
    find $backupdir -name "*.sql.gz" -type f -mtime +2 -exec rm -f {} ; > /dev/null 2>&1

  • 相关阅读:
    服务器操作nginx相关操作命令
    git使用命令
    超出隐藏显示
    微信小程序清除默认样式
    程序员提升之排查bug的能力
    call和apply的基本用法与区别
    vuejs 插件开发并发布到npm--(3)vue组件开发并发布
    vuejs 插件开发并发布到npm--(2)js插件开发
    vuejs 插件开发并发布到npm--(1)为什么要进行插件开发管理
    双机热备份和负载均衡的区别
  • 原文地址:https://www.cnblogs.com/ylht/p/10173406.html
Copyright © 2011-2022 走看看