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
    3. 设置PATH环境变量
        export PATH=/usr/local/xtrabackup/bin/:$PATH

B、在mysql数据库中创建一个用户备份的用户 & 授权
    1. 创建用户
        create user [email protected]‘localhost‘ identified by ‘backup123‘;
        create user [email protected]‘127.0.0.1‘ identified by ‘backup123‘;
    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‘;

C、备份前的检查,这一步的主要目地是在之后做还原操作时,验证还原是不是有效;(生产是没有这一步的,
    1. select * from tempdb.dict__major;
        select * from dict__major;
        +--------------+-----------------+
        | column_value | column_mean     |
        +--------------+-----------------+
        |            1 | 汉语言文学      |
        |            2 | 精算            |
        |            3 | 生物制药        |
        |            4 | 材料化学        |
        |            5 | 商务英语        |
        |            6 | 考古            |
        |            7 | 外交            |
        |            8 | 导游            |
        +--------------+-----------------+

D、备份tempdb.dict__major 表
    1. 备份命令
        innobackupex --host=127.0.0.1 --user=backuper --password=backup123 --port=3306 --include=‘tempdb.dict__major‘ /tmp/tempdb

    2. 备份完成后会在备份目录(/tmp/tempdb) 下生成用当前时间命名的目录,里面保存的就是备份文件
        tree /tmp/tempdb/
        /tmp/tempdb/
        └── 2016-09-10_18-25-16
            ├── backup-my.cnf
            ├── ibdata1
            ├── tempdb
            │   ├── dict__major.frm
            │   └── dict__major.ibd
            ├── xtrabackup_binlog_info
            ├── xtrabackup_checkpoints
            ├── xtrabackup_info
            └── xtrabackup_logfile

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

F、为了得到一个一致的备份集 在还原操作前还要进行一次日志的前滚和回滚
    1. 前滚&回滚日志
        innobackupex --apply-log --export /tmp/tempdb/2016-09-10_18-25-16/

    2.  与前滚& 回滚前的对比
        tree /tmp/tempdb/
        /tmp/tempdb/
        └── 2016-09-10_18-25-16
            ├── backup-my.cnf
            ├── ibdata1
            ├── ib_logfile0
            ├── ib_logfile1
            ├── tempdb
            │   ├── dict__major.cfg
            │   ├── dict__major.exp
            │   ├── dict__major.frm
            │   └── dict__major.ibd
            ├── xtrabackup_binlog_info
            ├── xtrabackup_binlog_pos_innodb
            ├── xtrabackup_checkpoints
            ├── xtrabackup_info
            └── xtrabackup_logfile

G、还原tempdb.dict__major表
    1. 创建 tempdb.dict__major表
        create table dict__major(
            column_value tinyint not null,
            column_mean varchar(32) not null,
            constraint pk__dict__major primary key (column_value));
    2. 删除 tempdb.dict__major的表空间文件
        alter table tempdb.dict__major discard tablespace;

    3. 把备份中的表空间文件复制到tempdb.dict__major 表空间应该在的位置
        cp /tmp/tempdb/2016-09-10_18-25-16/tempdb/dict__major.ibd /usr/local/mysql/data/tempdb/
        cp /tmp/tempdb/2016-09-10_18-25-16/tempdb/dict__major.exp /usr/local/mysql/data/tempdb/
        cp /tmp/tempdb/2016-09-10_18-25-16/tempdb/dict__major.cfg /usr/local/mysql/data/tempdb/
        chown -R mysql:mysql /usr/local/mysql/data/tempdb/*

    4. 导入表空间文件
        alter table tempdb.dict__major import tablespace;

    5. 查看dict__major表恢复情况
        select * from dict__major;
        +--------------+-----------------+
        | column_value | column_mean     |
        +--------------+-----------------+
        |            1 | 汉语言文学      |
        |            2 | 精算            |
        |            3 | 生物制药        |
        |            4 | 材料化学        |
        |            5 | 商务英语        |
        |            6 | 考古            |
        |            7 | 外交            |
        |            8 | 导游            |
        +--------------+-----------------+

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

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

现给出mysqldump 备份的一般步骤

A:创建备份用户
    1.
        create user [email protected]‘127.0.0.1‘ identified by ‘dumper123‘;
        grant select on *.* to [email protected]‘127.0.0.1‘;
        grant show view on *.* to [email protected]‘127.0.0.1‘;
        grant lock tables on *.* to [email protected]‘127.0.0.1‘;
        grant trigger on *.* to [email protected]‘127.0.0.1‘;

B:备份tempdb.dict__major表
    1.
        mysqldump --host=127.0.0.1 --port=3306 --user=dumper --password=dumper123 --quick tempdb dict__major >/tmp/tempdb.dict__major.sql

C: 删除已经备份的表
    1.
        mysql>drop table tempdb.dict__major;

D:还原tempdb.dict__major表
    1.
        mysql -uroot -pxxxxx -h127.0.0.1 -p3306 tempdb </tmp/tempdb.dict__major.sql

E:检证还原的有效性
    1.
        select * from dict__major;
        +--------------+-----------------+
        | column_value | column_mean     |
        +--------------+-----------------+
        |            1 | 汉语言文学      |
        |            2 | 精算            |
        |            3 | 生物制药        |
        |            4 | 材料化学        |
        |            5 | 商务英语        |
        |            6 | 考古            |
        |            7 | 外交            |
        |            8 | 导游            |
        +--------------+-----------------+
时间: 2024-08-07 08:40:22

mysql 针对单张表的备份与还原的相关文章

Linux命令:MySQL系列之十三--MySQL备份与还原(针对单张表SELECT备份)

对于只备份单张表的备份与还原,通过SELECT命令,可以更快速的达到备份和恢复的目的: 以及通过此方法把一个数据库中表的数据,导入至另一数据库的表中去. 备份格式:SELECT * INTO OUTFILE '/PATH/TO/somefile.txt' FROM table_name [WHERE CLAUSE]; #备份table_name表中的[或者备份满足WHERE语句的数据]数据至服务器上保存. 注释:table_name:需要备份的表  WHERE:满足的条件,可选项. /PATH/

Linux命令:MySQL系列之十二--MySQL备份与还原(针对单张表SELECT备份)

对于只备份单张表的备份与还原,通过SELECT命令,可以更快速的达到备份和恢复的目的: 以及通过此方法把一个数据库中表的数据,导入至另一数据库的表中去. 备份格式:SELECT * INTO OUTFILE '/PATH/TO/somefile.txt' FROM table_name [WHERE CLAUSE]; #备份table_name表中的[或者备份满足WHERE语句的数据]数据至服务器上保存. 注释:table_name:需要备份的表  WHERE:满足的条件,可选项. /PATH/

MySQL 拷贝数据库表方式备份,还原后提示 table xxx &#39;&#39; doesn`t exist

MySQL很强大,支持直接拷贝数据库文件快速备份,那数据库文件在哪里呢? 打开MySQL的配置文件 my.ini,找到 datadir 节点,如 datadir="D:/Program Files/MySQL/MySQL Server 5.1/data" 进入上述文件夹,就可以看到MySQL中新建的数据库文件夹了,每个文件夹以数据库名命名的,你想备份哪个数据库,把这个文件夹拷贝走即可.到时还原数据库,把它拷贝到data目录下即可,就这么简单! 但是,今天在一台MySQL服务器上拷贝备份

MySQL数据库及表的备份与还原

备份 导出数据库所有表结构 mysqldump -uroot -ppassword -d dbname > db.sql 导出数据库某个表结构 mysqldump -uroot -ppassword -d dbname tablename > db.sql 导出数据库所有表结构及数据 mysqldump -uroot -ppassword dbname > db.sql 导出数据库某个表结构及数据 mysqldump -uroot -ppassword dbname tablename

mysql数据库同步可以针对单张表同步吗?解决办法

mysql数据库同步可以针对单张表同步吗?第一个问题:mysql数据库同步可以针对单张表同步吗? 也就是说1.数据库A里面有a1,a2,a3三张表,数据库B里面只有一张a1表(A与B的a1的表结构式一样的)2.数据库B只同步数据库A中的a1表3.数据库A也要同步B的a1表 注:其实可以认为是数据库A与数据库B的a1表双向同步,即A数据库a1数据有改变,,B数据库a1也要相应改变,同理B数据库a1有改变,A数据库a1也要改变(Aa1<=>Ba1) 第二个问题:配置数据库同步linux与windo

SQL Server 2012入门图解:建表、备份、还原

SQL Server 2012入门图解:建表.备份.还原_.NET教程网——简单专业的.NET技术网站 http://www.soaspx.com/dotnet/sql/sql2012/sqlserver212_20120504_9079.html 作者:汪宇杰 一.建立你的第一个数据库和表 例:建立一个用于描述一个学校学生情况的数据库.把它命名为School.并且要在School数据库下建立保存学生信息的表Student.在可视化界面下,我们通常这样操作.(本文是入门教程,不介绍如何用SQL语

linux mysql 数据按表名称备份

1.按表名称备份 #!/bin/bash #user #数据库用户 dbuser="root" #数据库密码 dbpassword="chenyong" #时间 date=$(date +%Y%m%d) #数据库名称 dbname=sungrowv3 #备份数据保存的路劲 url=/home/test/sql/ #指定数据库的所以表 tables=$(mysql -u$dbuser -p$dbpassword -ss -e "use $dbname;sho

MySQL数据库 分表分库备份及批量恢复如何进行?

脚本实现 #!/bin/bash for db_name in `mysql -e "show databases;"|sed 1d` do mkdir -p /backup/$db_name for table_name in `mysql -e "show tables from $db_name"|sed 1d` do /application/mysql/bin/mysqldump  --master-data=2 $db_name $table_name

php+mysql 数据库分表分段备份程序--宋正河

<?php //宋正河 转载请注明出处 set_time_limit(0); header('content-type:text/html;charset=utf-8'); mysql_connect('localhost','root','root'); mysql_select_db('test'); $table_array=get_tables('test'); mysql_query('set names utf8'); $filesize=1024*1024*4; $start=$_