zoukankan      html  css  js  c++  java
  • mysql备份

    1. 直接打包数据库文件夹,如/usr/local/mysql/data/

    例子:

    mysql> create database abc;

    mysql> use abc;

    mysql> create table test(name char(10),age int(3));

    mysql> insert into test values ('xiaoming',10);

    mysql> select * from test;

     

    备份数据

    service mysqld stop

    cd /usr/local/mysql/data/

    yum -y install xz

    tar Jcf mysql_all-$(date +%F).tar.xz /usr/local/mysql/data/

     

    模拟数据丢失

     [root@localhost ~]# mkdir bak

    [root@localhost ~]# mv /usr/local/mysql/data/* bak/

     

    恢复数据:

    [root@localhost ~]# mkdir restore

    [root@localhost ~]# tar xf mysql_all-2016-12-08.tar.xz -C restore/

    [root@localhost ~]# mv restore/usr/local/mysql/data/* /usr/local/mysql/data/

    [root@localhost ~]# service mysqld start

    查看数据已经恢复

     

    2.完全备份

    1)对单个数据库备份

    格式: mysqldump -u 用户名 -p[密码]  数据库名  >  /备份路径/备份文件名

    例子:

     

    mysqldump -u root aaa > aaa.sql

     

    注意:这种备份方法不会在备份文件中有创建数据库的sql语句。还原时必须手动在数据中创建aaa数据库才能还原。

    加上--database 就会自动生成创建数库的sql语句。

     

     

    2)对多个库进行完全备份
    格式: mysqldump -u 用户名 -p [密码]  --databases 库名 1 [库名 2]… > /备份路径/备份文件名

    示例:

     

    mysqldump -u root --databases aaa bbb > all.sql

    注意:这种方法将两个数据库备份到了一个文件中,在备份的sql文件,会生成创建数据库的sql语句。

     

    3)对所有库进行完全备份
    格式: mysqldump -u 用户名 -p [密码] [选项] --all-databases > /备份路径/备份文件名

    示例:

    mysqldump -u root --all-databases > all.sql

     

    4)备份表

    格式: mysqldump -u 用户名 -p [密码] [选项] 数据库名 表名 > /备份路径/备份文件名

    mysqldump -uroot aaa test > table_test.sql

    还原:

    mysql -uroot aaa < table_test.sql

     

    5)备份表结构

    格式: mysqldump -u 用户名 -p [密码] -d 数据库名 表名 > /备份路径/备份文件名
    示例:

    mysqldump -uroot -d aaa test > table_test.sql

     

    备份实例:

    需求描述:
    北京移电通信公司的用户信息数据库为 client,用户资费数据表为 user_info
    请为该公司每周进行完全备份
    每天为该公司进行增量备份
    新增加的用户信息如表所示

     

     

     

     

     

     

     

     

     

    命令:

    create database client;

    use client;

    create table user_info(身份证 char(20) not null,姓名 char(20) not null,性别 char(4),用户ID号 char(10) not null,资费 int(10));

    insert into user_info values('000000006','孙空悟','男','016','10');

    insert into user_info values('000000007','蓝精灵','女','017','91');

    insert into user_info values('000000008','姜姜','女','018','23');

    select * from user_info;

     

    进行一次完全

    [root@localhost ~]# mkdir /mysql_bak
    [root@localhost ~]# mysqldump -uroot client user_info > /mysql_bak/client_userinfo-$(date +%F).sql
    [root@localhost ~]#mysqldump -uroot client > /mysql_bak/client-$(date +%F).sql
    [root@localhost ~]# ls /mysql_bak/

     

    刷新二进制文件

    cd /usr/local/mysql/data/

    ls

     

    开始刷新二进制文件

    [root@localhost data]# mysqladmin -uroot  flush-logs

     

    然后我们开始输入新的数据。这时候新的数据就会生成在新的二进制文件中

     

    mysql> use client;
    mysql> insert into user_info values('000000009','关云长','男','019','37');
    mysql> insert into user_info values('0000000010','罗纲','男','020','36');
    mysql> select * from user_info;

     

     

    进行增量备份

        查看刚才新生成的数据

       mysqlbinlog --no-defaults /usr/local/mysql/data/mysql-bin.000009

    备份刚才新生成的数据

    [root@localhost ~]# cd /usr/local/mysql/data/

    [root@localhost data]# cp -r mysql-bin.000009 /mysql_bak/

     

    模拟误操作删除 user_info 表
    [root@localhost ~]# mysql -uroot -e 'drop table client.user_info;'
    [root@localhost ~]# mysql -uroot -e 'select * from client.user_info;'
    ERROR 1146 (42S02) at line 1: Table 'client.user_info' doesn't exist

     

    恢复完全备份
    mysql -uroot client < /mysql_bak/client_userinfo-2016-12-09.sql
    mysql -uroot -e 'select * from client.user_info;'

     

    恢复增量备份
     mysqlbinlog --no-defaults /mysql_bak/mysql-bin.000002 | mysql -u root

    在查看是否恢复成功
     mysql -uroot -e 'select * from client.user_info;'

     

    恢复成功。

     

     

     

     

     

    基于时间点的增量备份恢复

    删除表。

    在重新恢复一下完全备份

    mysql -uroot  -e 'drop table client.user_info;'

     

    恢复完全备份
    mysql -uroot client < /mysql_bak/client_userinfo-2016-12-09.sql
    mysql -uroot -e 'select * from client.user_info;'

     

    我们只恢复关云长的信息

    # at 177

    #160717  8:55:59 server id 1  end_log_pos 312     Query  thread_id=7   exec_time=0    error_code=0

    use client/*!*/;

    SET TIMESTAMP=1468716959/*!*/;

    insert into user_info values('000000009','关云长','男','019','37')

     

    开始恢复

    [root@localhost ~]# mysqlbinlog --no-defaults --stop-datetime='2016-07-17 8:56:00' /mysql_bak/mysql-bin.000009 |mysql -u root

     

     

     

     

    仅恢复“罗纲”的信息,跳过“关云长”的信息恢复

    删除表。

    在重新恢复一下完全备份

    mysql -uroot  -e 'drop table client.user_info;'

     

    恢复完全备份
    mysql -uroot client < /mysql_bak/client_userinfo-2016-12-09.sql
    mysql -uroot -e 'select * from client.user_info;'

     

    开始恢复

     

     

    [root@localhost ~]# mysqlbinlog --no-defaults --start-datetime='2016-07-17 8:56:00' /mysql_bak/mysql-bin.000009 |mysql -u root

     

     

  • 相关阅读:
    前端vscode比较好用的保存自动格式化settings.json配置
    jvm 调优
    ElasticSearch CPU和内存占用高的优化记录
    nginx 安装部署
    Windows 下Redis的部署 及key 过期事件
    Docker 部署应用过程记录
    实现鼠标悬停,div勾画div边框的动画
    html+jquery实现简单图片裁剪
    css+jquery 实现图片局部放大预览
    flex 布局 实现电商网页菜单的多级分类展示
  • 原文地址:https://www.cnblogs.com/pangbing/p/7739879.html
Copyright © 2011-2022 走看看