mysql 数据库备份和还原方法集锦 推荐

2019-01-03 14:39:12王旭

它只是在一开始的瞬间请求锁表,然后就刷新binlog了,而后在导出的文件中加入CHANGE MASTER 语句来指定当前备份的binlog位置,如果要把这个文件恢复到slave里去,就可以采用这种方法来做。

1.2 还原

mysqldump 备份出来的文件是一个可以直接倒入的 SQL 脚本,有两种方法可以将数据导入。

    直接用 mysql 客户端

    例如:

    /usr/local/mysql/bin/mysql -uyejr -pyejr db_name < db_name.sql
    

     

    用 SOURCE 语法

    其实这不是标准的 SQL 语法,而是 mysql 客户端提供的功能,例如:

    SOURCE /tmp/db_name.sql;
    

    这里需要指定文件的绝对路径,并且必须是 mysqld 运行用户(例如 nobody)有权限读取的文件。

    2、 mysqlhotcopy

    2.1 备份

    mysqlhotcopy 是一个 PERL 程序,最初由Tim Bunce编写。它使用 LOCK TABLES、FLUSH TABLEScpscp 来快速备份数据库。它是备份数据库或单个表的最快的途径,但它只能运行在数据库文件(包括数据表定义文件、数据文件、索引文件)所在的机器上。mysqlhotcopy 只能用于备份 MyISAM,并且只能运行在 类UnixNetWare 系统上。

    mysqlhotcopy 支持一次性拷贝多个数据库,同时还支持正则表达。以下是几个例子:

    root#/usr/local/mysql/bin/mysqlhotcopy -h=localhost -u=yejr -p=yejr 
    db_name /tmp (把数据库目录 db_name 拷贝到 /tmp 下)
    root#/usr/local/mysql/bin/mysqlhotcopy -h=localhost -u=yejr -p=yejr 
    db_name_1 ... db_name_n /tmp
    root#/usr/local/mysql/bin/mysqlhotcopy -h=localhost -u=yejr -p=yejr 
    db_name./regex/ /tmp
    

    更详细的使用方法请查看手册,或者调用下面的命令来查看 mysqlhotcopy 的帮助:

    perldoc /usr/local/mysql/bin/mysqlhotcopy
    

    注意,想要使用 mysqlhotcopy,必须要有 SELECT、RELOAD(要执行 FLUSH TABLES) 权限,并且还必须要能够有读取 datadir/db_name 目录的权限。

    2.2 还原

    mysqlhotcopy 备份出来的是整个数据库目录,使用时可以直接拷贝到 mysqld 指定的 datadir (在这里是 /usr/local/mysql/data/)目录下即可,同时要注意权限的问题,如下例:

    root#cp -rf db_name /usr/local/mysql/data/
    root#chown -R nobody:nobody /usr/local/mysql/data/ (将 db_name 目录的属主改成 mysqld 运行用户)
    

     

    3、 SQL 语法备份

    3.1 备份

    BACKUP TABLE 语法其实和 mysqlhotcopy 的工作原理差不多,都是锁表,然后拷贝数据文件。它能实现在线备份,但是效果不理想,因此不推荐使用。它只拷贝表结构文件和数据文件,不同时拷贝索引文件,因此恢复时比较慢。