备份MySQL数据库(Backup MySQL database)

2019-08-01 13:18发布

我有大约1.7GB MySQL数据库。 我通常备份,使用mysqldump,这大约需要2分钟。 不过,我想知道答案的下列问题:

  1. 是否mysqldump的块读取和/或写入操作到数据库? 因为在现场的情况下,我不希望使用数据库的同时正在备份它阻止用户。

  2. 这将是理想的我只备份整个数据库一次,比方说,一个星期,但在中间日子只有一个表需要被备份为其他人将不会改变。 有没有一种方法来实现这一目标?

  3. 是mysqlhotcopy的这些目的是更好的选择?

Answer 1:

  1. 不,你可以指定表使用--lock-表被锁定,但它们不是默认
  2. 如果没有指定任何表,那么整个数据库进行备份,也可以指定表的列表:

    mysqldump的[选项] DB_NAME [表]

  3. 没有使用过遗憾,但是我跑了许多的MySQL DB的,一些大的比一些小的1.7GB和我使用mysqldump为我所有的备份。



Answer 2:

mysqlhotcopy的并不在某些情况下readlock丢失工作,不与InnoDB表工作。

mysqldump的是更多的使用,因为它可以备份各种表。

从MySQL文档

mysqlhotcopy的是,最初书面和贡献的蒂姆·邦斯一个Perl脚本。 它使用LOCK TABLES,FLUSH TABLES和cp或scp来快速进行数据库备份。 这是使数据库或单个表的备份的最快的途径,但它只能在数据库目录所在的同一台机器上运行。 mysqlhotcopy只用于备份MyISAM和ARCHIVE表。 它运行在Unix和NetWare

mysqldump的客户端最初是由伊戈尔·罗曼写入的备份程序。 它可用于转储数据库或进行备份或转移到另一个SQL服务器(不一定是一个MySQL服务器)的数据库集合。 转储通常包含SQL语句来创建表,填充它,或两者兼而有之。 然而,mysqldump的也可以用来生成CSV XML格式的文件,其他分隔文本,或。

再见。



Answer 3:

1)mysqldump的仅几个街区,当你问它(的--lock-表之一,--lock-全表,--single事务)。 但如果你想你的备份是一致的,然后mysqldump的应该阻止(使用--single-交易或--lock-全表),或者你可能会得到不一致的数据库快照。 注:只针对InnoDB的--single事务工作。

2)确定,只是列举你想要的数据库名后要备份的表:

mysqldump OPTIONS DATABASE TABLE1 TABLE2 ...

另外,您可以排除不想要的表:

mysqldump ... --ignore-table=TABLE1 --ignore-table=TABLE2 .. DATABASE

所以,你可以做一个整体的数据库转储每周一次,并只备份更改表,每日一次。

3)mysqlhotcopy的精心工作在MyISAM表和你是关闭与InnoDB的更好的大多数应用程序。 有InnoDB表的hotbackup商业工具(相当昂贵)。 最近也有新的开源一个用于此目的- Xtrabackup

同时,自动化您可以使用过程astrails安全 。 它支持使用mysqldump和文件系统用tar数据库备份。 +加密+上传到S3,+其他许多好吃的东西。 没有xtrabackup支持,但它应该很容易增加,如果这是你所需要的。



Answer 4:

添加MySQL从您的设置将允许你采取洽备份,而不锁定生产数据库。

添加奴隶也给你改变的二进制日志。 转储是在你把转储时的数据库的快照。 二进制日志包含修改的数据与时间戳一起的所有语句。

如果你在一天中你唯一的备份服用,每日一次失败,你已经失去了一半的工作价值是一个天。 随着二进制日志和mysqldump的,你可以从上一交易日恢复和前进“玩”的日志故障点。

http://dev.mysql.com/doc/refman/5.0/en/binary-log.html

如果您使用LVM磁盘或与VSS在Windows服务器Linux服务器上运行MySQL,你应该看看Zamanda 。 它需要在磁盘上的数据,这是更快的读取和比对数据库的转储文恢复的二进制diff文件。



Answer 5:

Maatkit转储可能是有用的。

http://www.maatkit.org/doc/mk-parallel-dump.htmlhttp://www.maatkit.org/doc/mk-parallel-dump.html



Answer 6:

MySQL和PHP试试这个这也将在N天后删除文件

$dbhost = 'localhost';
$dbuser = 'xxxxx';
$dbpass = 'xxxxx';
$dbname = 'database1';  
$folder = 'backups/';  // Name of folder you want to place the file
$filename = $dbname . date("Y-m-d-H-i-s") . ".sql";
$remove_days = 7; // Number of days that the file will stay on the server



$command="mysqldump --host=$dbhost --user=$dbuser --password=$dbpass $dbname > $folder$filename";
system($command);

$files = (glob("$folder"."*.sql"));

    foreach($files as $file) {
        if(is_file($file)
        && time() - filemtime($file) >= $remove_days*24*60*60) { // 2 days =  2*24*60*60
            unlink($file);
            echo "$file removed \n";
        } else { echo "$file was last modified: " . date ("F d Y H:i:s.", filemtime($file)) . "\n"; }
    }


文章来源: Backup MySQL database