详细介绍mysql针对单张表的备份与还原的示例代码

黄舟
Lepaskan: 2017-03-18 13:55:35
asal
1245 orang telah melayarinya

下面小编就为大家带来一篇浅谈mysql 针对单张表的备份与还原。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

A、MySQL 备份工具xtrabackup 的安装

1. percona 官方xtrabackup 的二进制版本;二进制版本解压就能用了。

2. 解压xtrabackup & 创建连接

tar -xzvf percona-xtrabackup-2.3.4-
Linux
-x86_64.tar.gz -C /usr/local/
ln -s /usr/local/percona-xtrabackup-2.3.4 /usr/local/xtrabackup
Salin selepas log masuk

3. 设置PATH环境变量

export PATH=/usr/local/xtrabackup/bin/:$PATH
Salin selepas log masuk

B、在mysql数据库中创建一个用户备份的用户 & 授权

1. 创建用户

    create user backuper@'localhost' ident
if
ied by 'backup123';
        create user backuper@'127.0.0.1' identified by 'backup123';
Salin selepas log masuk

2. 授权

grant reload,lock tables,replication client,process,
super
 on *.* to 'backuper'@'localhost';
        grant create,insert,select on percona_schema.xtrabackup_history to 'backuper'@'localhost';
        grant reload,lock tables,replication client,process,super on *.* to 'backuper'@'127.0.0.1';
        grant create,insert,select on percona_schema.xtrabackup_history to 'backuper'@'127.0.0.1';
Salin selepas log masuk

C、备份前的检查,这一步的主要目地是在之后做还原操作时,验证还原是不是有效;(生产是没有这一步的,

1.

select * from tempdb.dictmajor;   
select * from dictmajor;
        +--------------+-----------------+        
        | column_value | column_mean     |        
        +--------------+-----------------+        
        |            1 | 汉语言文学      |        
        |            2 | 精算            |        
        |            3 | 生物制药        |        
        |            4 | 材料化学        |        
        |            5 | 商务英语        |        
        |            6 | 考古            |        
        |            7 | 外交            |        
        |            8 | 导游            |        
        +--------------+-----------------+
Salin selepas log masuk

D、备份tempdb.dictmajor 表

1. 备份命令

innobackupex --host=127.0.0.1 --user=backuper --password=backup123 --port=3306 --include='tempdb.dictmajor' /tmp/tempdb
Salin selepas log masuk

2. 备份完成后会在备份目录(/tmp/tempdb) 下生成用当前时间命名的目录,里面保存的就是备份文件

   tree /tmp/tempdb/
        /tmp/tempdb/
        └── 2016-09-10_18-25-16
            ├── backup-my.cnf
            ├── ibdata1
            ├── tempdb
            │   ├── dictmajor.frm
            │   └── dictmajor.ibd
            ├── xtrabackup_binlog_info
            ├── xtrabackup_checkpoints
            ├── xtrabackup_info
            └── xtrabackup_logfile
Salin selepas log masuk


E、备份完成后就可以删除tempdb.dictmajor表了(注意这里一定要保存一份表的定义,还原时会用到)

mysql>drop table tempdb.dictmajor;
Salin selepas log masuk
Salin selepas log masuk

F、为了得到一个一致的备份集 在还原操作前还要进行一次日志的前滚和回滚

1. 前滚&回滚日志

innobackupex --apply-log --export /tmp/tempdb/2016-09-10_18-25-16/
Salin selepas log masuk

2. 与前滚& 回滚前的对比

  tree /tmp/tempdb/
        /tmp/tempdb/
        └── 2016-09-10_18-25-16
            ├── backup-my.cnf
            ├── ibdata1
            ├── ib_logfile0
            ├── ib_logfile1
            ├── tempdb
            │   ├── dictmajor.cfg
            │   ├── dictmajor.exp
            │   ├── dictmajor.frm
            │   └── dictmajor.ibd
            ├── xtrabackup_binlog_info
            ├── xtrabackup_binlog_pos_innodb
            ├── xtrabackup_checkpoints
            ├── xtrabackup_info
            └── xtrabackup_logfile
Salin selepas log masuk


G、还原tempdb.dictmajor表

1. 创建 tempdb.dictmajor表

  create table dictmajor(
        column_value tinyint not null,
        column_mean varchar(32) not null,
        constraint pkdictmajor primary key (column_value));
Salin selepas log masuk

2. 删除 tempdb.dictmajor的表空间文件

alter table tempdb.dictmajor discard tablespace;
Salin selepas log masuk

3. 把备份中的表空间文件复制到tempdb.dictmajor 表空间应该在的位置

   cp /tmp/tempdb/2016-09-10_18-25-16/tempdb/dictmajor.ibd /usr/local/mysql/data/tempdb/
        cp /tmp/tempdb/2016-09-10_18-25-16/tempdb/dictmajor.exp /usr/local/mysql/data/tempdb/
        cp /tmp/tempdb/2016-09-10_18-25-16/tempdb/dictmajor.cfg /usr/local/mysql/data/tempdb/
        chown -R mysql:mysql /usr/local/mysql/data/tempdb/*
Salin selepas log masuk


4. 导入表空间文件

alter table tempdb.dictmajor import tablespace;
Salin selepas log masuk

5. 查看dictmajor表恢复情况

      select * from dictmajor;
        +--------------+-----------------+
        | column_value | column_mean     |
        +--------------+-----------------+
        |            1 | 汉语言文学      |
        |            2 | 精算            |
        |            3 | 生物制药        |
        |            4 | 材料化学        |
        |            5 | 商务英语        |
        |            6 | 考古            |
        |            7 | 外交            |
        |            8 | 导游            |
        +--------------+-----------------+
Salin selepas log masuk

---------------------------------------------------------------

上一节用的是xtrabackup 对表进行备份,它的应用场景是单表的数据量大且在备份的过程中还要支持对表的写操作;也就是说在目前的场景下mysqldump 这个简单的

备份工具也是可以满足要求的;


现给出mysqldump 备份的一般步骤

A:创建备份用户

1.

  create user dumper@'127.0.0.1' identified by 'dumper123';
        grant select on *.* to dumper@'127.0.0.1';
        grant show view on *.* to dumper@'127.0.0.1';
        grant lock tables on *.* to dumper@'127.0.0.1';
        grant trigger on *.* to dumper@'127.0.0.1';
Salin selepas log masuk


B:备份tempdb.dictmajor表

1.

mysqldump --host=127.0.0.1 --port=3306 --user=dumper --password=dumper123 --quick tempdb dictmajor >/tmp/tempdb.dictmajor.sql
Salin selepas log masuk

C: 删除已经备份的表

1.

mysql>drop table tempdb.dictmajor;
Salin selepas log masuk
Salin selepas log masuk

D:还原tempdb.dictmajor表

1.

mysql -uroot -pxxxxx -h127.0.0.1 -p3306 tempdb </tmp/tempdb.dictmajor.sql
Salin selepas log masuk

E:检证还原的有效性

1.
select * from dictmajor;

   +--------------+-----------------+
        | column_value | column_mean     |
        +--------------+-----------------+
        |            1 | 汉语言文学      |
        |            2 | 精算            |
        |            3 | 生物制药        |
        |            4 | 材料化学        |
        |            5 | 商务英语        |
        |            6 | 考古            |
        |            7 | 外交            |
        |            8 | 导游            |
        +--------------+-----------------+
Salin selepas log masuk

Atas ialah kandungan terperinci 详细介绍mysql针对单张表的备份与还原的示例代码. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan