广告

本站里的文章大部分经过自行整理与测试

2017年2月8日星期三

MySQL - 数据备份与恢复

备份

[options]: -h主机名 -P端口 -u用户名 -p密码

1. 备份 MySQL 数据库
$ mysqldump [options] 数据库名 > backup.sql

$ mysqldump [options] -database 数据库名 > backup.sql

2. 备份 MySQL 数据库 + 删除表 ( --add-drop-table )
$ mysqldump --add-drop-table [options] -database 数据库名 > backup.sql

3. 直接将 MySQL 数据库 压缩备份 ( gzip )
$ mysqldump [options] -database 数据库名 | gzip > backup.sql.gz

4. 备份 MySQL 数据库里的表
$ mysqldump [options] 数据库名 表名1 表名2 > backup.sql

5. 同时备份多个 MySQL 数据库
$ mysqldump [options] -databases 数据库名1 数据库名2 数据库名3 > multi_backup.sql

6. 备份数据库结构 ( --no-data )
$ mysqldump --no-data [options] -databases 数据库名1 数据库名2 数据库名3 > struct.sql

7. 备份所有数据库 ( --all-databases )
$ mysqldump [options] --all-databases > all_backup.sql

恢复

1. 还原 MySQL 数据库

$ mysql 
[options] 数据库名 < backup.sql

2. 还原压缩的 MySQL 数据库

$ gunzip < backup.sql.gz | mysql 
[options] 数据库名

3. 将数据库转移到新服务器

$ mysqldump 
[options] 数据库名 | mysql --host=*.*.*.* -C 数据库名

4. 
在 mysqldump 中使用 --master-data 和 --single-transaction

--master-data=2 : 会记录 binlog 文件和 position 的信息
--single-transaction : 会将隔离级别设置成 repeatable-commited

5. 导入数据库

常用 source 命令, 用 use 进入到某个数据库, mysql> source C:\test.sql

6. 查看 binlog 日志

$ mysqlbinlog 日志名 | more

7. general_log - 记录数据库的任何操作

- 查看 general_log 的状态和位置 : show variables like "general_log%",

- 开启 general_log : set global general_log=on



增量备份

1. 首先做一次完整备份

$ mysqldump [options] --single-transaction --master-data=2 数据库名 > backup.sql

在 backup.sql 文件中可看到

-- CHANGE MASTER TO MASTER_LOG_FILE='bin-log.000002', MASTER_LOG_POS=107;

是指备份后所有的更改将会保存到 bin-log.000002 二进制文件中

2. 在 数据库名 库的 t_student 表中增加两条记录, 然后执行 flush logs 命令

这时将会产生一个新的二进制日志文件 bin-log.000003,
bin-log.000002 则保存了全备份过后的所有更改,
既增加的记录操作也保存于 bin-log.00002

3. 再 数据库名 库中的 a 表中增加 2 条记录, 然后误删除 a 和 t_student 表

以上操作也记录在 bin-log.000003


恢复数据 + binlog 日志

1. 首先导入全备数据


$ mysql [options] < backup.sql

2. 恢复 binlog 日志 bin-log.000002

$ mysqlbinlog bin-log.000002 | mysql [options]

$ mysql [options] < bin-log.000002

3. 恢复 binlog 日志 bin-log.000003

general_log 中找到误删除的时间点,
然后更加对应的时间点到 bin-log.000003 中找到相应的 position 点,
需要恢复到误删除的前面一个 position 点

可以用如下参数来控制 binlog 的区间

开始点 --start-position
结束点 --stop-position
开始时间 --start-date 
结束时间 --stop-date

找到恢复点后, 既可以开始恢复

$ mysqlbinlog --start-position=208 bin-log.000003 | mysql [options]

没有评论:

发表评论