精华内容
下载资源
问答
  • 我就遇到这种情况,如果将远程服务器的数据库备份到本地然后又从本地上传到另一台服务器,这样显然是不行的,因为一个项目的数据库是很大的,这样要弄到猴年马月。有一个简单的方法就是使用scp命令直接将data目录...

    我们在做项目的时候可能会遇到这种需求要将之前的服务器上的数据备份到一个新的数据库。我就遇到这种情况,如果将远程服务器的数据库备份到本地然后又从本地上传到另一台服务器,这样显然是不行的,因为一个项目的数据库是很大的,这样要弄到猴年马月。有一个简单的方法就是使用scp命令直接将data目录复制到另一台。

    scp命令的实际应用概述:
    (1) 复制文件:

    命令格式:

    scp local_file remote_username@remote_ip:remote_folder

    或者

    scp local_file remote_username@remote_ip:remote_file

    或者

    scp local_file remote_ip:remote_folder

    或者

    scp local_file remote_ip:remote_file

    第1,2个指定了用户名,命令执行后需要输入用户密码,第1个仅指定了远程的目录,文件名字不变,第2个指定了文件名

    第3,4个没有指定用户名,命令执行后需要输入用户名和密码,第3个仅指定了远程的目录,文件名字不变,第4个指定了文件名

    (2) 复制目录:

    命令格式:

    scp -r local_folder remote_username@remote_ip:remote_folder

    或者

    scp -r local_folder remote_ip:remote_folder

    第1个指定了用户名,命令执行后需要输入用户密码;

    第2个没有指定用户名,命令执行后需要输入用户名和密码;

    从远程服务器复制到本地服务器:

    从远程复制到本地的scp命令与上面的命令雷同,只要将从本地复制到远程的命令后面2个参数互换顺序就行了。

    实例1:从远处复制文件到本地目录

    命令:

    scp root@192.168.120.204:/opt/soft/nginx-0.5.38.tar.gz /opt/soft/

    实例1:从远处复制文件到本地目录

    命令:

    scp root@192.168.120.204:/opt/soft/nginx-0.5.38.tar.gz /opt/soft/

    说明:

    从192.168.120.204机器上的/opt/soft/的目录中下载nginx-0.5.38.tar.gz 文件到本地/opt/soft/目录中

    实例2:从远处复制到本地

    命令:

    scp -r root@192.168.120.204:/opt/soft/mongodb /opt/soft/

    说明:

    从192.168.120.204机器上的/opt/soft/中下载mongodb 目录到本地的/opt/soft/目录来。

    实例3:上传本地文件到远程机器指定目录

    命令:

    scp /opt/soft/nginx-0.5.38.tar.gz root@192.168.120.204:/opt/soft/scptest

    说明:

    复制本地opt/soft/目录下的文件nginx-0.5.38.tar.gz 到远程机器192.168.120.204的opt/soft/scptest目录

    实例4:上传本地目录到远程机器指定目录

    命令:

    scp -r /opt/soft/mongodb root@192.168.120.204:/opt/soft/scptest

    如果只将data目录下的数据库复制到另一台,一定要将下面这个文件复制过去,因为这个文件种保存的是数据库表的数据。
    在这里插入图片描述
    需要注意的是,我们将data目录复制过去,需要修改文件的所在的组,它的拥有者和权限。因为我们复制过去的,默认是属于root用户的。这样我们不能以mysql的用户去操作它。
    在这里插入图片描述
    如上图所示,表结构也要全部修改!!!

    展开全文
  • Linux-定时脚本将一台服务器上的mysql数据库自动备份到另一台服务器数据库中 有两台服务器,一台正式服务器A,一台测试服务器B,现需要将正式服务器A中的数据库每天备份到测试服务器B,提高数据库的容灾性以及...

    Linux-定时脚本将一台服务器上的mysql数据库自动备份到另一台服务器的数据库中

    有两台服务器,一台正式服务器A,一台测试服务器B,现需要将正式服务器A中的数据库每天备份到测试服务器B,提高数据库的容灾性以及防止数据库在测试中出现错误。

    1.从正式服务器A中导出需要备份的数据库

    使用mysqldump指令导出数据库文件

    /usr/sbin/mysqldump -u root -ppassword database | gzip > bakdatabaseName.sql.gz

    password为数据库密码,database为需要备份的数据库名

    2.将备份的数据库文件发送至测试服务器B

    使用scp指令发送备份的数据库文件

    scp bakdatabaseName.sql.gz root@测试服务器B的IP:/root/mysqlbak/bakdatabaseName.sql.gz

    该操作需要输入测试服务器B的密码,所以通过另外一个expect脚本实现与终端的交互从而实现自动输入密码,expect需要安装。

    3.通过expect脚本实现运行scp指令后自动输入密码

     

    #!/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 yourpassword

    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\r"

    exp_continue

    }

    "*es/no)?*" {

    send "yes\r"

    exp_continue

    }

    timeout {

    puts "connect is timeout"

    exit 3

    }

    }

     

    只需将代码中的yourpassword改为测试服务器B的密码,配置完之后运行下面指令

    /usr/sbin/scp.exp bakdatabaseName.sql.gz root@测试服务器B的IP:/root/mysqlbak/bakdatabaseName.sql.gz

    完整代码

    bakmysql.sh

    #!/bin/bash

        backupdir=/home/backup

        mysql_bin_dir=/usr/bin    #mysqldump的路径

        databaseName=test    #备份的数据库名字

        bakdatabaseName=backup_test    #备份的数据库全部表的文件名

        mysqluser=root    #正式服务器A的mysql用户名

        mysqlpwd=@126.com    #正式服务器A的mysql密码

        targetServerUser=root    #测试服务器B的用户名

        targetServerIP=172.16.3.35    #测试服务器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

    添加脚本执行权限

    chmod a+x /home/backup/scp.exp

    chmod a+x /home/backup/bakmysql.sh

      #添加脚本执行权限

    5、编辑系统任务执行计划

    crontab -e

    #输入一下信息“:

    00 01 * * * /DATA/bakdata/bakdata.sh#每天凌晨1点,以oracle用户执行ordatabak.sh备份文件

    :wq! #保存退出

    #重启crontab

    service crond restart

    #从此每天的凌晨1点 系统会自动完成数据库的备份,压缩,并上传到远程服务器的指定路径下!

     

    4.将备份的数据库文件导入到测试服务器B的mysql中

    gzip -dc /root/mysqlbak/bakdatabaseName.sql.gz | mysql -u user -ppasswd database

    完整代码

    #!/bin/bash

    # FileName:updatemysql.sh

    # This is a ShellScript For Auto DB Backup and Delete old Backup

    #

    backupdir=/root/mysqlbak           #测试服务器B数据库备份文件路径

    mysql_bin_dir=/usr/sbin            #测试服务器B的mysql的安装路径

    databaseName=database              #数据库名字

    bakdatabaseName=database_bak_      #备份的数据库的文件名

    mysqluser=user                     #测试服务器B的mysql用户名

    mysqlpwd=passwd                    #测试服务器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

     

    将updatemysql.sh加入到测试服务器B的crontab定时任务中,定时时间要比bakmysql.sh的定时时间晚一些

    注意:

    1. 正式服务器A的mysql版本要比测试服务器B的mysql版本高,否则导入会失败

    2. 数据库备份文件导入时由于数据量很大,会出现连接超时

        需要修改mysql配置文件/etc/my.cnf

        将[mysqld]中的max_allowed_packet 修改大一点 如20M

        max_allowed_packet = 20M

        重启mysql

        service mysqld restart

        如果还是出现连接超时

        在/etc/my.cnf添加以下代码

     

        [mysqldump]

        quick

        max_allowed_packet = 16M

    感谢:

    https://blog.csdn.net/ffortunateoy/article/details/79384036

    https://blog.csdn.net/qq_35912734/article/details/78903760

    https://www.cnblogs.com/intval/p/5763929.html

    展开全文
  • 台服务器一台正式服务器A,一台测试服务器B,现需要将正式服务器A中的数据库每天备份到测试服务器B。 1.从正式服务器A中导出需要备份的数据库 使用mysqldump指令导出数据库文件 /usr/sbin/mysqldump -u root ...

    两台服务器,一台正式服务器A,一台测试服务器B,现需要将正式服务器A中的数据库每天备份到测试服务器B。

    1.从正式服务器A中导出需要备份的数据库

    使用mysqldump指令导出数据库文件

    /usr/sbin/mysqldump -u root -ppassword database | gzip > bakdatabaseName.sql.gz

    password为数据库密码,database为需要备份的数据库名
    2.将备份的数据库文件发送至测试服务器B

    使用scp指令发送备份的数据库文件

    scp bakdatabaseName.sql.gz root@测试服务器B的IP:/root/mysqlbak/bakdatabaseName.sql.gz

    该操作需要输入测试服务器B的密码,所以通过另外一个expect脚本实现与终端的交互从而实现自动输入密码,expect需要安装。
    3.通过expect脚本实现运行scp指令后自动输入密码

    #!/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 yourpassword
    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\r"
            exp_continue
        }
        "*es/no)?*" {
            send "yes\r"
            exp_continue
        }
        timeout {
            puts "connect is timeout"
            exit 3
        }
    }

    只需将代码中的yourpassword改为测试服务器B的密码,配置完之后运行下面指令

    /usr/sbin/scp.exp bakdatabaseName.sql.gz root@测试服务器B的IP:/root/mysqlbak/bakdatabaseName.sql.gz
    完整代码

    #!/bin/bash
    # FileName:bakmysql.sh
    # This is a ShellScript For Auto DB Backup
    #
    backupdir=/root/mysqlbak         #本服务器备份路径
    mysql_bin_dir=/usr/sbin          #mysqldump的路径
    databaseName=database            #备份的数据库名字
    bakdatabaseName=database_bak_    #备份的数据库全部表的文件名
    mysqluser=user                   #正式服务器A的mysql用户名
    mysqlpwd=password                #正式服务器A的mysql密码
    targetServerUser=root            #测试服务器B的用户名
    targetServerIP=B_IP              #测试服务器B的IP地址
    targetpath=/root/mysqlbak        #测试服务器B备份路径
    time=` date +%Y%m%d `            #当天的日期年月日

    #从数据库导出数据库备份文件
    $mysql_bin_dir/mysqldump --socket=/tmp/mysql.sock -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
    /usr/sbin/scp.exp $backupdir/$bakdatabaseName$time.sql.gz $targetServerUser@$targetServerIP:$targetpath/$bakdatabaseName$time.sql.gz

    将bakmysql.sh加入到正式服务器A的crontab定时任务中
    4.将备份的数据库文件导入到测试服务器B的mysql中

    gzip -dc /root/mysqlbak/bakdatabaseName.sql.gz | mysql -u user -ppasswd database

    完整代码

    #!/bin/bash
    # FileName:updatemysql.sh
    # This is a ShellScript For Auto DB Backup and Delete old Backup
    #
    backupdir=/root/mysqlbak           #测试服务器B数据库备份文件路径
    mysql_bin_dir=/usr/sbin            #测试服务器B的mysql的安装路径
    databaseName=database              #数据库名字
    bakdatabaseName=database_bak_      #备份的数据库的文件名
    mysqluser=user                     #测试服务器B的mysql用户名
    mysqlpwd=passwd                    #测试服务器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

    将updatemysql.sh加入到测试服务器B的crontab定时任务中,定时时间要比bakmysql.sh的定时时间晚一些
    注意:

    1. 正式服务器A的mysql版本要比测试服务器B的mysql版本高,否则导入会失败

    2. 数据库备份文件导入时由于数据量很大,会出现连接超时

        需要修改mysql配置文件/etc/my.cnf

        将[mysqld]中的max_allowed_packet 修改大一点 如20M

        max_allowed_packet = 20M

        重启mysql

        service mysqld restart

        如果还是出现连接超时

        在/etc/my.cnf添加以下代码

        [mysqldump]
        quick
        max_allowed_packet = 16M
     

    展开全文
  • 假设服务器A是一台数据库服务器服务器B是一台备份服务器,我们需要在A服务器上编写数据备份与文件推送到服务器B的脚步 back.sh 备份保存目录 folder=/home/mysql-back-up rm -rf /home/mysql-back-up mkdir $...

    假设服务器A是一台数据库服务器,服务器B是一台备份服务器,我们需要在A服务器上编写数据备份与文件推送到服务器B的脚步

    back.sh 

    备份保存目录
    folder=/home/mysql-back-up
    rm -rf /home/mysql-back-up
    mkdir  $folder
    cd $folder
    day=`date +%Y-%m-%d`
    mkdir -p "$day"
    cd $day
    #数据库服务器ip,填写服务器的公网地址即可
    host=serverIP
    #用户名
    user=userName
    #密码 自己写
    password=myPassword
    #要备份的数据库名
    #db=dbName
    db=dbName
    #执行备份语句
    /usr/local/mysql/bin/mysqldump -h$host -u$user -p$password $db > ./backFileName.sql
    #推送文件到备份服务器
    /usr/local/scp.exp /home/mysql-back-up/ 服务器用户@服务器地址:/home/
    

    通过expect脚本实现运行scp指令后自动输入密码

    需要安装expect ,yum install expect

    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 myPassword
    
    set passwderror 0
    
    spawn scp -r -p $local_file $remote_path
    
    expect {
    
    "*assword:*" {
    
    if { $passwderror == 1 } {
    
    puts "passwd is error"
    
    exit 2
    
    }
    
    set timeout 1000
    
    set passwderror 1
    
    send "$passwd\r"
    
    exp_continue
    
    }
    
    "*es/no)?*" {
    
    send "yes\r"
    
    exp_continue
    
    }
    
    timeout {
    
    puts "connect is timeout"
    
    exit 3
    
    }
    
    }
    

    把myPassword改成服务器B的密码即可 

    1、脚本需要加上权限 chmod -R 777 back.sh

    2、创建定时任务

          a)、crontab -e

          b)、0 1 * * * sh /usr/local/back.sh #每天凌晨一点执行

          c)、/bin/systemctl restart crond.service 重启cron

    展开全文
  • 、概述: 备份是容灾的基础,是指为防止系统出现操作失误或系统故障导致数据丢失,而将全部或部分数据集合从应用主机的硬盘或阵列复制到其它的...那么Linux如何实现将Mysql数据库自动从服务器A备份到服务器B呢? ...
  • mysql数据库自动备份到另一台服务器

    千次阅读 2017-08-08 17:03:23
    服务器:192.168.1.112192.168.1.111 先配置免密登陆 ssh-keygen ssh-copy-id 192.168.1.111 shell脚本如下 #!/bin/sh # mysql_backup.sh: backup mysql databases and keep newest 5 days backup. # # Last ...
  • 有两台服务器一台正式服务器A,一台测试服务器B,现需要将正式服务器A中的数据库每天备份到测试服务器B,提高数据库的容灾性以及防止数据库在测试中出现错误。1.从正式服务器A中导出需要备份的数据库使用mysqldump...
  • 参考文章: Linux如何将Mysql数据库自动从一台服务器备份到另一台服务器
  • 需求:将A机器的数据库远程备份到另B机器 在B机器新建文件夹并赋予everyone的读写权限 A机器存储过程如下: create proc [dbo].[usp_backupinfo]  @backupdir varchar(500),@dblist varchar(max)   as  ...
  • 将mysql数据库导入目标机器后,执行mysqladmin flush-privileges,以便服务器重载授权表信息。D:/MySql 5.1.73/bin/mysqladmin -u root create test2;D:/Mysql 5.1.73/bin/mysqladmin -u root drop test2;warning...
  • 这篇文章写的要将服务器 A 中的 MySQL 数据库中的数据备份到另一服务器 B 中的 MySQL 数据库中。一、准备条件两环境基本一致、拥有 MySQL 的 Linux 服务器(我在下面的描述中会将他们称为服务器 A,服务器 B)备注...
  • 从AB服务器 1、下面这是我的 automysq_beifen.sh文件 变量的声明和等号之间不能有空格 str=$(date +%Y%m%d_%H%M) mysqldump -uroot -p密码 &gt;&gt;/usr/mysql_data/my_data/test${str}.sql sleep 3...
  • 1.假设服务器A是一台数据库服务器服务器B是一台备份服务器 2.我们要做的是在A服务器上编写back.sh脚本,通过back.sh脚本文件备份A服务器上的mysql文件 3.接下来我们要在A服务器上编写push.sh脚本,将备份好的mysql...
  • 这次要转移的数据库是MyISAM,转移起来比较简单,但目标数据库是Master-Slave方式的,所以转移起来需要注意:1 转移Master时,Master-Slave的数据应该是一样的,否则会导致同步出问题2 转移Master时,切换时间尽...
  • 数据库版本为SQL Sever 2000, 需要完成的任务为将一台服务器上的数据库复制到另一台服务器上。方法一: 对于大容量数据的数据库来说,使用备份数据库和还原数据库的方法,就需要传送大容量的数据库文件。以下介绍...
  • mysqldump2 “ mysqldump”备份工具的接口。 它可用于转储CMSMS数据库以进行备份或将数据传输到另一台服务器。 使用cmsms 2.2.15测试
  • 背景:最近有个需求,备份服务器A的数据库到服务器B,最后分析了下,主要涉及两部分(免密登录和定时任务执行脚本)。 、免密登录 免密登录可参考以下链接:https://www.jianshu.com/p/6ac4f8311476 二、...
  • 备份和还原 在源服务器备份用户数据库,然后将用户数据库还原目标服务器上。 1 在备份过程中可能仍然有人在使用数据库。如果用户在备份完成后对数据库执行 INSERT、UPDATE 或 DELETE 语句,则备份中不会...
  • 如何每天定时将服务器中SQL SERVER 2000数据库备份到局域网中另一台工作站上[转自 http://blog.chinaunix.net/u2/84280/showart_2016599.html]打开企业管理器,展开你的SQL Server服务实例,看到“管理”没有?...
  • 下载MySQL Tools for 5.0这个工具,连接服务器上的mysql生产数据库,然后进入界面,选择backup,设置基本的配置,选择个保存路径,就可以实现备份,创建过程如图过程:
  • 就是数据库还原时目录不对,找不当前的数据库文件目录,才产生上面错误的原因,改一下当前还原的数据库所在的目录就OK了。
  • 从别一台服务器上得到一个数据库备份还原本地,数据库中的用户无法登录孤立用户问题:从别一台服务器上得到一个数据库备份.还原本地,数据库中的用户无法登录,也就是联机帮助中说的还原备份可能产生的孤立用户问题...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 397
精华内容 158
关键字:

数据库备份到另一台服务器