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

 

 

posted @ 2017-10-26 22:36  借风拥你  阅读(730)  评论(0编辑  收藏  举报